如何在动态链接的可执行文件中 objdump 动态链接函数的汇编代码?

逆向工程 拆卸 部件 转储
2021-06-25 20:39:55

编译一个最小的 C++ 程序: g++ -g -Wall -Wextra -std=c++17 -o prog main.cpp

int main()
{
}

执行objdump -C -D prog所有部分中的一个,我得到以下输出:

prog:     file format elf64-x86-64


Disassembly of section .interp:

0000000000400200 <.interp>:
  400200:   2f                      (bad)  
  400201:   6c                      insb   (%dx),%es:(%rdi)
  400202:   69 62 36 34 2f 6c 64    imul   $0x646c2f34,0x36(%rdx),%esp
  400209:   2d 6c 69 6e 75          sub    $0x756e696c,%eax
  40020e:   78 2d                   js     40023d <_init-0x193>
  400210:   78 38                   js     40024a <_init-0x186>
  400212:   36 2d 36 34 2e 73       ss sub $0x732e3436,%eax
  400218:   6f                      outsl  %ds:(%rsi),(%dx)
  400219:   2e 32 00                xor    %cs:(%rax),%al

Disassembly of section .note.ABI-tag:

000000000040021c <.note.ABI-tag>:
  40021c:   04 00                   add    $0x0,%al
  40021e:   00 00                   add    %al,(%rax)
  400220:   10 00                   adc    %al,(%rax)
  400222:   00 00                   add    %al,(%rax)
  400224:   01 00                   add    %eax,(%rax)
  400226:   00 00                   add    %al,(%rax)
  400228:   47                      rex.RXB
  400229:   4e 55                   rex.WRX push %rbp
  40022b:   00 00                   add    %al,(%rax)
  40022d:   00 00                   add    %al,(%rax)
  40022f:   00 02                   add    %al,(%rdx)
  400231:   00 00                   add    %al,(%rax)
  400233:   00 06                   add    %al,(%rsi)
  400235:   00 00                   add    %al,(%rax)
  400237:   00 20                   add    %ah,(%rax)
  400239:   00 00                   add    %al,(%rax)
    ...

Disassembly of section .hash:

0000000000400240 <.hash>:
  400240:   03 00                   add    (%rax),%eax
  400242:   00 00                   add    %al,(%rax)
  400244:   05 00 00 00 01          add    $0x1000000,%eax
  400249:   00 00                   add    %al,(%rax)
  40024b:   00 04 00                add    %al,(%rax,%rax,1)
    ...
  40025e:   00 00                   add    %al,(%rax)
  400260:   02 00                   add    (%rax),%al
  400262:   00 00                   add    %al,(%rax)
  400264:   03 00                   add    (%rax),%eax
    ...

Disassembly of section .dynsym:

0000000000400268 <.dynsym>:
    ...
  400280:   10 00                   adc    %al,(%rax)
  400282:   00 00                   add    %al,(%rax)
  400284:   20 00                   and    %al,(%rax)
    ...
  400296:   00 00                   add    %al,(%rax)
  400298:   77 00                   ja     40029a <_init-0x136>
  40029a:   00 00                   add    %al,(%rax)
  40029c:   12 00                   adc    (%rax),%al
    ...
  4002ae:   00 00                   add    %al,(%rax)
  4002b0:   1f                      (bad)  
  4002b1:   00 00                   add    %al,(%rax)
  4002b3:   00 20                   add    %ah,(%rax)
    ...
  4002c5:   00 00                   add    %al,(%rax)
  4002c7:   00 3b                   add    %bh,(%rbx)
  4002c9:   00 00                   add    %al,(%rax)
  4002cb:   00 20                   add    %ah,(%rax)
    ...

Disassembly of section .dynstr:

