سؤال

جئت عبر الإشارة إلى أنه في الآونة الأخيرة على proggit و (حتى الآن) لا يفسر.

وأظن هذا قد يكون ذلك ولكن أنا لا أعرف على وجه اليقين.

هل كانت مفيدة؟

المحلول

إذا قمت بتعيين LD_PRELOAD إلى مسار مشترك الكائن الذي سيتم تحميل الملف قبل أي مكتبة أخرى (بما في ذلك وقت التشغيل C, libc.so).لذا تشغيل ls مع خاص بك malloc() تنفيذ فعل هذا:

$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls

نصائح أخرى

ويمكنك تجاوز الرموز في المكتبات الأسهم عن طريق إنشاء مكتبة مع نفس الرموز وتحديد مكتبة في LD_PRELOAD.

وبعض الناس استخدامه لتحديد المكتبات في مواقع غير قياسي، ولكن LD_LIBRARY_PATH هو أفضل لهذا الغرض.

ومع LD_PRELOAD يمكنك إعطاء الأسبقية المكتبات.

وعلى سبيل المثال يمكن أن تكتب مكتبة التي تنفذ malloc وfree. وعن طريق تحميل هذه مع LD_PRELOAD بك malloc وfree سيتم تنفيذها بدلا من تلك المعايير.

العديد من الناس ذكره ، باستخدام LD_PRELOAD إلى التحميل المسبق المكتبة.راجع للشغل, يمكنك تحقق إذا كان الإعداد غير متاح من قبل ldd الأوامر.

على سبيل المثال:لنفترض أنك تحتاج إلى التحميل المسبق الخاصة بك libselinux.so.1.

> ldd /bin/ls
    ...
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f3927b1d000)
    libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f3927914000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f392754f000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f3927311000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f392710c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3927d65000)
    libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f3926f07000)

وبالتالي تعيين التحميل المسبق البيئة:

  export LD_PRELOAD=/home/patric/libselinux.so.1

تحقق من المكتبة الخاصة بك مرة أخرى:

>ldd /bin/ls
    ...
    libselinux.so.1 =>
    /home/patric/libselinux.so.1 (0x00007fb9245d8000)
    ...

والقوائم LD_PRELOAD مكتبات المشتركة مع الوظائف التي تجاوز مجموعة موحدة، تماما كما يفعل /etc/ld.so.preload. ويتم تنفيذ هذه من قبل /lib/ld-linux.so محمل. إذا كنت ترغب في تجاوز مجرد عدد قليل من الوظائف المختارة، يمكنك القيام بذلك عن طريق إنشاء ملف الكائن الأسمى ووضع LD_PRELOAD. ووظائف في هذا الملف الكائن تجاوز مجرد تلك المهام ترك الآخرين كما كانت.

لمزيد من المعلومات حول المكتبات المشتركة الزيارة   http://tldp.org/HOWTO/Program-Library-HOWTO/ المشتركة-libraries.html

وأنه من السهل أن تصدير mylib.so إلى الحياة الفطرية:

$ export LD_PRELOAD=/path/mylib.so
$ ./mybin

وتعطيل:

$ export LD_PRELOAD=

وهنا هو بلوق وظيفة مفصلة حول تحميلها مسبقا:

https://blog.cryptomilk.org/2014/07 / 21 / ما هو-تحميلها مسبقا /

وعن طريق مسار LD_PRELOAD، يمكنك فرض محمل التطبيق لتحميل المقدمة الكائن المشترك، على مدى الافتراضية المقدمة.

والمطورون يستخدم هذا لتصحيح التطبيقات من خلال توفير إصدارات مختلفة من الكائنات المشتركة.

لقد استخدامه الإختراق بعض التطبيقات، من خلال تجاوز المهام الموجودة باستخدام الكائنات المشتركة المعدة.

وعندما يستخدم LD_PRELOAD هذا الملف سيتم تحميل قبل أي شيء آخر ليب $export LD_PRELOAD=/path/lib أن محملة مسبقا، وحتى هذه يمكن استخدامها في برامج للغاية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top