গতিশীল লিঙ্কার / লোডার নিজেই কীভাবে dyn ফাইল` দ্বারা উল্লিখিত হিসাবে গতিশীলভাবে সংযুক্ত হতে পারে?


12

এর ভাগ করা অবজেক্টের নির্ভরতা বিবেচনা করুন /bin/bash, যার মধ্যে /lib64/ld-linux-x86-64.so.2(ডায়নামিক লিঙ্কার / লোডার) অন্তর্ভুক্ত রয়েছে :

ldd /bin/bash
    linux-vdso.so.1 (0x00007fffd0887000)
    libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f57a04e3000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f57a04de000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f57a031d000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f57a0652000)

পরিদর্শন করা /lib64/ld-linux-x86-64.so.2দেখায় যে এটি এটির জন্য একটি সিলেট লিঙ্ক /lib/x86_64-linux-gnu/ld-2.28.so:

ls -la /lib64/ld-linux-x86-64.so.2 
lrwxrwxrwx 1 root root 32 May  1 19:24 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.28.so

তদতিরিক্ত, নিজের কাছে fileপ্রতিবেদনগুলি /lib/x86_64-linux-gnu/ld-2.28.soগতিশীলভাবে লিঙ্কযুক্ত:

file -L /lib64/ld-linux-x86-64.so.2
/lib64/ld-linux-x86-64.so.2: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped

আমি জানতে চাই:

  1. কীভাবে গতিশীলভাবে লিঙ্কার / লোডার ( /lib64/ld-linux-x86-64.so.2) নিজেই গতিশীলভাবে সংযুক্ত হতে পারে? এটি রানটাইমে নিজেকে যুক্ত করে?
  2. /lib/x86_64-linux-gnu/ld-2.28.soa.out বাইনারিগুলি হ্যান্ডেল করার জন্য নথিভুক্ত করা হয় ( man ld.so), তবে /bin/bashকি কোনও ELF কার্যকর করা যায়?

Ld.so প্রোগ্রামটি a.out বাইনারিগুলি পরিচালনা করে, এটি অনেক আগে ব্যবহৃত একটি ফর্ম্যাট; ld-linux.so * (libc5 এর জন্য /lib/ld-linux.so.1, glibc2 এর জন্য /lib/ld-linux.so.2) হ্যান ড্লেস ইএলএফ, যা প্রত্যেকে বছরের পর বছর ধরে ব্যবহার করে আসছে।


কার্নেল এ জাতীয় সূক্ষ্ম ট্যাক্সনোমিক সূক্ষ্মতা সম্পর্কে চিন্তা করে না (এবং আপনারও উচিত নয় ;-))। কার্নেলটি কেবলমাত্র ইএলএফগুলির মধ্যে পার্থক্য তৈরি করে যার জন্য একজন দোভাষী এবং যাঁদের প্রয়োজন নেই। এবং আফাইক, আপনি এমন কোনও দোভাষী ব্যবহার করতে পারবেন না যার নিজস্ব প্রয়োজন।
ম্যাসভি

@ স্টেফেনকিট খনিটি (( /lib/x86_64-linux-gnu/ld-2.28.soডেবিয়ান 10 বাস্টার) নেই
মশীহ

@ মোসভি হ্যাঁ, দুঃখিত, fileএটি স্থির বাইনারিগুলি কীভাবে সংজ্ঞায়িত করে এবং এর বাস্তবতা ld-2.28.so... সম্পর্কে বিভ্রান্তিকর মন্তব্যের মধ্যে আমি মিশে গিয়েছিলাম PT_DYNAMIC
স্টিফেন কিট

উত্তর:


17
  1. হ্যাঁ, এটি আরম্ভ করার সাথে সাথে এটি লিঙ্ক করে। প্রযুক্তিগতভাবে গতিশীল সংযোগকারীকে নিজের জন্য অবজেক্ট রেজোলিউশন এবং স্থানান্তরকরণের প্রয়োজন হয় না, কারণ এটি সম্পূর্ণরূপে যেমনটি সমাধান করা হয় তবে এটি প্রতীকগুলি সংজ্ঞায়িত করে এবং বাইনারিটির "ব্যাখ্যামূলক" সমাধান করার সময় এটির যত্ন নেওয়া উচিত, এবং সেই চিহ্নগুলি আপডেট হয় বোঝা লাইব্রেরিগুলিতে তাদের বাস্তবায়নগুলি নির্দেশ করে। বিশেষত, এটি প্রভাবিত করে malloc- লিংকটির সংশ্লিষ্ট প্রতীক সহ অন্তত অন্তর্নির্মিত সংস্করণ রয়েছে, তবে এটি সিটি গ্রন্থাগারের সংস্করণটি একবার লোড হয়ে ও স্থানান্তরিত করার পরে প্রতিস্থাপন করা হয়েছে (বা এমনকি যদি কোনও ইন্টারপোজড সংস্করণ দ্বারা আছে) কিছু যত্ন সহ এটি এমন কোনও স্থানে না ঘটে তা নিশ্চিত করার জন্য নেওয়া হয়েছিল যেখানে এটি লিঙ্কারটি ভেঙে দিতে পারে।

    রক্তাক্ত বিবরণ রয়েছে rtld.cএ, dl_mainফাংশন।

    নোট তবে ld.soএর কোন বাহ্যিক নির্ভরতা নেই has আপনি এর সাথে জড়িত প্রতীকগুলি দেখতে পারেন nm -D; এগুলির কোনটিই অপরিবর্তিত।

  2. র manpage শুধুমাত্র সরাসরি অধীনে এন্ট্রি বোঝায় /lib, অর্থাত /lib/ld.so (libc 5 গতিশীল linker, যা সমর্থন a.out) এবং /lib*/ld-linux*.so*(libc 6 গতিশীল linker, যা ELF সমর্থন করে)। ম্যানপেজটি খুব নির্দিষ্ট, এবং ld.soনা ld-2.28.so

    প্রচলিত সিস্টেমগুলির সিংহভাগে পাওয়া গতিশীল লিঙ্কারে a.outসমর্থন অন্তর্ভুক্ত নয় ।

fileএবং lddডায়নামিক লিঙ্কারের জন্য বিভিন্ন জিনিস প্রতিবেদন করুন কারণ স্থিতিযুক্ত লিঙ্কযুক্ত বাইনারি গঠনের বিভিন্ন সংজ্ঞা রয়েছে তাদের। কারণ ldd, একটি বাইনারি স্ট্যাটিকালি লিঙ্কযুক্ত যদি এটির কোনও DT_NEEDEDচিহ্ন থাকে না, অর্থাত্ কোনও অপরিজ্ঞাত চিহ্ন নেই। কারণ file, কোনও ইএলএফ বাইনারি স্টাটিকভাবে লিঙ্কযুক্ত যদি এর কোনও বিভাগ না থাকে PT_DYNAMIC( fileএটি নিম্নলিখিত 5.37 অনুসারে প্রকাশিত হবে; এটি এখন একটি PT_INTERPবিভাগের উপস্থিতিকে ডায়নামিকালি লিঙ্কযুক্ত বাইনারি হিসাবে সূচক হিসাবে ব্যবহার করে , যা মন্তব্যটিতে মেলে কোড).

জিএনইউ সি লাইব্রেরী ডায়নামিক লিঙ্কারের কোনও DT_NEEDEDচিহ্ন নেই, তবে এটির একটি PT_DYNAMICবিভাগ রয়েছে (যেহেতু এটি প্রযুক্তিগতভাবে একটি শেয়ার্ড লাইব্রেরি)। ফলস্বরূপ, ldd(যা গতিশীল লিঙ্কার) নির্দেশ করে যে এটি স্থিতিশীলভাবে সংযুক্ত, তবে fileএটি গতিশীলভাবে সংযুক্ত রয়েছে তা নির্দেশ করে। এটির কোনও PT_INTERPবিভাগ নেই, সুতরাং এর পরবর্তী প্রকাশে fileএটি স্থিতিযুক্ত লিঙ্কযুক্তও বোঝায়।

$ ldd /lib64/ld-linux-x86-64.so.2
        statically linked

$ file $(readlink /lib64/ld-linux-x86-64.so.2)
/lib/x86_64-linux-gnu/ld-2.28.so: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped

( file5.35 সহ)

$ file $(readlink /lib64/ld-linux-x86-64.so.2)
/lib/x86_64-linux-gnu/ld-2.28.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped

(বর্তমানে ইন-ডেভেলপমেন্ট সংস্করণ সহ file)।


গতিশীল সংযোগের প্রসঙ্গে "ব্যাখ্যা" শব্দটি কেন ব্যবহৃত হয়? শব্দটি সাধারণত প্রোগ্রামিং ভাষার প্রসঙ্গে ব্যবহৃত হয়।
শুজেং

"জিএনইউ সি লাইব্রেরী ডায়নামিক লিঙ্কার" বলতে কী বোঝ? আপনি উল্লেখ করছেন /lib*/ld-linux*.so*, বা তৃতীয় গতিশীল লিঙ্কার?
শুজেং

lddস্ট্যাটিকালি লিঙ্কযুক্ত হিসাবে ডাইনামিক লিঙ্কারের রিপোর্টগুলি আপনি কোথায় দেখতে পাচ্ছেন ? কারণ এটি ভাগ করে নেওয়া অবজেক্টের নির্ভরতার তালিকা খালি?
Shuzheng

গতিযুক্ত-সংযুক্ত প্রোগ্রামগুলি কার্যকর করার আগে তাদের সাথে কিছু কাজ করা প্রয়োজন; সেই কাজটি ডায়নামিক লিংকার দ্বারা সম্পন্ন হয়, যা কোনও দোভাষীের সাথে একই ভূমিকা পালন করে - এটি স্থানান্তর টেবিল ইত্যাদির ব্যাখ্যা করে এমন কিছু উত্পাদন করে যা কম্পিউটার চালাতে পারে।
স্টিফেন কিট

আমি যখন "জিএনইউ সি লাইব্রেরি ডায়নামিক লিঙ্কার" বলি তখন আমি জিএনইউ সি লাইব্রেরিতে অন্তর্ভুক্ত বাস্তবায়নটির উল্লেখ করছি, সাধারণত পাঠানো হয় /lib*/ld-linux*.so*। আমি ডায়নামিক লিঙ্কারের উত্স উল্লেখ করেছি কারণ লিনাক্সের জন্য আরও অন্যান্য বাস্তবায়ন উপলব্ধ।
স্টিফেন কিট

0
  1. আমি সন্দেহ করি যে fileপ্রোগ্রামটি গতিশীলভাবে লিঙ্কার / লোডারকে গতিশীলভাবে নিজের সাথে সংযুক্ত করা সম্পর্কে ভুল। lddপ্রোগ্রাম একমত না। কমপক্ষে আমার সিস্টেমে নয় (ডেবিয়ান স্ট্রেচ):

    ldd /lib/x86_64-linux-gnu/ld-2.24.so
        statically linked
    
  2. man ld.soএছাড়াও লেখা আছে: "ld-linux.so * ELF পরিচালনা করে" । আপনার সিস্টেমে (এবং আমার দিক দিয়েও) উভয়ই একই বাইনারিটির প্রতীক যা আমি কেটে নিয়েছি ELF এবং (পুরানো অপ্রচলিত) a.out বিন্যাস উভয়ই পরিচালনা করতে সক্ষম।


আপনি গৃহীত উত্তরে কোন তথ্য যুক্ত করবেন?
चमत्कार 173

2
@ चमत्कार 173 এই উত্তরটি গৃহীত উত্তরের চেয়ে পুরানো ;-)।
স্টিফেন কিট

তুমি ঠিক. আমি এটা মিস করেছি আমি ভেবেছিলাম প্রশ্ন এবং গৃহীত উত্তরগুলি খুব পুরানো এবং এই উত্তরটি শেষ ঘন্টাগুলিতে পোস্ট করা হয়েছিল। কেউ পোস্টটি পরিবর্তন না করা পর্যন্ত আমি আমার ডাউনভোটটি পূর্বাবস্থায় ফেরাতে পারি না।
चमत्कार 173
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.