Hexdump выводит определенные метки

Я хочу вывести только код в меток после start (start, loop1 и loop2).

$ objdump -d quasilog.o 00000000 <main>: 0: b9 64 00 00 00 mov $0x64,%ecx 00000005 <start>: 5: 31 ff xor %edi,%edi 00000007 <loop1>: 7: 89 cb mov %ecx,%ebx 00000009 <loop2>: 9: 4b dec %ebx a: 31 d2 xor %edx,%edx c: 89 c8 mov %ecx,%eax e: f7 f3 div %ebx 10: 85 d2 test %edx,%edx 12: 75 f5 jne 9 <loop2> 14: 47 inc %edi 15: 29 d9 sub %ebx,%ecx 17: 83 f9 01 cmp $0x1,%ecx 1a: 77 eb ja 7 <loop1> 1c: c3 ret

Итак, я вижу, что код в моих ярлыках имеет длину 24 байта (0x1c - 0x5 + 1).

$ hd quasilog.o 00000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| 00000010 01 00 03 00 01 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 18 01 00 00 00 00 00 00 34 00 00 00 00 00 28 00 |........4.....(.| 00000030 07 00 04 00 b9 64 00 00 00 31 ff 89 cb 4b 31 d2 |.....d...1...K1.| 00000040 89 c8 f7 f3 85 d2 75 f5 47 29 d9 83 f9 01 77 eb |......u.G)....w.| 00000050 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000070 03 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000080 03 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000090 03 00 03 00 01 00 00 00 05 00 00 00 00 00 00 00 |................| 000000a0 00 00 01 00 07 00 00 00 07 00 00 00 00 00 00 00 |................| 000000b0 00 00 01 00 0d 00 00 00 09 00 00 00 00 00 00 00 |................| 000000c0 00 00 01 00 13 00 00 00 00 00 00 00 00 00 00 00 |................| 000000d0 10 00 01 00 00 73 74 61 72 74 00 6c 6f 6f 70 31 |.....start.loop1| 000000e0 00 6c 6f 6f 70 32 00 6d 61 69 6e 00 00 2e 73 79 |.loop2.main...sy| 000000f0 6d 74 61 62 00 2e 73 74 72 74 61 62 00 2e 73 68 |mtab..strtab..sh| 00000100 73 74 72 74 61 62 00 2e 74 65 78 74 00 2e 64 61 |strtab..text..da| 00000110 74 61 00 2e 62 73 73 00 00 00 00 00 00 00 00 00 |ta..bss.........| 00000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| *

и т. д.

Я заметил, что мой код начинается с 31 FF, и я нахожу его в байте 0x39. Таким образом, это дает мне вывод, который я хочу:

$ hd -s 0x39 -n 24 quasilog.o 00000039 31 ff 89 cb 4b 31 d2 89 c8 f7 f3 85 d2 75 f5 47 |1...K1.......u.G| 00000049 29 d9 83 f9 01 77 eb c3 |)....w..|

Есть ли способ автоматизировать этот процесс? Чтобы быть ясным, мне нужен вывод hd, который предоставляет мне значения -s и -n. Я открыт для использования xxd.

Обычно мой main начинается с 0x34, но я не знаю почему.

Вот моя попытка: objdump -d quasilog.o | grep start | grep -P -o "[0-9a-f]+" | head -1 получает адрес начала.

objdump -d quasilog.o | tail -1 | grep -P -o "[0-9a-f]+" | head -1 получает последний адрес.

1
задан 19 April 2018 в 23:53

0 ответов

Другие вопросы по тегам:

Похожие вопросы: