본문 바로가기

Programming/Linux_Kernel

objdump - 실행파일에서 asm code 확인


objdump 의 여러 기능이 있지만 다음과 같은 기능이 있습니다.
바로 실행 파일에서 sam code 를 바로 확인해 볼 수 있는거지요.
옵션을 보면 source 와 매칭을 시킬 수도 있을것 같은데 좀 더 익숙해 지면 업데이트 하겠습니다.

>objdump -d a.out | grep -A10 '<s3c_gpiolib_add>'
08052cbc <s3c_gpiolib_add>:
 8052cbc:       0d c0 a0 e1 30          or     $0x30e1a0c0,%eax
 8052cc1:       d8 2d e9 04 b0 4c       fsubrs 0x4cb004e9
 8052cc7:       e2 38                   loop   8052d01 <s3c_gpiolib_add+0x45>
 8052cc9:       30 90 e5 00 40 a0       xor    %dl,0xa04000e5(%eax)
 8052ccf:       e1 00                   loope  8052cd1 <s3c_gpiolib_add+0x15>
 8052cd1:       00 53 e3                add    %dl,0xffffffe3(%ebx)
 8052cd4:       c4 00                   les    (%eax),%eax
 8052cd6:       9f                      lahf  
 8052cd7:       05 82 10 a0 03          add    $0x3a01082,%eax
 8052cdc:       04 00                   add    $0x0,%al

만약 arm library 를 분석하신다면 arm compiler 에 포함되어 있는
arm-linux-objdump
를 사용하시면 됩니다.

예로 start address 와 end address 를 지정하여 분석도 가능합니다.


> arm-linux-objdump -d libexpat.so.1.5.0 --start-address=0x5830 --stop-address=0x5900

libexpat.so.1.5.0:     file format elf32-littlearm

Disassembly of section .init:
Disassembly of section .plt:
Disassembly of section .text:

00005830 <parserCreate+0x7c>:
    5830:       e1a05000        mov     r5, r0
    5834:       e5840188        str     r0, [r4, #392]
    5838:       0a00007f        beq     5a3c <parserCreate+0x288>
...



objdump 사용법이 잘 나와 있는 사이트

http://www.thegeekstuff.com/2012/09/objdump-examples/