objdump

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

objdump to program analizujący pliki obiektowe (tzn. ze skompilowanym kodem).

Przykład[edytuj | edytuj kod]

Lista dynamicznie relokowanych symboli, które będą podłączane do odpowiedniej biblioteki dzielonej

$ objdump -R hello

hello:     file format elf32-i386

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE
080495b4 R_386_GLOB_DAT    __gmon_start__
080495ac R_386_JUMP_SLOT   __libc_start_main
080495b0 R_386_JUMP_SLOT   printf

Przykład 2[edytuj | edytuj kod]

Fragment wyjścia deasemblacji programu hello world (objdump -S ./hello). Odpowiednie fragmenty są oznaczone odpowiadającymi im częściami kodu (które są zachowane w pliku obiektowym dzięki opcji -g kompilatora gcc)

08048364 <main>:
#include <stdio.h>

int main()
{
 8048364:       55                      push   %ebp
 8048365:       89 e5                   mov    %esp,%ebp
 8048367:       83 ec 08                sub    $0x8,%esp
 804836a:       83 e4 f0                and    $0xfffffff0,%esp
 804836d:       b8 00 00 00 00          mov    $0x0,%eax
 8048372:       29 c4                   sub    %eax,%esp
    printf("Hello, world\n");
 8048374:       c7 04 24 a4 84 04 08    movl   $0x80484a4,(%esp,1)
 804837b:       e8 08 ff ff ff          call   8048288 <_init+0x38>
    return 0;
 8048380:       b8 00 00 00 00          mov    $0x0,%eax
}
 8048385:       c9                      leave
 8048386:       c3                      ret
 8048387:       90                      nop
 8048388:       90                      nop
 8048389:       90                      nop
 804838a:       90                      nop
 804838b:       90                      nop
 804838c:       90                      nop
 804838d:       90                      nop
 804838e:       90                      nop
 804838f:       90                      nop

08048390 <__libc_csu_init>:
 8048390:       55                      push   %ebp
 8048391:       89 e5                   mov    %esp,%ebp
 8048393:       57                      push   %edi
 8048394:       56                      push   %esi
 8048395:       31 f6                   xor    %esi,%esi
 8048397:       53                      push   %ebx
 8048398:       83 ec 0c                sub    $0xc,%esp
 804839b:       e8 a0 00 00 00          call   8048440 <__i686.get_pc_thunk.bx>
 80483a0:       81 c3 00 12 00 00       add    $0x1200,%ebx
 80483a6:       e8 a5 fe ff ff          call   8048250 <_init>
 80483ab:       8d 93 14 ff ff ff       lea    0xffffff14(%ebx),%edx
 80483b1:       8d 83 14 ff ff ff       lea    0xffffff14(%ebx),%eax
 80483b7:       29 c2                   sub    %eax,%edx
 80483b9:       c1 fa 02                sar    $0x2,%edx
 80483bc:       39 d6                   cmp    %edx,%esi
 80483be:       73 1c                   jae    80483dc <__libc_csu_init+0x4c>
 80483c0:       89 d7                   mov    %edx,%edi
 80483c2:       8d b4 26 00 00 00 00    lea    0x0(%esi,1),%esi
 80483c9:       8d bc 27 00 00 00 00    lea    0x0(%edi,1),%edi
 80483d0:       ff 94 b3 14 ff ff ff    call   *0xffffff14(%ebx,%esi,4)
 80483d7:       46                      inc    %esi
 80483d8:       39 fe                   cmp    %edi,%esi
 80483da:       72 f4                   jb     80483d0 <__libc_csu_init+0x40>
 80483dc:       83 c4 0c                add    $0xc,%esp
 80483df:       5b                      pop    %ebx
 80483e0:       5e                      pop    %esi
 80483e1:       5f                      pop    %edi
 80483e2:       5d                      pop    %ebp
 80483e3:       c3                      ret
 80483e4:       8d b6 00 00 00 00       lea    0x0(%esi),%esi
 80483ea:       8d bf 00 00 00 00       lea    0x0(%edi),%edi