objdump는 C언어를 컴파일한 실행파일을 어셈블리어로 보여줄 수 있게하는 GNU 바이너리 유틸리티 입니다.
간단한 예제 코드를 만들어서 실행해보았습니다.
#include <stdio.h>
int main() {
printf("안녕하세요.");
return 0;
}
macos를 사용할때 objdump가 없다면 xcode를 깔아야합니다.
저는 CLion
을 사용하였는데 저랑 같은 CLion이라면 cmake-build-debug/CMakeFiles/프로젝트명.dir
안에 .out
, .o
파일이 있으니 해당 디렉토리로 이동하면 됩니다.
objdump -D a.out | grep -A20 main.:
0000000100003ee8 <_main>:
100003ee8: ff 03 01 d1 sub sp, sp, #64
100003eec: fd 7b 03 a9 stp x29, x30, [sp, #48]
100003ef0: fd c3 00 91 add x29, sp, #48
100003ef4: bf c3 1f b8 stur wzr, [x29, #-4]
100003ef8: a0 83 1f b8 stur w0, [x29, #-8]
100003efc: a1 03 1f f8 stur x1, [x29, #-16]
100003f00: a9 83 5f b8 ldur w9, [x29, #-8]
100003f04: e8 03 09 aa mov x8, x9
100003f08: e9 03 00 91 mov x9, sp
100003f0c: 28 01 00 f9 str x8, [x9]
100003f10: 00 00 00 90 adrp x0, 0x100003000 <_main+0x28>
100003f14: 00 50 3e 91 add x0, x0, #3988
100003f18: 1c 00 00 94 bl 0x100003f88 <_printf+0x100003f88>
100003f1c: bf c3 1e b8 stur wzr, [x29, #-20]
100003f20: 01 00 00 14 b 0x100003f24 <_main+0x3c>
100003f24: a8 c3 5e b8 ldur w8, [x29, #-20]
100003f28: a9 83 5f b8 ldur w9, [x29, #-8]
100003f2c: 08 01 09 6b subs w8, w8, w9
100003f30: 4a 02 00 54 b.ge 0x100003f78 <_main+0x90>
100003f34: 01 00 00 14 b 0x100003f38 <_main+0x50>
아래의 명령어를 입력하면 결과가 출력되는 것을 볼 수 있었습니다.
참고로 -A20
는 20줄을 의미하므로 숫자부분을 변경하여 원하는 출력 갯수를 지정할 수 있습니다.
100003ee8
부분은 주소를 의미합니다.