1. arm-eabi-addr2line
address to file name and line number로 바꾸기위한 툴이다. 기본적으로 arm-eabi-[version]의 arm 컴파일러로 컴파일한 바이너리파일을 타겟으로 사용하며 stack_chk_fail과 같이 stack guard와 다른 여러 error가 발생했을 때 error발생의 원인이 되는 주소 값이 정확히 어떤 file의 어떤 부분에 의해서 발생하는지 알 수 있게 도와주는 도구이다.
1) 옵션
ex) addr2line -e *.elf 0x2555
.elf로 끝나는 바이너리 파일의 0x2555주소값에 있는 file의 line을 출력해준다.
2. arm-eabi-objdump
objdump는 바이너리 파일을 역어셈블리어 출력해주는 리버싱 역할을 진행한다. 이 때 특정주소에 대한 디버그 값들 예를들어 어떤스택에 들어가있는지 그리고 해당 주소로 어떤 어셈블리어 명령들이 수행되고있는지를 체크하기 위함으로 사용가능하다. 쉽게 정적 리버싱 툴이다.
1) 옵션
-d : disassembly로 기본적으로 디어셈블을 해준다. .text section과 같이 실행 코드가 들어있는 section에 대해서만 디어셈블을 시도한다. <가장많이사용>
-D : 모든 section에 대해서 디어셈블을 진행한다.
-S : 어셈블리어 수준이 아닌 코드수준으로 디어셈블을진행해줌
ex) objdump -d *.elf | grep "0x2555"
0ex2555 위치에 대해서 디어셈블된 어셈블리어 명령문 코드를 확인할 수 있다. 굳이 address가 아니여도 funtion name등으로도 function entry이런식으로 출력되기때문에 grep으로 필터링이 가능하다.
- ref
https://manpages.debian.org/testing/binutils-arm-none-eabi/arm-none-eabi-addr2line.1.en.html
'OS > Linux' 카테고리의 다른 글
[Linux Kernel] Kernel 분석(v5.14.16) - Page Table (2) (0) | 2021.12.12 |
---|---|
[Linux Kernel] Kernel 분석(v5.14.16) - Page Table (1) (0) | 2021.12.06 |
[Linux Kernel] Kernel 분석(v5.14.16) - Device tree (0) | 2021.11.25 |
[Linux Kernel] Kernel 분석(v5.14.16) - entry.S (0) | 2021.11.14 |
[Linux Kernel] Kernel 분석(v5.14.16) - head.S (0) | 2021.11.07 |