كيفية الحصول على معلومات من ObjDump
سؤال
واجهت مشكلة عند قراءة المعلومات التي تم إلقاؤها من ملف قابل للتنفيذ في Linux. المعلومات كما يلي:
804a0ea: 04 08 add $0x8, %al
...
804a0f4: a6 cmpsb %es:(%edi),%ds:(%esi)
لدي سؤالان:
- ماذا يعني العنوان 804A0EA و 804A0F4؟ العنوان الافتراضي في مساحة عنوان العملية؟
- ماذا يعني؟ كيف يمكنني الحصول على التعليمات على العنوان 804A0F0؟
شكرا لك مقدما.
مزيد من المعلومات حول هذا الجزء من الكود:
Disassembly of section .got.plt:
0804a0e8 <_GLOBAL_OFFSET_TABLE_>:
804a0e8: 14 a0 adc $0xa0,%al
804a0ea: 04 08 add $0x8,%al
...
804a0f4: a6 cmpsb %es:(%edi),%ds:(%esi)
804a0f5: 87 04 08 xchg %eax,(%eax,%ecx,1)
804a0f8: b6 87 mov $0x87,%dh
804a0fa: 04 08 add $0x8,%al
804a0fc: c6 87 04 08 d6 87 04 movb $0x4,-0x7829f7fc(%edi)
804a103: 08 e6 or %ah,%dh
804a105: 87 04 08 xchg %eax,(%eax,%ecx,1)
804a108: f6 87 04 08 06 88 04 testb $0x4,-0x77f9f7fc(%edi)
804a10f: 08 16 or %dl,(%esi)
804a111: 88 04 08 mov %al,(%eax,%ecx,1)
804a114: 26 88 04 08 mov %al,%es:(%eax,%ecx,1)
804a118: 36 88 04 08 mov %al,%ss:(%eax,%ecx,1)
804a11c: 46 inc %esi
أتمنى أن يعطيني أي شخص يد. :-)
المحلول
ال جدول الإزاحة العالمي لا يشير إلى التعليمات البرمجية ، فهو يشير إلى البيانات (HRM ... تعويضات ، في الواقع). لذا فإن محاولة تفكيكها لن تعطي رمزًا ذا معنى للغاية. (يمكنك بالفعل العثور على عوامل الإزاحة من خلال النظر إلى قيم الكود. 0804A014 ، ... 080487A6).
... عادة ما يعني مجموعة من 0 في التيار.
نصائح أخرى
- انسخ رمز التجميع فقط إلى محرر النصوص
- على نوع السطر الأول الرئيسي: (التجميع لـ Main ())
- وحفظ الملف كـ *.s
- افتح المحطة الطرفية والنوع GCC -S -o لتجميع أو اكتب في GDB الطرفي ثم اكتب التخطيط ASM واكتب ثم طباعة
لا تنتمي إلى StackOverflow