سؤال

أرغب في تفكيك MBR (أول 512 بايت) لقرص x86 القابل للتمهيد الذي أملكه.لقد قمت بنسخ MBR إلى ملف باستخدام

dd if=/dev/my-device of=mbr bs=512 count=1

أي اقتراحات لأداة Linux المساعدة التي يمكنها تفكيك الملف mbr?

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

المحلول

ويمكنك استخدام objdump. ووفقا ل هذه المقالة بناء الجملة هو:

objdump -D -b binary -mi386 -Maddr16,data16 mbr

نصائح أخرى

ويسمى أداة GNU على objdump ، أو على سبيل المثال:

objdump -D -b binary -m i8086 <file>

وأنا أحب ndisasm لهذا الغرض. لأنه يأتي مع المجمع NASM، وهو مجاني ومفتوح المصدر وتدرج في مستودعات حزمة من معظم توزيعات لينكس.

ndisasm -b16 -o7c00h -a -s7c3eh mbr

توضيح - من صفحة ndisasm

  • -b = يحدد وضع 16 أو 32 أو 64 بت.الافتراضي هو وضع 16 بت.
  • -o = يحدد عنوان التحميل الافتراضي للملف.يؤدي هذا الخيار إلى حصول ndisasm على العناوين التي يدرجها أسفل الهامش الأيسر، والعناوين المستهدفة للقفزات والمكالمات المتعلقة بالكمبيوتر، على اليمين.
  • -a = تمكين وضع المزامنة التلقائي (أو الذكي)، الذي سيحاول فيه ndisasm تخمين المكان الذي يجب إجراء المزامنة فيه، عن طريق فحص العناوين المستهدفة للقفزات النسبية والمكالمات التي يتم تفكيكها.
  • -s = يحدد يدويًا عنوان المزامنة، بحيث لا يقوم ndisasm بإخراج أي تعليمات للجهاز تشمل البايتات على جانبي العنوان.ومن ثم سيتم تفكيك التعليمات التي تبدأ عند هذا العنوان بشكل صحيح.
  • mbr = الملف المراد تفكيكه.

starblue و hlovdal على حد سواء وأجزاء من الإجابة الكنسي. إذا كنت ترغب في تفكيك كود i8086 الخام، وتريد عادة إنتل في بناء الجملة، وليس AT & T لغوي، أيضا، لذلك الاستخدام:

objdump -D -Mintel,i8086 -b binary -m i386 mbr.bin
objdump -D -Mintel,i386 -b binary -m i386 foo.bin    # for 32-bit code
objdump -D -Mintel,x86-64 -b binary -m i386 foo.bin  # for 64-bit code

إذا التعليمات البرمجية هو ELF (أو a.out (أو (E) COFF))، يمكنك استخدام النموذج القصير:

objdump -D -Mintel,i8086 a.out  # disassembles the entire file
objdump -d -Mintel,i8086 a.out  # disassembles only code sections

لرمز 32 بت أو 64 بت، بحذف ,8086. رأس ELF يتضمن بالفعل هذه المعلومات.

وndisasm، على النحو الذي اقترحه jameslin ، و هو أيضا خيارا جيدا، ولكن objdump عادة يأتي مع نظام التشغيل ويمكن التعامل مع كل البنى التي يدعمها بينوتيلس GNU (شاملة من تلك التي تدعمها دول مجلس التعاون الخليجي)، وعادة ما يمكن انتاجها يكون الطعام في GNU as (ndisasm يمكن عادة أن تغذي nasm رغم ذلك، بطبيعة الحال).

بيتر كوردس يشير إلى أن "<لأ href =" http://agner.org/optimize/ " يختلط = "noreferrer"> Agner الضباب في objconv هو لطيف جدا. أنه يضع علامة مميزة على أهداف الفرع، مما يجعل من الأسهل كثيرا على معرفة ما يفعله التعليمات البرمجية. ويمكن أن تفكيك إلى NASM، YASM، MASM، أو AT & T في بناء الجملة (GNU) ".

الوسائط المتعددة مايك وجدت بالفعل عن --adjust-vma. أي ما يعادل ndisasm هو الخيار -o.

لتفكيك، مثلا، رمز sh4 (كنت ثنائي واحد من ديبيان لاختبار)، استخدم هذا مع بينوتيلس GNU (تقريبا كل المجمعات الأخرى تقتصر على منصة واحدة، مثل إلى x86 مع ndisasm وobjconv):

objdump -D -b binary -m sh -EL x

وو-m هو آلة، و-EL يعني Endian طفيف (لsh4eb استخدام -EB بدلا من ذلك)، والتي هي ذات الصلة لأبنية التي توجد في أي endianness.

جرب هذا الأمر:

sudo dd if=/dev/sda bs=512 count=1 | ndisasm -b16 -o7c00h -
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top