왜 사용자 함수는 되고 공유라이브러리? 함수 분기에 대한 disassemble은 안되는지...?
0x000104f0 <+24>: ldr r3, [pc, #92] ; 0x10554 <getpath+124>
0x000104f4 <+28>: ldr r3, [r3]
0x000104f8 <+32>: mov r0, r3
0x000104fc <+36>: bl 0x10374
막상 s를 입력하여 0x10374로 분기하면 그 다음 명령어들은 건너뛰고 printf함수로 이동되었다.
gef> x/10i 0x20718
0x20718: andeq r0, r0, r0
0x2071c: andeq r0, r0, r0 gef> x/5i 0x10374
0x10374: add r12, pc, #0, 12
gef> disassemble 0x10374
No function contains specified address.
s는 바로 넘어가서 확인이 불가능한데, si로 실행하면 명령어를 입력하니까 보이는 그대로 실행하여 따라갈 수 있다.
확인 결과 라이브러리에 존재하는 함수(printf)를 사용하기 위해 조금 복잡한 처리가 존재하였다.
s는 이 과정을 건너뛰고 바로 printf문으로 이동해주니 디버깅 하는 입장에서 뜬금포일 수 밖에 없다.
bl 0x10374는 이처럼 컴파일러가 printf 라이브러리의 주소를 구하기 위한 분기 주소라고 보면 될 것 같다.
* 디버깅 과정에서 내린 추측일뿐, 잘못된 정보일 수 있으니 잘 아시는분은 댓글로 부탁드립니다.
'Debugger > GDB' 카테고리의 다른 글
[GEF] gef missing (python3 에러) (0) | 2020.01.05 |
---|---|
[GEF] Pattern 생성과 활용 (0) | 2020.01.04 |
[GDB] GDB의 인자값으로 파이썬 출력 값을 사용하기 (0) | 2019.12.29 |
[GCC] 컴파일시 보호기법 해재 플래그 (0) | 2019.12.28 |
[GDB] 사용자 input으로 hex값 입력 값하기 (0) | 2019.12.28 |