디스어셈블리에서 레이블 정보는 어디에 있나요???
글쓴이: eternalklaus / 작성시간: 수, 2018/06/06 - 12:16오전
아래 코드는 디스어셈블리의 일부입니다.
(바이너리를 디스어셈블해서 뽑아왔습니다)
00000000004004d6 <main>: 4004d6: 50 push %rax 4004d7: 58 pop %rax 4004d8: eb 00 jmp 4004da <LABEL1> 00000000004004da <LABEL1>: 4004da: 53 push %rbx 00000000004004db <LABEL2>: 4004db: 48 89 c3 mov %rax,%rbx 4004de: 66 90 xchg %ax,%ax
그런데 궁금한 점이 있습니다.
바이너리에는 기계어 코드들이 들어있지 않습니까?
위의 코드를 예를들자면, 50 58 eb 00 53...[생략] 이런 코드들이 들어있겠죠.
그런데 바이너리로부터 뽑은 위 디스어셈블리를 보면 과 같은 레이블정보도 복원되어 있습니다.
오직 기계어뿐인 삭막한 바이너리에서...
이런 레이블정보는 어디에 있길래 objdump가 복원을 시켜준걸까요?
Forums:
아마 symbol table에 있을 겁니다.
아마 symbol table에 있을 겁니다.
objdump -t -T xxx.o
로 확인해보세요.C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
objdump는 심볼테이블에 있는 심볼을 가져다가
objdump는 심볼테이블에 있는 심볼을 가져다가 붙여주는 것이었군요~
많은 도움이 되었습니다. 감사합니다
> 오직 기계어뿐인 삭막한 바이너리에서...
> 오직 기계어뿐인 삭막한 바이너리에서...
>
objcopy -O binary 를 거치면 그러한 바이너리를 얻을 수 있습니다.
이러한 삭막한 바이너리를 디스어셈블하려면, 코드와 데이타를 구별할 방법이 없기 때문에 objdump -D 를 이용해야 합니다.
댓글 달기