Saída Hexdump de determinados rótulos

1

Eu quero produzir somente o código em rótulos depois de start ( start , loop1 e 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  

Portanto, vejo o código em meus rótulos com 24 bytes de comprimento (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  |................|
*

etc.

Eu noto que meu código começa com 31 FF e eu acho isso em byte 0x39. Então isso me dá a saída que eu quero:

$ 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..|

Existe alguma maneira de automatizar esse processo? Para deixar claro, quero a saída de hd , que me fornece os valores -s e -n . Estou aberto a usar o xxd também.

Geralmente, meu main começa em 0x34, mas não sei por quê.

Aqui está minha tentativa: objdump -d quasilog.o | grep start | grep -P -o "[0-9a-f]+" | head -1 obtém o endereço de início.

objdump -d quasilog.o | tail -1 | grep -P -o "[0-9a-f]+" | head -1 obtém o último endereço.

    
por qwr 17.04.2018 / 17:19

0 respostas