00000000004002e0 <.dynstr>:
  4002e0:   00 6c 69 62             add    %ch,0x62(%rcx,%rbp,2)
  4002e4:   73 74                   jae    40035a <_init-0x76>
  4002e6:   64 63 2b                movslq %fs:(%rbx),%ebp
  4002e9:   2b 2e                   sub    (%rsi),%ebp
  4002eb:   73 6f                   jae    40035c <_init-0x74>
  4002ed:   2e 36 00 5f 5f          cs add %bl,%ss:0x5f(%rdi)
  4002f2:   67 6d                   insl   (%dx),%es:(%edi)
  4002f4:   6f                      outsl  %ds:(%rsi),(%dx)
  4002f5:   6e                      outsb  %ds:(%rsi),(%dx)
  4002f6:   5f                      pop    %rdi
  4002f7:   73 74                   jae    40036d <_init-0x63>
  4002f9:   61                      (bad)  
  4002fa:   72 74                   jb     400370 <_init-0x60>
  4002fc:   5f                      pop    %rdi
  4002fd:   5f                      pop    %rdi
  4002fe:   00 5f 49                add    %bl,0x49(%rdi)
  400301:   54                      push   %rsp
  400302:   4d 5f                   rex.WRB pop %r15
  400304:   64 65 72 65             fs gs jb 40036d <_init-0x63>
  400308:   67 69 73 74 65 72 54    imul   $0x4d547265,0x74(%ebx),%esi
  40030f:   4d 
  400310:   43 6c                   rex.XB insb (%dx),%es:(%rdi)
  400312:   6f                      outsl  %ds:(%rsi),(%dx)
  400313:   6e                      outsb  %ds:(%rsi),(%dx)
  400314:   65 54                   gs push %rsp
  400316:   61                      (bad)  
  400317:   62                      (bad)  
  400318:   6c                      insb   (%dx),%es:(%rdi)
  400319:   65 00 5f 49             add    %bl,%gs:0x49(%rdi)
  40031d:   54                      push   %rsp
  40031e:   4d 5f                   rex.WRB pop %r15
  400320:   72 65                   jb     400387 <_init-0x49>
  400322:   67 69 73 74 65 72 54    imul   $0x4d547265,0x74(%ebx),%esi
  400329:   4d 
  40032a:   43 6c                   rex.XB insb (%dx),%es:(%rdi)
  40032c:   6f                      outsl  %ds:(%rsi),(%dx)
  40032d:   6e                      outsb  %ds:(%rsi),(%dx)
  40032e:   65 54                   gs push %rsp
  400330:   61                      (bad)  
  400331:   62                      (bad)  
  400332:   6c                      insb   (%dx),%es:(%rdi)
  400333:   65 00 6c 69 62          add    %ch,%gs:0x62(%rcx,%rbp,2)
  400338:   6d                      insl   (%dx),%es:(%rdi)
  400339:   2e 73 6f                jae,pn 4003ab <_init-0x25>
  40033c:   2e 36 00 6c 69 62       cs add %ch,%ss:0x62(%rcx,%rbp,2)
  400342:   67 63 63 5f             movslq 0x5f(%ebx),%esp
  400346:   73 2e                   jae    400376 <_init-0x5a>
  400348:   73 6f                   jae    4003b9 <_init-0x17>
  40034a:   2e 31 00                xor    %eax,%cs:(%rax)
  40034d:   6c                      insb   (%dx),%es:(%rdi)
  40034e:   69 62 63 2e 73 6f 2e    imul   $0x2e6f732e,0x63(%rdx),%esp
  400355:   36 00 5f 5f             add    %bl,%ss:0x5f(%rdi)
  400359:   6c                      insb   (%dx),%es:(%rdi)
  40035a:   69 62 63 5f 73 74 61    imul   $0x6174735f,0x63(%rdx),%esp
  400361:   72 74                   jb     4003d7 <_init+0x7>
  400363:   5f                      pop    %rdi
  400364:   6d                      insl   (%dx),%es:(%rdi)
  400365:   61                      (bad)  
  400366:   69 6e 00 47 4c 49 42    imul   $0x42494c47,0x0(%rsi),%ebp
  40036d:   43 5f                   rex.XB pop %r15
  40036f:   32 2e                   xor    (%rsi),%ch
  400371:   32 2e                   xor    (%rsi),%ch
  400373:   35                      .byte 0x35
    ...

Disassembly of section .gnu.version:

0000000000400376 <.gnu.version>:
  400376:   00 00                   add    %al,(%rax)
  400378:   00 00                   add    %al,(%rax)
  40037a:   02 00                   add    (%rax),%al
  40037c:   00 00                   add    %al,(%rax)
    ...

Disassembly of section .gnu.version_r:

