개인 노트이므로 반말이 있어도 양해부탁드립니다.
[*] objdump -d test
주소 <심볼> :
주소: OPCODE 디어셈블 코드
이런 형식으로 출력을 해줍니다. 이 때 OPCODE가 불필요하다면 --no-show-raw-insn 옵션을 사용하여 OPCODE을 출력안하게 만들 수 있습니다.
[*] objdump -d --no-show-raw-insn test
위와 같은 -d 옵션으로 디어셈블할 때는 실행 코드가 있는 섹션(.text 등)을 디어셈블리의 대상으로 합니다. 하지만 모든 섹션을 대상으로 할 경우에는 -D 옵션(--disassemble-all 옵션)을 사용합니다.
[*] objdump -d -j .init test
덤프와 마찬가지로 디어셈블도 주소를 지정하여 디어셈블할수도 있습니다. 하는 방법은 덤프할 때와 마찬가지로 --start-address, --stop-address 옵션을 사용합니다.
[*] objdump -d test
출력된 결과물을 파일로 저장하고싶다면 " > " 을 이용하여 파일로 출력할 수 있습니다.
[*] objdump -d --start-address=0x80483e4 --stop-address=0x80483ff test > test.txt
[*] cat test.txt
디버그 정보를 포함하고 있는 오브젝트파일을 생성하는 하려면 컴파일 할 때 -g 옵션을 사용합니다.
[*] gcc -g -o degtest file1.c
[*] objdump -d -l degtest
[*] objdump -d -S degtest
objdump를 이용한 오브젝트 파일 disassemble
objdump는 ELF 바이너리인 경우 디어셈블을 할 수 있는데, 디어셈블을 할 때는 -d 옵션(--disassemble 옵션)을 사용합니다.[*] objdump -d test
[#] 너무 길어서 이번에도 많은 부분을 생략.....!
출력 형식주소 <심볼> :
주소: OPCODE 디어셈블 코드
이런 형식으로 출력을 해줍니다. 이 때 OPCODE가 불필요하다면 --no-show-raw-insn 옵션을 사용하여 OPCODE을 출력안하게 만들 수 있습니다.
[*] objdump -d --no-show-raw-insn test
[#] 너무 길어서 이번에도 많은 부분을 생략.....!
위와 같은 -d 옵션으로 디어셈블할 때는 실행 코드가 있는 섹션(.text 등)을 디어셈블리의 대상으로 합니다. 하지만 모든 섹션을 대상으로 할 경우에는 -D 옵션(--disassemble-all 옵션)을 사용합니다.
objdump로 특정 섹션, 주소 범위만 디어셈블하기
특정 섹션을 지정해서 디어셈블을 할 수도 있습니다. 섹션 지정은 덤프할 때와 마찬가지로 -j 옵션( --section 옵션)을 사용합니다.[*] objdump -d -j .init test
[#] .init섹션만을 디어셈블 했다.
덤프와 마찬가지로 디어셈블도 주소를 지정하여 디어셈블할수도 있습니다. 하는 방법은 덤프할 때와 마찬가지로 --start-address, --stop-address 옵션을 사용합니다.
[*] objdump -d test
[#]일단 주소를 알아낼려면 디어셈블을 하고, main의 주소를 기억해두고
[#] 시작주소와 끝 주소를 지정하여 디어셈블합니다.
출력된 결과물을 파일로 저장하고싶다면 " > " 을 이용하여 파일로 출력할 수 있습니다.
[*] objdump -d --start-address=0x80483e4 --stop-address=0x80483ff test > test.txt
[*] cat test.txt
[#] 파일로 저장된 것을 확인할 수 있습니다.
소스 파일과 함께 출력하기
디버그 정보를 포함하고 있는 오브젝트 파일의 경우 -l 옵션(--line-numbers 옵션)을 사용하면, 각각의 코드에 대응하는 소스코드의 행에 관한 정보도 출력됩니다. 디버그 정보가 포함되어 있지 않은 경우에는 -l 옵션을 지정해도 의미가 없습니다.디버그 정보를 포함하고 있는 오브젝트파일을 생성하는 하려면 컴파일 할 때 -g 옵션을 사용합니다.
[*] gcc -g -o degtest file1.c
[*] objdump -d -l degtest
[#] 많은 것을 출력해주지만 main부분만을 스크린샷을 찍었다.
만약 소스 파일이 존재하고 -S 옵션(--source 옵션)을 추가하면 -l 옵션의 행 번호에 해당하는 소스코드가 그 위치에 삽입되어 출력됩니다. (훨씬 보기 편하겠죠)[*] objdump -d -S degtest
[#] main함수부분이 이쁘게 뭐가있는지 출력되는 것을 확인할 수 있다.
댓글
댓글 쓰기