كيف يمكنني فحص محتويات قسم بيانات من ملف ELF على Linux؟

StackOverflow https://stackoverflow.com/questions/1685483

سؤال

لقد كنت تستخدم objdump للنظر في قانون التجمع في ثنائيات Linux ELF.

في بعض الأحيان هناك قفزة غير مباشرة عبر طاولة قفزة مخزنة في rodata (قراءة البيانات للقراءة فقط).

كيف تحصل على objdump أو أي أداة أخرى لتظهر لي محتويات قسم البيانات هذا؟

يمكنني تنفيذ البرنامج وفحص العناوين ذات الصلة في المصحح، لكنني لا أريد أن أفعل ذلك لأنه يجب القيام به بشكل تفاعلي.

ستحدد الإجابة المثالية أداة لن تظهر لي فقط المحتويات فحسب، بل ستسمح لي بالتحكم في تنسيق العرض، كثيرا od هل.

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

المحلول

objdump -s -j .rodata exefile

يعطي مجموعة من عرافة / قابلة للطباعة جنبا إلى جنب من محتويات rodata قسم مثل:

Contents of section .rodata:
 0000 67452301 efcdab89 67452301 efcdab89  gE#.....gE#.....
 0010 64636261 68676665 64636261 68676665  dcbahgfedcbahgfe

لا يبدو أن هناك أي شيء هناك للتحكم في التنسيق، لكنها بداية. يمكنك دائما التركيز Hex وإطعامها إلى OD، أفترض :)

نصائح أخرى

readelf -x .rodata hello_world.o

يعطي

Hex dump of section '.rodata':
  0x00000000 48656c6c 6f20776f 726c6421 0a       Hello world!.

يجب أن تفضل readelf عندما تكون ممكنا منذ ذلك الحين objdump ببساطة لا تظهر بعض الأقسام .symtab: لماذا لا يظهر Objdump أقسام.

يمكنك أيضا استخراج البايت الخام مع التقنيات المذكورة في: كيف تستخرج فقط محتويات قسم قزم وكما ذكر بواسطة YSDX..

يمكنك الحصول على قسم قزم RAW (وليس HEXDUMP-ED) مع:

# To a file:
objcopy file /dev/null --dump-section .text=text.data
# To stdout:
objcopy file /dev/null --dump-section .text=/dev/stdout | cat

أنا هنا أنا أستخدم | cat من أجل إجبار Stdout لتكون أنبوب. /dev/stdout قد تعمل بشكل غير متوقع إذا كان Stdout ملف. .text=- لا يرسل إلى Stdout ولكن إلى - ملف.

ومع ذلك objcopy و objdump لها بعض أوجه القصور (لأنها تستند إلى BFD والتي ملخصات مختلف التنسيقات القابلة للتنفيذ).

تحديث: كتبت أ أداة للقيام بذلك والتي لا تعتمد على BFD.

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