0000000000400380 <.gnu.version_r>:
  400380:   01 00                   add    %eax,(%rax)
  400382:   01 00                   add    %eax,(%rax)
  400384:   6d                      insl   (%dx),%es:(%rdi)
  400385:   00 00                   add    %al,(%rax)
  400387:   00 10                   add    %dl,(%rax)
  400389:   00 00                   add    %al,(%rax)
  40038b:   00 00                   add    %al,(%rax)
  40038d:   00 00                   add    %al,(%rax)
  40038f:   00 75 1a                add    %dh,0x1a(%rbp)
  400392:   69 09 00 00 02 00       imul   $0x20000,(%rcx),%ecx
  400398:   89 00                   mov    %eax,(%rax)
  40039a:   00 00                   add    %al,(%rax)
  40039c:   00 00                   add    %al,(%rax)
    ...

Disassembly of section .rela.dyn:

00000000004003a0 <.rela.dyn>:
  4003a0:   d0 08                   rorb   (%rax)
  4003a2:   60                      (bad)  
  4003a3:   00 00                   add    %al,(%rax)
  4003a5:   00 00                   add    %al,(%rax)
  4003a7:   00 06                   add    %al,(%rsi)
  4003a9:   00 00                   add    %al,(%rax)
  4003ab:   00 01                   add    %al,(%rcx)
    ...

Disassembly of section .rela.plt:

00000000004003b8 <.rela.plt>:
  4003b8:   f0 08 60 00             lock or %ah,0x0(%rax)
  4003bc:   00 00                   add    %al,(%rax)
  4003be:   00 00                   add    %al,(%rax)
  4003c0:   07                      (bad)  
  4003c1:   00 00                   add    %al,(%rax)
  4003c3:   00 02                   add    %al,(%rdx)
    ...

Disassembly of section .init:

00000000004003d0 <_init>:
  4003d0:   48 83 ec 08             sub    $0x8,%rsp
  4003d4:   48 8b 05 f5 04 20 00    mov    0x2004f5(%rip),%rax        # 6008d0 <_DYNAMIC+0x200>
  4003db:   48 85 c0                test   %rax,%rax
  4003de:   74 05                   je     4003e5 <_init+0x15>
  4003e0:   e8 2b 00 00 00          callq  400410 <__libc_start_main@plt+0x10>
  4003e5:   48 83 c4 08             add    $0x8,%rsp
  4003e9:   c3                      retq   

Disassembly of section .plt:

00000000004003f0 <__libc_start_main@plt-0x10>:
  4003f0:   ff 35 ea 04 20 00       pushq  0x2004ea(%rip)        # 6008e0 <_GLOBAL_OFFSET_TABLE_+0x8>
  4003f6:   ff 25 ec 04 20 00       jmpq   *0x2004ec(%rip)        # 6008e8 <_GLOBAL_OFFSET_TABLE_+0x10>
  4003fc:   0f 1f 40 00             nopl   0x0(%rax)

0000000000400400 <__libc_start_main@plt>:
  400400:   ff 25 ea 04 20 00       jmpq   *0x2004ea(%rip)        # 6008f0 <_GLOBAL_OFFSET_TABLE_+0x18>
  400406:   68 00 00 00 00          pushq  $0x0
  40040b:   e9 e0 ff ff ff          jmpq   4003f0 <_init+0x20>

Disassembly of section .plt.got:

0000000000400410 <.plt.got>:
  400410:   ff 25 ba 04 20 00       jmpq   *0x2004ba(%rip)        # 6008d0 <_DYNAMIC+0x200>
  400416:   66 90                   xchg   %ax,%ax

Disassembly of section .text:

0000000000400420 <_start>:
  400420:   31 ed                   xor    %ebp,%ebp
  400422:   49 89 d1                mov    %rdx,%r9
  400425:   5e                      pop    %rsi
  400426:   48 89 e2                mov    %rsp,%rdx
  400429:   48 83 e4 f0             and    $0xfffffffffffffff0,%rsp
  40042d:   50                      push   %rax
  40042e:   54                      push   %rsp
  40042f:   49 c7 c0 80 05 40 00    mov    $0x400580,%r8
  400436:   48 c7 c1 10 05 40 00    mov    $0x400510,%rcx
  40043d:   48 c7 c7 f7 04 40 00    mov    $0x4004f7,%rdi
  400444:   e8 b7 ff ff ff          callq  400400 <__libc_start_main@plt>
  400449:   f4                      hlt    
  40044a:   66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)

