-d 옵션은 disassembly 결과 출력
[level20@ftz level20]$ objdump -d attackme
attackme: file format elf32-i386
Disassembly of section .init:
080482a0 <.init>:
80482a0: 55 push %ebp
....
80482b6: c3 ret
Disassembly of section .plt:
080482b8 <.plt>:
80482b8: ff 35 a4 95 04 08 pushl 0x80495a4
...
8048303: e9 b0 ff ff ff jmp 0x80482b8
Disassembly of section .text:
08048308 <.text>:
8048308: 31 ed xor %ebp,%ebp
...
804848e: c9 leave
804848f: c3 ret
Disassembly of section .fini:
08048490 <.fini>:
8048490: 55 push %ebp
...
80484aa: c3 ret
-f 옵션은 파일의 헤더 정보 출력
[level20@ftz level20]$ objdump -f attackme
attackme: file format elf32-i386
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08048308
-p 옵션은 비공식 헤더 정보를 출력
[level20@ftz level20]$ objdump -p attackme
attackme: file format elf32-i386
Program Header:
PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2
filesz 0x000000c0 memsz 0x000000c0 flags r-x
INTERP off 0x000000f4 vaddr 0x080480f4 paddr 0x080480f4 align 2**0
filesz 0x00000013 memsz 0x00000013 flags r--
LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
filesz 0x000004b8 memsz 0x000004b8 flags r-x
LOAD off 0x000004b8 vaddr 0x080494b8 paddr 0x080494b8 align 2**12
filesz 0x00000108 memsz 0x00000110 flags rw-
DYNAMIC off 0x000004c4 vaddr 0x080494c4 paddr 0x080494c4 align 2**2
filesz 0x000000c8 memsz 0x000000c8 flags rw-
NOTE off 0x00000108 vaddr 0x08048108 paddr 0x08048108 align 2**2
filesz 0x00000020 memsz 0x00000020 flags r--
Dynamic Section:
NEEDED libc.so.6
INIT 0x80482a0
FINI 0x8048490
HASH 0x8048128
STRTAB 0x80481dc
SYMTAB 0x804815c
STRSZ 0x61
SYMENT 0x10
DEBUG 0x0
PLTGOT 0x80495a0
PLTRELSZ 0x20
PLTREL 0x11
JMPREL 0x8048280
REL 0x8048270
RELSZ 0x10
RELENT 0x8
VERNEED 0x8048250
VERNEEDNUM 0x1
VERSYM 0x804823e
Version References:
required from libc.so.6:
0x0d696910 0x00 02 GLIBC_2.0
이 외에도 s는 파일의 모든 섹션 정보 출력
t는 심볼 테이블 출력
r은 재배치 정보
j는 특정 섹션만 disassemble
x는 모든 헤더 정보 출력
h는 섹션 헤더 정보 출력. 이를 통해 섹션의 이름 타닙 주소 크기 등을 확인 가능.
(gdb) disas main
Dump of assembler code for function main:
0x080483b8 <main+0>: push ebp # 현재의 베이스 포인터를 스택에 저장
0x080483b9 <main+1>: mov ebp,esp # 스택 포인터를 베이스 포인터로 설정하여 새로운 스택 프레임을 만든다.
0x080483bb <main+3>: sub esp,0x58 # 88바이트
0x080483be <main+6>: and esp,0xfffffff0 # 스택을 16바이트로 정렬. 이를 통해 cpu의 메모리 접근을 최적화 및 성능 향상
0x080483c1 <main+9>: mov eax,0x0
0x080483c6 <main+14>: sub esp,eax
0x080483c8 <main+16>: sub esp,0x8 # 8바이트...
0x080483cb <main+19>: push 0xc1d # 3101
0x080483d0 <main+24>: push 0xc1d # 3101
0x080483d5 <main+29>: call 0x80482f8 <setreuid> # 함수호출
0x080483da <main+34>: add esp,0x10 # 16 바이트
0x080483dd <main+37>: sub esp,0x4
0x080483e0 <main+40>: push ds:0x80495c0 # 포맷 문자열의 주소로 보임...
0x080483e6 <main+46>: push 0x4f # 79
0x080483e8 <main+48>: lea eax,[ebp-88] # 88이 bleh의 주소로 보임
0x080483eb <main+51>: push eax
0x080483ec <main+52>: call 0x80482c8 <fgets>
0x080483f1 <main+57>: add esp,0x10
0x080483f4 <main+60>: sub esp,0xc
0x080483f7 <main+63>: lea eax,[ebp-88]
0x080483fa <main+66>: push eax
0x080483fb <main+67>: call 0x80482e8 <printf>
---Type <return> to continue, or q <return> to quit---
0x08048400 <main+72>: add esp,0x10
0x08048403 <main+75>: leave
0x08048404 <main+76>: ret
0x08048405 <main+77>: nop
0x08048406 <main+78>: nop
0x08048407 <main+79>: nop
End of assembler dump.