Linux에서 ELF 파일의 데이터 섹션의 내용을 검사하려면 어떻게해야합니까?
-
18-09-2019 - |
문제
나는 사용하고있다 objdump
Linux Elf Binaries의 어셈블리 코드를 살펴 보겠습니다.
때로는에 저장된 점프 테이블을 통해 간접적 인 점프가 있습니다. rodata
(읽기 전용 데이터) 섹션.
얻는 방법 objdump
아니면이 데이터 섹션의 내용을 보여주는 다른 도구가 있습니까?
프로그램을 실행하고 디버거에서 관련 주소를 검사 할 수는 있지만 대화식으로 수행해야하므로 그렇게하고 싶지 않습니다.
이상적인 답변은 내용을 보여줄뿐만 아니라 디스플레이 형식을 제어 할 수있는 도구를 식별합니다. od
하다.
해결책
objdump -s -j .rodata exefile
내용물의 나란히 16 진수/인쇄 가능한 ASCII 덤프를 제공합니다. rodata
섹션과 같은 섹션 :
Contents of section .rodata:
0000 67452301 efcdab89 67452301 efcdab89 gE#.....gE#.....
0010 64636261 68676665 64636261 68676665 dcbahgfedcbahgfe
서식을 제어 할 것이없는 것처럼 보이지는 않지만 시작입니다. 당신은 항상 16 진수를 풀고 OD에 먹이를 줄 수 있습니다. :)
다른 팁
readelf -x .rodata hello_world.o
제공 :
Hex dump of section '.rodata':
0x00000000 48656c6c 6f20776f 726c6421 0a Hello world!.
당신은 선호해야합니다 readelf
가능하면 objdump
단순히 일부 섹션을 표시하지 않습니다 .symtab
: OBJDUMP가 .BSS, .shstratab, .symtab 및 .strtab 섹션을 표시하지 않는 이유는 무엇입니까?
언급 된 기술로 원시 바이트를 추출 할 수도 있습니다. ELF 섹션의 내용 만 추출하는 방법 그리고 언급했듯이 YSDX에 의해.
당신은 다음과 같이 RAW (hexdump-ed) 엘프 섹션을 얻을 수 있습니다.
# To a file:
objcopy file /dev/null --dump-section .text=text.data
# To stdout:
objcopy file /dev/null --dump-section .text=/dev/stdout | cat
여기에서 사용하고 있습니다 | cat
stdout을 파이프로 강요하기 위해. /dev/stdout
stdout이 파일 인 경우 예기치 않게 작동 할 수 있습니다. .text=-
stdout이 아니라 -
파일.
하지만 objcopy와 objdump에는 약간의 결함이 있습니다 (다른 실행 형식을 추상화하는 BFD를 기반으로하기 때문에).
업데이트: 나는 a 도구 BFD에 의존하지 않는이 작업을 수행합니다.