Rpath
கணினியில், rpath என்பது இயக்கக்கூடிய கோப்பு அல்லது நூலகத்தில் கடினமாக குறியிடப்பட்ட ரன்-டைம் தேடல் பாதையை குறிக்கிறது. டைனமிக் லிங்கிங் லோடர்கள் தேவையான நூலகங்களைக் கண்டறிய rpath ஐப் பயன்படுத்துகின்றன. குறிப்பாக, இது பகிரப்பட்ட நூலகங்களுக்கான பாதையை செயல்படுத்தக்கூடிய (அல்லது மற்றொரு பகிரப்பட்ட நூலகம்) தலைப்பில் குறியாக்கம் செய்கிறது. இந்த RPATH தலைப்பு மதிப்பு (செயல்படுத்தக்கூடிய மற்றும் இணைக்கக்கூடிய வடிவமைப்பு தலைப்பு தரநிலைகளில் பெயரிடப்பட்டுள்ளது) கணினி இயல்புநிலை டைனமிக் இணைக்கும் தேடல் பாதைகளை மீறலாம் அல்லது பூர்த்தி செய்யலாம். செயல்படுத்தக்கூடிய அல்லது பகிரப்பட்ட நூலகத்தின் rpath என்பது ELF செயல்படுத்தக்கூடிய அல்லது பகிரப்பட்ட நூலகங்களின். இயக்கவியல் பிரிவில் ஒரு விருப்பமான உள்ளீடாகும், இது DT _ RPATH வகை, DT _ RPATH பண்புக்கூறு என்று அழைக்கப்படுகிறது. இணைப்பாளர் மூலம் இணைப்பு நேரத்தில் அதை அங்கு சேமிக்க முடியும். சர்பாத் மற்றும் பாட்செல்ஃப் போன்ற கருவிகள் பின்னர் உள்ளீட்டை உருவாக்கலாம் அல்லது மாற்றலாம். டைனமிக் இணைப்பாளரால் DT _ RPATH உள்ளீட்டின் பயன்பாடு ELF க்கான வெவ்வேறு டைனமிக் இணைப்பிகள் DT _ RPATH பண்புக்கூறின் பயன்பாட்டை வெவ்வேறு வழிகளில் செயல்படுத்துகின்றன. குனு ld.so குனு சி நூலகத்தின் டைனமிக் லிங்கர் பின்வரும் இடங்களில் பகிரப்பட்ட நூலகங்களைத் தேடுகிறதுஃ பைனரியின் டிடி _ ஆர்பிஏடிஎச் டைனமிக் பிரிவு பண்புக்கூறில் (காலன்-பிரிக்கப்பட்ட) பாதைகள் இருந்தால், டிடி _ ருன்பாத் பண்பு இல்லை. சுற்றுச்சூழல் மாறி LD _ LIBRARY _ PATH இல் (கோலன்-பிரிக்கப்பட்ட) பாதைகள், செயல்படுத்தக்கூடிய ஒரு செட்டுயிட்/செட்ஜிட் பைனரியாக இல்லாவிட்டால், அது புறக்கணிக்கப்படுகிறது. LD _ LIBRARY _ PATH ஐ இயக்கவியல் இணைப்பியை-- நூலகம்-பாதை (எ. கா. / lib/ld-linux.so.2-- நூலகம்-பாதை $ஹோம்/மைலிப்ஸ் மைப்ரோகிராம்). பைனரியின் DT _ RUNPATH டைனமிக் பிரிவு பண்புக்கூறில் (கோலன்-பிரிக்கப்பட்ட) பாதைகள் இருந்தால். எல். டி. கான்ஃபிக் தற்காலிக சேமிப்பு கோப்பின் அடிப்படையில் தேடுதல் (பெரும்பாலும்/முதலியன/எல். டி. சோ. தற்காலிக சேமிப்பில் அமைந்துள்ளது) இது முன்பு அதிகரித்த நூலக பாதையில் காணப்பட்ட வேட்பாளர் நூலகங்களின் தொகுக்கப்பட்ட பட்டியலைக் கொண்டுள்ளது (/முதலியன/எல். டி. சோ. கான்ஃப் ஆல் அமைக்கப்பட்டது). இருப்பினும், பைனரி-z நோட்பால்ட்லிப் லிங்கர் விருப்பத்துடன் இணைக்கப்பட்டிருந்தால், இயல்புநிலை நூலக பாதைகளில் உள்ள நூலகங்கள் தவிர்க்கப்படும். நம்பகமான முன்னிருப்பு பாதை/lib இல், பின்னர்/usr/lib. பைனரி-z நோட்பால்ட்லிப் லிங்கர் விருப்பத்துடன் இணைக்கப்பட்டிருந்தால், இந்த படி தவிர்க்கப்படும். இந்த அனைத்து இடங்களிலும் பகிரப்பட்ட நூலகத்தைக் கண்டுபிடிக்கத் தவறினால், "பகிரப்பட்ட பொருள் கோப்பைத் திறக்க முடியாதுஃ அத்தகைய கோப்பு அல்லது அடைவு இல்லை" என்ற பிழை ஏற்படும். குறிப்புகள்ஃ ரீடெல்ஃப்-d <பைனரி _ பெயர்> | கிரேப் 'ஆர். * PATH 'ஒரு பைனரி கோப்பின் RPATH அல்லது RUNPATH ஐக் காட்டுகிறது. உதாரணமாக, ஜி. சி. சி. யில், ஒருவர் RPATH ஐ-Wl,-rpath,/தனிப்பயன்/rpath/மூலம் குறிப்பிடலாம். டைனமிக் இணைப்பியின்-- இன்ஹிபிட்-rpath LIST என்ற விருப்பம், LIST இல் உள்ள பொருள் பெயர்களின் DT _ RPATH மற்றும் DT _ RUNPATH பண்புகளை புறக்கணிக்க அறிவுறுத்துகிறது. LIST இல் ஒரு முக்கிய நிரலைக் குறிப்பிட, வெற்று சரத்தைக் கொடுங்கள். சூழல் மாறி LD _ PRELOAD ஆல் குறிப்பிடப்பட்ட நூலகங்கள் மற்றும் பின்னர்/et/ld. so. preலோடில் பட்டியலிடப்பட்டவை தேடல் தொடங்குவதற்கு முன்பு ஏற்றப்படுகின்றன. கோரப்பட்ட நூலகத்தின் இயல்பான செயல்பாடுகளில் சிலவற்றை (அல்லது அனைத்தையும்) மாற்றுவதற்கு ஒரு முன்கூட்டிய சுமை பயன்படுத்தப்படலாம், அல்லது இல்லையெனில் கண்டுபிடிக்க முடியாத ஒரு நூலகத்தை வழங்க இதைப் பயன்படுத்தலாம். நிலையான நூலகங்கள் தேடப்பட்டு, இணைப்பு நேரத்தில் ஈஎல்எஃப் கோப்பில் இணைக்கப்படுகின்றன, மேலும் அவை இயக்க நேரத்தில் தேடப்படுவதில்லை. குனு ld இன் பங்கு குனு லிங்கர் (குனு ld) "புதிய-குறிச்சொற்கள்" என்று அழைக்கப்படும் ஒரு அம்சத்தை செயல்படுத்துகிறது, இது LD _ LIBRARY _ PATH சூழல் மாறியை விட குறைந்த முன்னுரிமையைக் கொண்ட ஒரு பாதையை செருக பயன்படுத்தப்படலாம். புதிய-குறிச்சொற்கள் அம்சம் இணைப்பியில் (-- செயல்படுத்த-புதிய-குறிச்சொற்கள்) இயக்கப்பட்டிருந்தால், குனு ld, DT _ RPATH பண்புக்கூறுகளை அமைப்பதைத் தவிர, அதே சரத்திற்கு DT _ RUNPATH பண்புக்கூறையும் அமைக்கிறது. இயக்க நேரத்தில், டைனமிக் லிங்கர் ஒரு DT _ RUNPATH பண்புக்கூறைக் கண்டறிந்தால், அது DT _ RPATH பண்புக்கூறின் மதிப்பை புறக்கணிக்கிறது, இதன் விளைவாக LD _ LIBRARY _ PATH முதலில் சரிபார்க்கப்படுகிறது மற்றும் DT _ RUNPATH பண்புக்கூற்றில் உள்ள பாதைகள் பின்னர் மட்டுமே தேடப்படுகின்றன. டி. டி. ஆர். பி. ஏ. டி. எச் போலல்லாமல், எல். டி டைனமிக் லிங்கர் டி. டி. ஆர். யு. என். பி. ஏ. டி. எச் இருப்பிடங்களைத் தேடுவதில்லை. இணைப்பிக்கு-rpath ஐக் குறிப்பிடுவதற்குப் பதிலாக, சூழல் மாறி LD _ RUN _ PATH ஐ அதே விளைவுக்கு அமைக்கலாம். சோலாரிஸ் ld.so சோலாரிஸின் டைனமிக் லிங்கர், குறிப்பாக சன்ஓஎஸ் 5.8 இன்/lib/ld.so மற்றும் ஒத்த அமைப்புகள் DT _ RPATH பண்புக்கூறைப் பார்ப்பதற்கு முன்பு LD _ LIBRARY _ PATH மாறியில் குறிப்பிடப்பட்டுள்ள கோப்பகங்களில் உள்ள நூலகங்களைத் தேடுகின்றன. சன் மைக்ரோசிஸ்டம்ஸ் முதன்முதலில் டைனமிக் நூலக ஏற்றுதலை அறிமுகப்படுத்தியது. சன் பின்னர் rpath விருப்பத்தை ld க்குச் சேர்த்து, அத்தியாவசிய நூலகங்களில் கூடுதல் பாதுகாப்பு அம்சமாகப் பயன்படுத்தினார். சன்-ஸ்டைல் டைனமிக் நூலகங்களை ஆதரிக்க குனு எல். டி அதையே செய்தது. எடுத்துக்காட்டு $cc-பகிரப்பட்ட-Wl,-சொன் பெயர், termcap.so. 4,-rpath,/lib/termcap.so. 4-o termcap.so. 4 $objdump-x termcap.so. 4 தேவை libc.so.6 SONAME termcap.so. 4 RPATH/lib/termcap.so. 4 இந்த எடுத்துக்காட்டில், குனு அல்லது சன் ld (ld.so) கோப்பு termcap.so/lib/இல் மற்றும் termcap.so. 4 என்று பெயரிடப்படாவிட்டால், அது தேவைப்படும் நிரலுக்கான டெர்ம்கேப்பை ஏற்ற மறுக்கும். புறக்கணிக்கப்படுகிறது. / lib/termcap.so. 4 சரிசெய்ய அகற்றப்பட்டால், ஷெல் இறந்துவிடும் (ஒருவர் ஒரு மாற்று termcap.so ஐ ஏற்ற முடியாது மற்றும் ஒரு மீட்பு வட்டு தேவைப்படுகிறது, ஆனால் ஒரு புதிய termcap.so. 4 இல் RPATH/lib இருந்தால், ld.so அதை ஏற்ற பயன்படுத்த மறுக்கும். ஆனால் மற்றொரு சிக்கல் உள்ளதுஃ சில libகளை/lib இல் நகலெடுப்பது பாதுகாப்பானது அல்ல, ஏனெனில் அவை "பயன்பாட்டில் உள்ளன", மேலும் lib சோதனையாளராக இருக்க வேண்டும். மேலும், வி. எஸ் என்றால் அடிப்படை termcap.so தேவைப்படும் நிரல்கள் மறுக்கப்படுகின்றன, ஏனெனில் மேலே உள்ள நூலகம் அடிப்படை ஆதரவுக்கான ஏபிஐ அணுகலை நீக்கியது. $cc-பகிரப்பட்ட-Wl,-சொன் பெயர், lib termcap.so.2-o lib termcap.so.2 $objdump-x termcap.so.2 NEEDED libc.so.6 SONAME termcap.so.2 பழைய லினக்ஸ்/சன் மேலே பயன்படுத்தப்பட்டது, இது ஒரு பயனரை எந்த நிரலையும் அவர்கள் குறிப்பிடும் எந்த termcap.so ஐப் பயன்படுத்த வழிநடத்த அனுமதிக்கிறது, அல்லது ld.so.conf போன்ற தேடல் விதிகளைப் பயன்படுத்தி/usr/உள்ளூர்/lib (n) இல் என்ன காணப்படுகிறது. இருப்பினும், குனு ld எப்போதும்/lib அல்லது/usr/lib ஐப் பயன்படுத்துகிறது, எனவே முதலில்/lib/டர்ம்கேப். எனவே/usr/உள்ளூர்/lib க்கு நகர்த்தப்படுகிறது மற்றும் ld.so.conf இல் குறிப்பிடப்பட்டுள்ளது, இது நகரும் libs மற்றும் ld.so.conf ஐப் பயன்படுத்த உதவுகிறது அல்லது பயன்படுத்த பயன்படுத்துகிறது. ஒரு விருப்பமான நடைமுறை என்னவென்றால், கிடைக்கக்கூடிய அம்சங்களைப் பயன்படுத்த "" பயன்படுத்துவது மற்றும் நிரல்களின் சரிபார்ப்பு பதிப்பை வைத்திருப்பது (அனைத்து லிப்களும் அதை ஆதரிக்கின்றன), ஆனால் மெதுவான கணினி வேகம் மற்றும் சரியாக குறியீடு செய்ய நேரம் இல்லாததால் பழைய வெளியீடுகளில் இது பெரும்பாலும் தவிர்க்கப்பட்டது. சொல்லப்போனால், இந்த வகையான விஷயத்தை நம்ப முடிவு செய்வதற்கு முன்பு கொடுக்கப்பட்ட மேடையில் முழுமையாக சோதிக்கவும். இன்று வெளியீட்டு நிர்வாகிகள் கடந்த கால வழிகாட்டுதல்கள் அல்லது ஆவணங்களை மதிக்க உத்தரவாதம் அளிக்கவில்லை. சில யுனிக்ஸ் வகைகள் முற்றிலும் மாறுபட்ட முறையில் இணைக்கப்பட்டு ஏற்றப்படுகின்றன. rpath என்பது ஒரு குறிப்பிட்ட விநியோகத்துடன் அனுப்பப்படும் ld க்கு குறிப்பிட்டது. கடைசியாக, rpath என்பது ஒரு பாதுகாப்பு அம்சமாகும், இருப்பினும் "கட்டாய அணுகல் கட்டுப்பாடு" (MAC) மற்றும் பிற நுட்பங்கள் lib வாசிப்பு மற்றும் எழுத்தைக் கட்டுப்படுத்த rpath ஐ விட பயனுள்ளதாகவோ அல்லது மிகவும் பயனுள்ளதாகவோ இருக்கும். இன்றைய தொகுப்பாளர்களைப் பயன்படுத்தி rpath ஐக் கட்டுப்படுத்துவது பெரும்பாலும் நீண்ட மற்றும் சுருண்ட மேக் (1) ஸ்கிரிப்டிங்கைக் கருத்தில் கொண்டு கிட்டத்தட்ட சாத்தியமற்றது. இதைவிட மோசமானது என்னவென்றால், சில கட்டமைக்கப்பட்ட ஸ்கிரிப்ட்கள் அதை ஒரு விருப்பமாக முன்வைத்தாலும்-- Disable-rpath ஐ புறக்கணிக்கிறது. தொகுக்க ஒவ்வொரு ஒற்றைப்படை நிரலிலும் கட்டமைக்கப்பட்ட ஸ்கிரிப்டிங்கை சரிசெய்வது நேரத்தை எடுத்துக்கொள்வதாகவும், வெறுப்பாகவும், அநேகமாக சாத்தியமற்றதாகவும் இருக்கும். ஒரு எளிய sh (1) "ரேப்பர்" உண்மையான ld ஐ ld.bin என்று அழைக்கலாம். ld ஐ அழைப்பதற்கு முன்பு ரேப்பர் இன்/அவுட் விருப்பத்தை வடிகட்டலாம். இருப்பினும், சில கட்டமைப்புகள் rpath-இணைப்புக்கு பதிலாக rpath ஐ தவறாகப் பயன்படுத்துகின்றன அல்லது பில்ட் கோப்பகத்தில் இருக்கும் இடைநிலை தயாரிப்புகளைக் கண்டறிகின்றன என்பதைக் கவனியுங்கள்-இதனால் இறுதி தயாரிப்பில் rpath ஐ பின்தங்கிய நிலையில் கோருகிறது, இது "rpath என்றால் என்ன" என்பது பற்றிய புதிய சிக்கலாகும். பாதுகாப்புக் கருத்தாய்வுகள் rpath மற்றும் ஓடுபாதையின் பயன்பாடு பாதுகாப்பு அபாயங்களை முன்வைக்கலாம், அங்கு பயன்படுத்தப்படும் மதிப்பு தாக்குபவரின் கட்டுப்பாட்டின் கீழ் உள்ள கோப்பகங்களை உள்ளடக்கியது. வரையறுக்கப்பட்ட மதிப்பு தாக்குபவர் எழுதக்கூடிய இருப்பிடத்தை வெளிப்படையாகக் குறிப்பிடும் நிகழ்வுகளும் இதில் அடங்கும், ஆனால் ஒரு உறவினர் பாதை பயன்படுத்தப்படும் நிகழ்வுகளும் இதில் அடங்கும். அல்லது., $ORIGIN போன்றவை வழியாக அல்லது ஒரு அடைவு அறிக்கை மக்கள் வசதியற்ற நிலையில் விடப்படும் இடத்தில். குறிப்பாக, இது பாதுகாப்பற்ற பாதை பயன்படுத்தப்படும் இடத்தில் செட்டுஐடி பைனரிகளை சுரண்ட அனுமதிக்கும். தாக்குபவரின் கட்டுப்பாட்டின் கீழ் உள்ள ஒன்று அல்லது பிற கோப்பகங்களிலிருந்து தீங்கிழைக்கும் நூலகங்களை ஏற்றுவதற்கு பைனரியை ஏமாற்ற இது பயன்படுத்தப்படலாம். குறிப்புகள் வெளிப்புற இணைப்புகள் chrpath-ஒரு செயல்படுத்தக்கூடிய DT _ RPATH பண்புக்கூறுகளை மாற்றி அதை ஒரு DT _ RUNPATH பண்புக்கூறாக மாற்றுவதற்கான ஒரு கருவி ஃப்ரீபிஎஸ்டி டெவல்/chrpath போர்ட்-தற்போதுள்ள ELF பைனரிகளில் DT _ RPATH ஐ மாற்றுவதற்கான கருவி பாட்செல்ஃப்-டைனமிக் லிங்கர் மற்றும் ELF எக்ஸிக்யூடபிள்களின் DT _ RUNPATH பண்புக்கூறுகளை மாற்றுவதற்கான ஒரு சிறிய பயன்பாடு. - டி. டி. ஆர். பி. ஏ. டி. எச் கணினி நூலகங்கள் இயக்க முறைமை தொழில்நுட்பத்தின் மீதான தாக்குதல்கள் உட்பட இயக்க நேர இணைப்பியைத் தாக்குவது குறித்த காகிதம்