0000000000400450 <deregister_tm_clones>:
  400450:   55                      push   %rbp
  400451:   b8 08 09 60 00          mov    $0x600908,%eax
  400456:   48 3d 08 09 60 00       cmp    $0x600908,%rax
  40045c:   48 89 e5                mov    %rsp,%rbp
  40045f:   74 17                   je     400478 <deregister_tm_clones+0x28>
  400461:   b8 00 00 00 00          mov    $0x0,%eax
  400466:   48 85 c0                test   %rax,%rax
  400469:   74 0d                   je     400478 <deregister_tm_clones+0x28>
  40046b:   5d                      pop    %rbp
  40046c:   bf 08 09 60 00          mov    $0x600908,%edi
  400471:   ff e0                   jmpq   *%rax
  400473:   0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  400478:   5d                      pop    %rbp
  400479:   c3                      retq   
  40047a:   66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)

0000000000400480 <register_tm_clones>:
  400480:   be 08 09 60 00          mov    $0x600908,%esi
  400485:   55                      push   %rbp
  400486:   48 81 ee 08 09 60 00    sub    $0x600908,%rsi
  40048d:   48 89 e5                mov    %rsp,%rbp
  400490:   48 c1 fe 03             sar    $0x3,%rsi
  400494:   48 89 f0                mov    %rsi,%rax
  400497:   48 c1 e8 3f             shr    $0x3f,%rax
  40049b:   48 01 c6                add    %rax,%rsi
  40049e:   48 d1 fe                sar    %rsi
  4004a1:   74 15                   je     4004b8 <register_tm_clones+0x38>
  4004a3:   b8 00 00 00 00          mov    $0x0,%eax
  4004a8:   48 85 c0                test   %rax,%rax
  4004ab:   74 0b                   je     4004b8 <register_tm_clones+0x38>
  4004ad:   5d                      pop    %rbp
  4004ae:   bf 08 09 60 00          mov    $0x600908,%edi
  4004b3:   ff e0                   jmpq   *%rax
  4004b5:   0f 1f 00                nopl   (%rax)
  4004b8:   5d                      pop    %rbp
  4004b9:   c3                      retq   
  4004ba:   66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)

00000000004004c0 <__do_global_dtors_aux>:
  4004c0:   80 3d 41 04 20 00 00    cmpb   $0x0,0x200441(%rip)        # 600908 <__TMC_END__>
  4004c7:   75 17                   jne    4004e0 <__do_global_dtors_aux+0x20>
  4004c9:   55                      push   %rbp
  4004ca:   48 89 e5                mov    %rsp,%rbp
  4004cd:   e8 7e ff ff ff          callq  400450 <deregister_tm_clones>
  4004d2:   c6 05 2f 04 20 00 01    movb   $0x1,0x20042f(%rip)        # 600908 <__TMC_END__>
  4004d9:   5d                      pop    %rbp
  4004da:   c3                      retq   
  4004db:   0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  4004e0:   f3 c3                   repz retq 
  4004e2:   0f 1f 40 00             nopl   0x0(%rax)
  4004e6:   66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  4004ed:   00 00 00 

00000000004004f0 <frame_dummy>:
  4004f0:   55                      push   %rbp
  4004f1:   48 89 e5                mov    %rsp,%rbp
  4004f4:   5d                      pop    %rbp
  4004f5:   eb 89                   jmp    400480 <register_tm_clones>

