[ objdump를 이용한 오브젝트 파일 역어셈블 ] |
||||||||||||||||
♧ 역어셈블 관련 옵션
▶ -d 옵션을 사용한 일반적인 역어셈블
▷ -d 옵션을 사용해 역어셈블 할 때는 통상 실행 코드가 있는 섹션(.text등)을 역어셈블 대상으로 삼는다.
▶-D 옵션을 사용해 모든 섹션을 대상으로 역어셈블 길어서 pass~
▷ 일반적인 역어셈블 결과는 다음과 같은 형식으로 출력. 주소 <심볼>: 주소: 코드의 바이트열 역어셈블 코드
▶ 『--no-show-raw-insn』 옵션을 사용하여 코드의 바이트 제거하여 출력.
▶ 『--prefix-address』 옵션을 사용하여 코드 주소를 심볼에서의 상대 주소로 표시
▷ 『--prefix-address』 옵션을 사용하면 디폴트로 코드의 바이트열은 출력되지 않음으로, 출력하고자 할 경우에는 『--show-raw-insn』 옵션을 함께 사용.
▶ 덤프할 때와 마찬가지로 -j 옵션을 사용하여 특정 섹션 지정 출력
▶ 덤프할 때와 마찬가지로 주소 범위 지정 출력 전 챕터(Hack #9)에서 했으므로 패스~
▶ -l옵션을 사용하여 가각의 코드에 대응하는 소스코드의 행에 관한 정보도 출력.
▶ -S옵션을 사용하여 -l 옵션의 행 번호에 대응하는 소스코드를 삽입하여 출력.
▷ -S옵션과 -l옵션 동시 사용 가능 ▷ -S옵션과 -l옵션은 오브젝트 파일에 디버그 정보가 포함되어 있어야 함. (gcc –g)
▷ 오브젝트 파일의 디버그 정보로는 소스코드 경로명과 행 번호만 포함되므로 해당 경로에 소스 파일이 존재해야 한다. 만약 소스 파일이 없다면 소스는 출력되지 않으며 다른 소스 파일이 존재한다면 엉뚱한 소스가 출력될 것이다. ▶ 소스 파일명을 변경후, -S옵션을 사용하였음에도 소스코드는 출력 되지 않음.
▷ 링크하기 전의 오브젝트 파일에서는 재배치되는 주소가 0임에 주의해야 한다. ▷ 위 예에서는 "Hello World!!!\n"을 가리키는 포인터는 12~15 사이의 4바이트에 채워져 있어야 하지만, 링크하기 전이므로 0인 채로 남아 있다.
▶ 링크 후 생성된 실행 파일에서는 해당하는 부분에 다음과 같이 주소가 채워져 있다.
|
'컴퓨터 서적 정리 > Binary Hacks' 카테고리의 다른 글
[Hack #12] nm - 오브젝트 파일에 포함된 심볼 확인 (0) | 2011.07.03 |
---|---|
[Hack #11] objcopy - 실행 파일에 데이터 삽입하기 (0) | 2011.07.03 |
[Hack #9] objdump - (1) 오브젝트 파일 덤프 (0) | 2011.07.03 |
[Hack #8] readelf - ELF 파일 정보 보기 (0) | 2011.07.02 |
[Hack #7] ldd - 공유 라이브러리 의존관계 확인 (0) | 2011.07.02 |