سؤال

إنني أتطلع إلى تصحيح جزء من البرامج المهجورة ببعض التعليمات البرمجية.

يعتمد البرنامج على الكربون، لذا لا يمكنني استخدام InputManager (على الأقل، لا أعتقد أنني أستطيع ذلك).كانت فكرتي هي إضافة مرجع dylib إلى رأس mach-o، وإطلاق سلسلة رسائل جديدة عند استدعاء روتين التهيئة.

لقد تعاملت مع رأس mach-o باستخدام أداة hexeditor لإضافة أمر التحميل المناسب (LC_ LOAD_DYLIB).

يقوم otool بإبلاغ ما أتوقع رؤيته، لذا فأنا واثق تمامًا من أن الملف منسق بشكل صحيح.

Load command 63
          cmd LC_LOAD_DYLIB
      cmdsize 60
         name @executable_path/libAltInput.dylib (offset 24)
   time stamp 1183743291 Fri Jul  6 19:34:51 2007
      current version 0.0.0
compatibility version 0.0.0

ومع ذلك، فإن تشغيل الملف الثنائي يعطيني الخطأ التالي

dyld: bad external relocation length

كل ما يمكنني تخمينه هو أن هذا يعني أنني بحاجة إلى تعديل أقسام LC_ SYMTAB أو LC_ DYNSYMTAB...

هل لدي احد اى افكار؟

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

المحلول

لست متأكدًا تمامًا مما تحاول تحقيقه، ولكن ربما تكون أسهل طريقة للقيام بذلك هي إدخال سلسلة رسائل في مهمة mach بعد أن تبدأ.يمكن العثور على مصدر رائع للمعلومات حول القيام بذلك (بالإضافة إلى تشغيل التعليمات البرمجية للقيام بذلك) هنا: http://rentzsch.com/mach_inject/.

بعض التحذيرات التي يجب أن تكون على علم بها:

  1. أصبح استدعاء mach Task_for_pid() الضروري للحصول على منفذ Mach للمهمة يتمتع الآن بامتياز ويتطلب إذنًا للاتصال.السبب وراء ذلك واضح جدًا، ولكن إذا كنت تخطط لإصدار شيء ما باستخدام التعليمات البرمجية المحقونة، فيجب أن تكون على دراية بذلك.
  2. سيتم تشغيل التعليمات البرمجية الخاصة بك في نفس مساحة العملية مثل التطبيق الأصلي ولكن في سلسلة رسائل منفصلة.وبالتالي، سيكون لديك حق الوصول الكامل إلى التطبيق، ومع ذلك، إذا لم يكن مدركًا لمؤشر الترابط، فكن حذرًا للغاية بشأن استخدام البيانات ومعالجتها من خارج التعليمات البرمجية التي تم إدخالها.من الواضح أنه سيتم تضخيم جميع المشكلات ذات مؤشرات الترابط المتعددة هنا لأن الكود الأصلي لم يكن على علم مطلقًا بإضافاتك.

نصائح أخرى

وأسهل حل لا يشمل ترميم الثنائي هو ببساطة استخدام متغير البيئة DYLD_INSERT_LIBRARIES ثم قم بتشغيل التطبيق الخاص بك.

set DYLD_INSERT_LIBRARIES to /my/path/libAltInput.dylib

وأفترض أن السبب وذكر رابط ديناميكي خطأ لأن العديد من الحقول في شكل ماخ-O ملف تحتوي على العناوين المحددة كما إزاحة من بداية الملف بحيث مضيفا قيادة حمولة أخرى من شأنه أن يبطل كل عنوان. على سبيل المثال، راجع مقالات symoff وstroff في في ماك OS X ABI ماخ-O تنسيق الملف المرجعي .

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