00000000004004f7 <main>:
  4004f7:   55                      push   %rbp
  4004f8:   48 89 e5                mov    %rsp,%rbp
  4004fb:   b8 00 00 00 00          mov    $0x0,%eax
  400500:   5d                      pop    %rbp
  400501:   c3                      retq   
  400502:   66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  400509:   00 00 00 
  40050c:   0f 1f 40 00             nopl   0x0(%rax)

    ...

  (Due to limits of the body in SO questions I'm cutting it off here)

但是当我单步调试调试器时,我最终得到了以下的汇编代码__libc_start_main(在程序的 objdump 中看不到其代码):

0x00007ffffe790740 <__libc_start_main+0>:   push   %r14
0x00007ffffe790742 <__libc_start_main+2>:   push   %r13
0x00007ffffe790744 <__libc_start_main+4>:   push   %r12
0x00007ffffe790746 <__libc_start_main+6>:   push   %rbp
0x00007ffffe790747 <__libc_start_main+7>:   mov    %rcx,%rbp
0x00007ffffe79074a <__libc_start_main+10>:  push   %rbx
0x00007ffffe79074b <__libc_start_main+11>:  sub    $0x90,%rsp
0x00007ffffe790752 <__libc_start_main+18>:  mov    0x3a37ef(%rip),%rax        # 0x7ffffeb33f48
0x00007ffffe790759 <__libc_start_main+25>:  mov    %rdi,0x18(%rsp)
0x00007ffffe79075e <__libc_start_main+30>:  mov    %esi,0x14(%rsp)
0x00007ffffe790762 <__libc_start_main+34>:  mov    %rdx,0x8(%rsp)
0x00007ffffe790767 <__libc_start_main+39>:  test   %rax,%rax
0x00007ffffe79076a <__libc_start_main+42>:  je     0x7ffffe790837 <__libc_start_main+247>
0x00007ffffe790770 <__libc_start_main+48>:  mov    (%rax),%eax
0x00007ffffe790772 <__libc_start_main+50>:  xor    %edx,%edx
0x00007ffffe790774 <__libc_start_main+52>:  test   %eax,%eax
0x00007ffffe790776 <__libc_start_main+54>:  sete   %dl
0x00007ffffe790779 <__libc_start_main+57>:  lea    0x3a3900(%rip),%rax        # 0x7ffffeb34080 <__libc_multiple_libcs>
0x00007ffffe790780 <__libc_start_main+64>:  test   %r9,%r9
0x00007ffffe790783 <__libc_start_main+67>:  mov    %edx,(%rax)
0x00007ffffe790785 <__libc_start_main+69>:  je     0x7ffffe790793 <__libc_start_main+83>
0x00007ffffe790787 <__libc_start_main+71>:  xor    %edx,%edx
0x00007ffffe790789 <__libc_start_main+73>:  xor    %esi,%esi
0x00007ffffe79078b <__libc_start_main+75>:  mov    %r9,%rdi
0x00007ffffe79078e <__libc_start_main+78>:  callq  0x7ffffe7aa280 <__GI___cxa_atexit>
0x00007ffffe790793 <__libc_start_main+83>:  mov    0x3a36d6(%rip),%rdx        # 0x7ffffeb33e70
0x00007ffffe79079a <__libc_start_main+90>:  mov    (%rdx),%ebx
0x00007ffffe79079c <__libc_start_main+92>:  and    $0x2,%ebx
0x00007ffffe79079f <__libc_start_main+95>:  jne    0x7ffffe790876 <__libc_start_main+310>
0x00007ffffe7907a5 <__libc_start_main+101>: test   %rbp,%rbp
0x00007ffffe7907a8 <__libc_start_main+104>: je     0x7ffffe7907bf <__libc_start_main+127>
0x00007ffffe7907aa <__libc_start_main+106>: mov    0x3a3707(%rip),%rax        # 0x7ffffeb33eb8
0x00007ffffe7907b1 <__libc_start_main+113>: mov    0x8(%rsp),%rsi
0x00007ffffe7907b6 <__libc_start_main+118>: mov    0x14(%rsp),%edi
0x00007ffffe7907ba <__libc_start_main+122>: mov    (%rax),%rdx
0x00007ffffe7907bd <__libc_start_main+125>: callq  *%rbp
0x00007ffffe7907bf <__libc_start_main+127>: mov    0x3a36aa(%rip),%rax        # 0x7ffffeb33e70
0x00007ffffe7907c6 <__libc_start_main+134>: mov    0x170(%rax),%r14d
0x00007ffffe7907cd <__libc_start_main+141>: test   %r14d,%r14d
0x00007ffffe7907d0 <__libc_start_main+144>: jne    0x7ffffe7908cb <__libc_start_main+395>
0x00007ffffe7907d6 <__libc_start_main+150>: test   %ebx,%ebx
0x00007ffffe7907d8 <__libc_start_main+152>: jne    0x7ffffe7908a8 <__libc_start_main+360>
0x00007ffffe7907de <__libc_start_main+158>: lea    0x20(%rsp),%rdi
0x00007ffffe7907e3 <__libc_start_main+163>: callq  0x7ffffe7a5250 <_setjmp>
0x00007ffffe7907e8 <__libc_start_main+168>: test   %eax,%eax
0x00007ffffe7907ea <__libc_start_main+170>: jne    0x7ffffe79083e <__libc_start_main+254>
0x00007ffffe7907ec <__libc_start_main+172>: mov    %fs:0x300,%rax
0x00007ffffe7907f5 <__libc_start_main+181>: mov    %rax,0x68(%rsp)
0x00007ffffe7907fa <__libc_start_main+186>: mov    %fs:0x2f8,%rax
0x00007ffffe790803 <__libc_start_main+195>: mov    %rax,0x70(%rsp)
0x00007ffffe790808 <__libc_start_main+200>: lea    0x20(%rsp),%rax
0x00007ffffe79080d <__libc_start_main+205>: mov    %rax,%fs:0x300
0x00007ffffe790816 <__libc_start_main+214>: mov    0x3a369b(%rip),%rax        # 0x7ffffeb33eb8
0x00007ffffe79081d <__libc_start_main+221>: mov    0x8(%rsp),%rsi
0x00007ffffe790822 <__libc_start_main+226>: mov    0x14(%rsp),%edi
0x00007ffffe790826 <__libc_start_main+230>: mov    (%rax),%rdx
0x00007ffffe790829 <__libc_start_main+233>: mov    0x18(%rsp),%rax
0x00007ffffe79082e <__libc_start_main+238>: callq  *%rax
0x00007ffffe790830 <__libc_start_main+240>: mov    %eax,%edi
0x00007ffffe790832 <__libc_start_main+242>: callq  0x7ffffe7aa030 <__GI_exit>
0x00007ffffe790837 <__libc_start_main+247>: xor    %edx,%edx
0x00007ffffe790839 <__libc_start_main+249>: jmpq   0x7ffffe790779 <__libc_start_main+57>
0x00007ffffe79083e <__libc_start_main+254>: mov    0x3a8ecb(%rip),%rax        # 0x7ffffeb39710 <__libc_pthread_functions+400>
0x00007ffffe790845 <__libc_start_main+261>: ror    $0x11,%rax
0x00007ffffe790849 <__libc_start_main+265>: xor    %fs:0x30,%rax
0x00007ffffe790852 <__libc_start_main+274>: callq  *%rax
0x00007ffffe790854 <__libc_start_main+276>: mov    0x3a8ea5(%rip),%rax        # 0x7ffffeb39700 <__libc_pthread_functions+384>
0x00007ffffe79085b <__libc_start_main+283>: ror    $0x11,%rax
0x00007ffffe79085f <__libc_start_main+287>: xor    %fs:0x30,%rax
0x00007ffffe790868 <__libc_start_main+296>: lock decl (%rax)
0x00007ffffe79086b <__libc_start_main+299>: sete   %dl
0x00007ffffe79086e <__libc_start_main+302>: test   %dl,%dl
0x00007ffffe790870 <__libc_start_main+304>: je     0x7ffffe790892 <__libc_start_main+338>
0x00007ffffe790872 <__libc_start_main+306>: xor    %eax,%eax
0x00007ffffe790874 <__libc_start_main+308>: jmp    0x7ffffe790830 <__libc_start_main+240>
0x00007ffffe790876 <__libc_start_main+310>: mov    0x8(%rsp),%rax
0x00007ffffe79087b <__libc_start_main+315>: lea    0x16bdb3(%rip),%rdi        # 0x7ffffe8fc635
0x00007ffffe790882 <__libc_start_main+322>: mov    (%rax),%rsi
0x00007ffffe790885 <__libc_start_main+325>: xor    %eax,%eax
0x00007ffffe790887 <__libc_start_main+327>: callq  *0x118(%rdx)
0x00007ffffe79088d <__libc_start_main+333>: jmpq   0x7ffffe7907a5 <__libc_start_main+101>
0x00007ffffe790892 <__libc_start_main+338>: mov    $0x3c,%edx
0x00007ffffe790897 <__libc_start_main+343>: nopw   0x0(%rax,%rax,1)
0x00007ffffe7908a0 <__libc_start_main+352>: xor    %edi,%edi
0x00007ffffe7908a2 <__libc_start_main+354>: mov    %edx,%eax
0x00007ffffe7908a4 <__libc_start_main+356>: syscall 
0x00007ffffe7908a6 <__libc_start_main+358>: jmp    0x7ffffe7908a0 <__libc_start_main+352>
0x00007ffffe7908a8 <__libc_start_main+360>: mov    0x8(%rsp),%rax
0x00007ffffe7908ad <__libc_start_main+365>: mov    0x3a35bc(%rip),%rdx        # 0x7ffffeb33e70
0x00007ffffe7908b4 <__libc_start_main+372>: lea    0x16bd94(%rip),%rdi        # 0x7ffffe8fc64f
0x00007ffffe7908bb <__libc_start_main+379>: mov    (%rax),%rsi
0x00007ffffe7908be <__libc_start_main+382>: xor    %eax,%eax
0x00007ffffe7908c0 <__libc_start_main+384>: callq  *0x118(%rdx)
0x00007ffffe7908c6 <__libc_start_main+390>: jmpq   0x7ffffe7907de <__libc_start_main+158>
0x00007ffffe7908cb <__libc_start_main+395>: mov    0x168(%rax),%r13
0x00007ffffe7908d2 <__libc_start_main+402>: mov    0x3a3527(%rip),%rax        # 0x7ffffeb33e00
0x00007ffffe7908d9 <__libc_start_main+409>: xor    %r12d,%r12d
0x00007ffffe7908dc <__libc_start_main+412>: mov    (%rax),%rbp
0x00007ffffe7908df <__libc_start_main+415>: mov    0x18(%r13),%rax
0x00007ffffe7908e3 <__libc_start_main+419>: test   %rax,%rax
0x00007ffffe7908e6 <__libc_start_main+422>: je     0x7ffffe7908f8 <__libc_start_main+440>
0x00007ffffe7908e8 <__libc_start_main+424>: mov    %r12d,%edi
0x00007ffffe7908eb <__libc_start_main+427>: add    $0x47,%rdi
0x00007ffffe7908ef <__libc_start_main+431>: shl    $0x4,%rdi
0x00007ffffe7908f3 <__libc_start_main+435>: add    %rbp,%rdi
0x00007ffffe7908f6 <__libc_start_main+438>: callq  *%rax
0x00007ffffe7908f8 <__libc_start_main+440>: add    $0x1,%r12d
0x00007ffffe7908fc <__libc_start_main+444>: mov    0x40(%r13),%r13
0x00007ffffe790900 <__libc_start_main+448>: cmp    %r12d,%r14d
0x00007ffffe790903 <__libc_start_main+451>: jne    0x7ffffe7908df <__libc_start_main+415>
0x00007ffffe790905 <__libc_start_main+453>: jmpq   0x7ffffe7907d6 <__libc_start_main+150>

然后最终的汇编代码__GI_exit(同样,其代码在程序的 objdump 中看不到):

0x00007ffffe7aa030 <__GI_exit+0>:  lea    0x38a5c1(%rip),%rsi        # 0x7ffffeb345f8 <__exit_funcs>
0x00007ffffe7aa037 <__GI_exit+7>:  sub    $0x8,%rsp
0x00007ffffe7aa03b <__GI_exit+11>: mov    $0x1,%edx
0x00007ffffe7aa040 <__GI_exit+16>: callq  0x7ffffe7a9f10 <__run_exit_handlers>

然后再多一些,依此类推,直到程序退出。


所以,我的问题是,如何在objdump动态链接的可执行文件中查看这个额外的汇编代码

我也尝试静态编译它(当我objdump编辑它时文件很大),并且动态链接可执行文件的动态链接代码和(以前的)动态链接代码中没有一对一的关系静态链接的可执行文件。

我假设正在进行一些优化以更好地扭曲静态链接可执行文件中的(以前的)动态链接代码。

但我的任务是objdump动态链接的可执行文件中的动态链接代码;而不是objdump静态链接的可执行文件中的(以前的)动态链接代码。

1个回答

动态链接库的重点不包括对象中的库,因此您要反汇编的部分不存在。您甚至可以用其他东西替换动态库(.so 对象),这可能会导致您的同一个主程序运行不同的代码。

因此,您首先需要确定您的程序引用了哪些动态对象。为此,您可以使用ldd. 例子:

$ cat x.c
int main(void) {
}
$ cc -o x x.c
$ ldd x
linux-vdso.so.1 (0x00007fff553e8000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff12b0fa000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff12b6ed000)
$

现在您可以objdump在此处引用文件。请注意,您不会在任何地方找到 vdso;它驻留在内核中,并为每个运行的程序自动提供。请参阅man 7 vdso以获取更多信息。

要查看源代码,只需 google 获取 glibc 源代码;您将在那里找到 C 库本身 ( libc.so.6) 和动态加载程序 ( ld-linux-x86-64)的源代码