سؤال

هل يمكن لأحد هنا أن يخبرني إذا كان هناك شيء مشابه لـ LD_PRELOAD في الإصدارات الأخيرة من AIX؟وبشكل أكثر تحديدًا، أحتاج إلى اعتراض المكالمات من الملف الثنائي إلى time()، وإرجاع وقت ثابت، لأغراض الاختبار.

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

المحلول

وAIX 5.3 قدم LDR_PRELOAD (لبرامج 32 بت) وLDR_PRELOAD64 (لبرامج 64 بت) المتغيرات. هم analoguous إلى LD_PRELOAD على لينكس. كلاهما قوائم مفصولة القولون المكتبات والرموز سيتم بصورة استباقية تحميله من الكائنات المشتركة المذكورة قبل أي شيء آخر.

وعلى سبيل المثال، إذا كان لديك foo.so الكائن المشترك:

 LDR_PRELOAD=foo.so

إذا كنت تستخدم المحفوظات، واستخدام أسلوب AIX لتحديد الكائن ضمن أرشيف:

 LDR_PRELOAD="bar.a(shr.so)"

ومداخل متعددة منفصلة مع القولون:

 LDR_PRELOAD="foo.so:bar.a(shr.so)"

نصائح أخرى

وAIX 5L يستخدم متغير LDR_PRELOAD.

ليس هذا ما اخاف منه.أقرب شيء قمنا به (مع malloc/مجاني لتصحيح الأخطاء) هو

  • قم بإنشاء ملف مكتبة جديد بالوظائف المطلوبة فقط (نفس الاسم الأصلي).
  • وضعه في دليل مختلف عن الأصل.
  • قم بإنشاء تبعية من ملف مكتبتنا إلى الملف الأصلي.
  • قم بتغيير LD_LIBRARY_PATH (أو SHLIB_PATH؟) لوضع مكتبتنا في المرتبة الأولى في سلسلة البحث.

بهذه الطريقة، يتم التقاط وظائفنا أولاً بواسطة المُحمل، وأي وظائف لم نوفرها تم توفيرها بواسطة الأصل.

كان هذا منذ فترة.من المفترض أن يكون AIX 5L أشبه بـ Linux (وبالتالي L) لذلك قد يكون قادرًا على القيام بما تحتاجه بالضبط.

بدلًا من ذلك، إذا كان لديك المصدر، قم بإلغاء استدعاءات time() باستخدام mytime() وقم بتوفير وظيفتك.أنت لا تختبر بالضبط نفس البرنامج ولكن الاختلافات في هذا النوع من التغيير البسيط لا ينبغي أن تكون مهمة.

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