Кіріспе

Компьютерлік есепте, пребайдинг, сондай-ақ прелинкинг деп аталады, бұл бағдарламалық жүктеу уақытын іске қосу алдында кітапхана символдарын шешу арқылы оңтайландыру әдісі.

Өмірбаян

Компьютерлік бағдарламалардың көпшілігі орындалуы үшін сыртқы ортақ кітапханалар қажет ететін кодтан тұрады. Бұл кітапханалар, әдетте, динамикалық байланыстыру деп аталатын процесте жүктеуші арқылы бағдарламамен бірге жүреді. Динамикалық сілтеменің кодтың көлемі мен басқаруда артықшылықтары болса да, кемшіліктері де бар. Бағдарламаны орындаған сайын жүктеуші тиісті кітапханаларды шешуі (тақырыптау) керек. Кітапханалар жадында қозғалғандықтан, шешімді орындау үшін жаза қолданылады. Бұл айыппұл шешілуін қажет ететін әрбір қосымша кітапхана үшін артады. Алдын ала сілтеме жасау бұл жазаны кітапханаларды алдын ала шешу арқылы азайтады. Кейіннен, егер кітапханалар прелинктелгеннен кейін өзгерсе, мысалы, жаңартудан кейін ғана шешіледі.

Mac OS жүйесі

Mac OS орындалатын файлдарды Mach O файл пішімімен сақтайды.

Mac OS X жүйесі

Mac OS X жүйелік бағдарламалық жасақтаманы немесе белгілі бір бағдарламаларды орнатудың "Оптимизациялау" кезеңінде алдын ала байлауды орындайды. Алдын ала байлау Mac OS X сериясында бірнеше рет өзгерді. 10.2-ге дейін алдын ала байлау тек орнату кезінде (жоғарыда аталған "Оптимизациялау" кезеңі) болды. 10.2-ден 10.3-ке дейін ОЖ қолданбаларды іске қосу кезінде алдын ала байлауды тексерді, ал бірінші рет қолданба іске қосылғанда ол алдын ала байланады, бұл кейінгі іске қосуларды тезірек жасайды. Бұл кейбір OS деңгейіндегі орнатулар жасаған қолмен орындалуы мүмкін. 10.4-те тек OS кітапханалары ғана алдын ала байланыста болды. 10.5 және одан кейінгі нұсқаларда Apple алдын ала байлауды ортақ кэш механизмімен алмастырды, бұл OS-тің өнімділігін жақсартты.

Linux жүйесі

Linux-та прелинкинг прелинк бағдарламасы арқылы жүзеге асырылады, бұл Red Hat-тың Якуб Еленик ELF бинарлары үшін жазған тегін бағдарлама. Орындау нәтижелері аралас, бірақ KDE сияқты көптеген кітапханалары бар жүйелерге көмектесетін сияқты.

прелинк кездейсоқтығы

"R" опциясымен орындалғанда, prelink кітапханалар жүктелетін мекен-жай базасын кездейсоқ таңдайды. Бұл таңдау libc-қа қайта оралуды қиындатады, өйткені адрестер сол жүйеге ғана тән. Прелинк бұлай жасауының себебі, кітапханалар үшін адрестік кеңістіктің орналасуын кездейсоқ (ASLR) қамтамасыз ететін өзекті құралдар прелинк мақсатын бұзбай және динамикалық сілтемені бағдарлама жүктелу уақытында ауыстыруды орындауға мәжбүр етпей прелинкпен бірге қолданыла алмайды. Жоғарыда айтылғандай, prelink және процестер кітапханасының адрестерін кездейсоқ белгілеуді бірге қолдануға болмайды. Осы қауіпсіздікті толықтай жоюды болдырмау үшін prelink өз рандомизациясын ұсынады; дегенмен бұл prelink-тің жалпы ақпараттың шығуына көмектеспейді. Мақсатты жүйедегі белгілі бір кездейсоқ файлдарды оқи алатын шабуылшылар мұнда кітапханалар артықшылықты демондарда жүктелетінін таба алады; көбінесе libc-тің шабуылдарына қайтарым ретінде қолданылатын ең көп таралған кітапхана болғандықтан libc жеткілікті. libc сияқты ортақ кітапхана файлын оқып, жергілікті қолжетімділігі бар шабуылшы libc-тің жүктеу мекенжайын жүйедегі барлық басқа қолданбалардан таба алады. Көптеген бағдарламалар libc-ге сілтеме жасайтындықтан, libc кітапханасының файлы әрқашан оқуға болады; жергілікті қолжетімділігі бар кез-келген шабуылшы жоғары артықшылықты процестердің адрестік кеңістігі туралы ақпаратты жинауы мүмкін. Жергілікті қол жеткізуді әдетте CGI скрипттерін пайдалануға мүмкіндік беретін қабықша шоттары немесе веб-серверлік шоттар арқылы алуға болады, олар жүйедегі кез-келген файлды оқиды және шығарады. Егер CGI скриптісі бар болса, атаушылар тіркелгісіз каталогты аралаудың осалдықтарын пайдалана алады. Прелинк жиі мерзімді түрде, әдетте екі апта сайын, кез-келген кітапхананың мекенжайы уақыт өте келе өзгеру мүмкіндігіне ие. prelink жиі қосымша режимде қолданылады, онда алдын ала қосылған кітапханалар өте қажет болғанда ғана өзгертілмейді, сондықтан кітапхана prelink қайта іске қосылғанда өзінің базалық мекенжайын өзгерте алмайды. Бұл кез келген адреске prelink орындалатын кезеңнің жартысын береді. Сонымен қатар, егер кітапхананың жаңа нұсқасы орнатылса, адрестер өзгеріп отырады. Якуб Еленик Red Hat Enterprise Linux және Fedora-да прелинкингті елемейтін позицияға тәуелсіз орындалатын файлдар (PIE) бар екенін атап өтті және желілік және SUID бағдарламаларын қауіпсіз ортаны қамтамасыз ету үшін PIE-ге құруды ұсынды.

Мәселелер

Кейде, prelinking қосымшаны тексеру нүктесімен және blcr сияқты кітапханаларды қайта бастаумен, сондай-ақ blcr-ді ішкі түрде қолданатын басқа кітапханалармен (OpenMPI сияқты) проблемалар туғызады. Бір хосттағы бағдарламаны тексеру нүктесімен тексеру кезінде және басқа хостта қайта бастауға тырысқанда, қайта басталған бағдарлама хосттың нақты кітапханалық жады мекенжайын кездейсоқ белгілеудегі айырмашылықтарға байланысты сегменттік қатемен сәтсіздікке ұшырауы мүмкін. Сенімсіз дереккөз: 2013 жылғы тамыз