Linux에서 ELF 파일의 데이터 섹션 내용을 어떻게 검사 할 수 있습니까?
나는 objdump
Linux 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/stdout
stdout이 파일 인 경우 예기치 않게 작동 할 수 있습니다. .text=-
stdout으로 보내지 않고 -
파일로 보냅니다 .
그러나 objcopy 및 objdump에는 몇 가지 결함이 있습니다 (다른 실행 파일 형식을 추상화하는 BFD를 기반으로하기 때문).
업데이트 : BFD에 의존하지 않는 도구 를 작성했습니다 .
'Programing' 카테고리의 다른 글
Ruby on Rails 내에서 안전한 REST API를 구축하기위한 제안을 찾고 있습니다. (0) | 2020.11.18 |
---|---|
VB.NET에서 문자열을 결합하기위한 +와 &의 차이점 (0) | 2020.11.18 |
문자열 수식을 "실제"수식으로 바꾸는 방법 (0) | 2020.11.18 |
이미지와 텍스트 모두 가능한 UIButton? (0) | 2020.11.17 |
Rails에서 request.remote_ip와 request.ip의 차이점은 무엇입니까? (0) | 2020.11.17 |