Programing

Linux에서 ELF 파일의 데이터 섹션 내용을 어떻게 검사 할 수 있습니까?

crosscheck 2020. 11. 18. 08:33
반응형

Linux에서 ELF 파일의 데이터 섹션 내용을 어떻게 검사 할 수 있습니까?


나는 objdumpLinux ELF 바이너리에서 어셈블리 코드를보기 위해 사용해 왔습니다 .

때때로 rodata(읽기 전용 데이터) 섹션에 저장된 점프 테이블을 통한 간접 점프가 있습니다.

objdump이 데이터 섹션의 내용을 표시 하기 위해 또는 다른 도구 를 얻는 방법은 무엇입니까?

프로그램을 실행하고 디버거에서 관련 주소를 조사 할 수는 있지만 대화 형으로 수행해야하므로 그렇게하고 싶지 않습니다.

이상적인 대답은 콘텐츠를 표시 할뿐만 아니라 표시 형식을 제어 할 수있는 도구를 식별하는 것 od입니다.


objdump -s -j .rodata exefile

다음 rodata과 같이 섹션 의 내용에 대한 나란히 16 진 / 인쇄 가능한 ASCII 덤프를 제공합니다 .

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가 .bss, .shstratab, .symtab 및 .strtab 섹션을 표시하지 않는 이유는 무엇입니까?objdump.symtab

다음에서 언급 한 기술을 사용하여 원시 바이트를 추출 할 수도 있습니다 . ELF 섹션의 내용 만 추출하는 방법ysdx에서 언급 한대로 .


다음을 사용하여 RAW (hexdump-ed가 아닌) ELF 섹션을 가져올 수 있습니다.

# 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/stdoutstdout이 파일 인 경우 예기치 않게 작동 할 수 있습니다. .text=-stdout으로 보내지 않고 -파일로 보냅니다 .

그러나 objcopy 및 objdump에는 몇 가지 결함이 있습니다 (다른 실행 파일 형식을 추상화하는 BFD를 기반으로하기 때문).

업데이트 : BFD에 의존하지 않는 도구작성했습니다 .

참고 URL : https://stackoverflow.com/questions/1685483/how-can-i-examine-contents-of-a-data-section-of-an-elf-file-on-linux

반응형