سؤال

ونحن نعمل على تطوير ميناء جنو مجمع لهندسة عميل. الآن المشكلة التي تواجهها هي ما يلي:

إذا معامل فوري لتعليمات هو تعبير تشمل أكثر من حرف المنقولة، كيف التعامل معها في ملف الإخراج في شكل قزم. ماذا سيكون نقل المعلومات المنتجة في مثل هذه الحالة؟

وعلى سبيل المثال:

j label1 + label2

وحيث يتم تعريف LABEL1 وLABEL2 في أقسام المنقولة، لأنها قد تكون هي نفسها الأقسام أو الفروع المنقولة مختلفة.

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

المحلول

وELF لا يعرف عن تعليمات، في حد ذاته. فهو يعرف عن ترميزات معينة من إزاحة رمز ضمن التعليمات. في المجمع، وكنت بحاجة لإخراج اثنين من السجلات نقل، كل مع الثلاثي المقابلة [عنوان، اكتب، رمز] لرأب الصدع صحيح أن جزء من التعليمات. رابط لن بالضرورة يعرفون حتى أن هذه السجلات اثنين تشير إلى نفس التعليمات.

وأنواع نقل ELF هي تماما تعتمد على وحدة المعالجة المركزية (أو لنكون أكثر دقة، ISA-تعتمد)، لذلك أنت حر في تحديد أيا كان الترحيل تحتاج لبنية جديدة.

ومن الصعب أن تكون أكثر تحديدا دون تفاصيل الترميز التعليمات.

نصائح أخرى

وأنا أعرف جاك حول ELF وأكثر من ذلك إلا قليلا حول ربط ولكن ...

وأتوقع أن كل المعامل يتم التعامل بنفس الطريقة التي سيكون إذا كان هناك واحد فقط.

وOTOH قد تكون هذه القضية أن شكل يغير j تبعا للمكان الذي هي العلامات؟ إذا كان الأمر كذلك، I <م> التفكير كنت غرقت كما linkers ليست ذكية بما فيه الكفاية للقيام بذلك النوع من الشيء (وIIRC ADA بناء نظام قد يكون أكثر ذكاء من معظم ذلك قد ننظر في الأمر.)

وأتوقع إدخال واحد لكل عنوان كل التعليمات التي تحتاج إعادة التوطين.

قد يكون

وObjdump قادرة على عرض الجدول نقل ملف قابل للتنفيذ أو كائن، ولكن أنا لا أعرف أعلام مرتجلا.

واقتراحي هو محاولة لحفر وإلى x86 (أو CISC آخر) التعليم أن يفعل شيئا على غرار ما يفعل قوس العميل الخاص بك، ونرى ما يتم إنشاء الترحيل عند تجميع / ربطه.

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