ARM에서 버퍼 오퍼플로우가 어떻게 동작하는지 알아보기 위해 라즈베리파이에서 테스트 해보았습니다.
아래 소스를 gcc 로 옵션 없이 컴파일 합니다.
두 개의 함수를 gdb로 디스어셈블링 하였습니다.
scanf 후의 스택입니다. 0x8440에 Breakpoint 가 걸렸습니다.
sp+0xc 지점이 복귀 주소입니다. ARM은 x86과는 다르게 retn 명령어가 없고 pop을 하면서 pc 레지스터에 바로 주소를 씁니다.
pc는 eip와 같다고 보시면 됩니다.
그러면 이번에는 AAAABBBBCCCCDDDD 를 입력합니다.
덮어 씌워졌습니다.
0x8440 실행 후의 스택입니다. 0x43434343은 r11에, 0x44444444는 pc에 들어갑니다.
crash 직후의 레지스터입니다.
'Android Linux' 카테고리의 다른 글
kdress x86 빌드 (0) | 2017.10.17 |
---|---|
Visual Studio에서 ARM-Android 라이브러리를 쉽게 빌드해보자 (0) | 2014.10.17 |
폰에 SSH 서버를 설치하여 보다 편리한 환경 구축하기 (0) | 2014.06.17 |
분기(Branch)와 코드 패칭 (Code Patching) (0) | 2014.06.02 |
gdb를 이용한 hello world 분석 (0) | 2014.05.30 |