ARM 공부를 함에 있어서 나름 외우기 쉽게 이해한 내용만 정리해 보는 장이다.
•R15 = PC?!
•R14 = Link Register?
-> EBP ?!
•R13 = SP?!
•R12 = ?! – 그냥 막쓰는 기분..
•R0 = 값 저장 때 인자 값 1 2 3 으로 쓰이는 기분..
•
•나만의 암기 법!
•[buffer ] ^ [EBP] [RET]
•[ R8~R12 ] ^[R14] [R15] |
Load 와 Store 개념은 포인터 개념도 있다.
그리고 지역변수를 저장하거나 문자열을 저장할 일이 있으면 반드시 이작업을 거치는 것 같다.
•포인터와 비슷한 개념!!
•[Rn]=*RN [] 는 주소값! *는 가르키는 곳!
•
•LDR : Load Direct Register(주소 값을 담음)
•Ex)LDR Rd,[Rn,offset] ; Rd:=*(Rn+offset)
•
•LDR Rd,[Rn,offset]! ; Rn:=Rn+offset,Rd=*(Rn)
•는 대상값을 업데이트!
•
•STR Rd,[Rn,offset] ; *(Rn_offset) = Rd (적재!)
•LDRB (LDR 의 바이트코드)
•STRB (STR의 바이트 코드) |
연습해 봅시다.
#include<stdio.h>
Int main(){ Printf(“aaaa”); } |
#include<stdio.h>
Int main(){ char buff[100]; scanf(“%s”,buff); } |
각 어샘블리어는 다음과 같다
INTEL CPU에 비교하면 프롤로그 부분이다. |
printf 하는 부분에 r0 값에는 aaaa 라는 값이 들어가 있음을 확인 할 수 있다. 이 텍스트 값역시 적재 되는것이다. 이 LDR 부분은 텍스트를 저장해놓거나 변수를 미리 선언해 놓았을때 항상 생긴다. 이러한 부분이 없다면 생기지 않는다. 예시코드는 아래에 설명 하겠다. |
이부분에는 LDR 부분이 없고 r0 r1 r2 부분에 순차적으로 1 2 3 을 넣고 branch 로 test를 분기한다. 그러면 순서대로 들어가는 것이다. |
간단한 내용인데, ARM 환경을 접할 기회가 없다보니 비교만으로 분석을 하고 있게 된다. 좀 좋은 서적이 있으면 좋을거같은데.. 너무 전문서적말고 분석을 위한 서적이 있었음 좋겠다.
'ARM & 펌웨어 분석' 카테고리의 다른 글
펌웨어 분석 1단계, bin 파일 까기. (Firmware analysis method Unpack Bin file ) (0) | 2012.10.31 |
---|---|
[ARM 크로스 컴파일 환경 구축하기 ] (1) | 2012.10.23 |
[ 10/15 ARM 분석 연습 ] ARM 분석연습. (0) | 2012.10.15 |
[ 10/11 ARM9 일기] 어셈블리 디버깅 연습 (1) | 2012.10.11 |
[ ARM Assambly ] 공부 시작! (0) | 2012.09.24 |