Linux에서 ELF 파일의 데이터 섹션의 내용을 검사하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1685483

문제

나는 사용하고있다 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에 의존하지 않는이 작업을 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top