[ 출처 : http://clarus.tistory.com/198 ]
본 게시물은 위에 남긴 티스토리의 내용을 개인이 공부하기 편하게 요약 정리 해 놓은 판입니다.
위에 티스토리 글이 정리가 너무나 잘되어 있어서 공부하실 때 위에 것을 참조 하시는게 좋습니다.
본 내용은 어거지성 암기법도 들어가고 필자의 추측도 들어가 있습니다.
개인 공부용이니 너무 욕하지 말아주세요~
ARM Register Structure
1. Branch : 가지, 지사,분기 2. DataProcessing :데이터의 처리 (MOV,MVN,CMP,CMN,TST,TEQ,ADD,SUB…) 3. Load/Store : 적재, 저장 (LDR,ADR) 4. SWAP : 교환 5. PSR(MRS,MSR) : 6. SWI : swich 의약자. 7. DCD directives 8. EXPORT, IMPORT : 가져오기 내보내기 |
위에 써진 명령어들이 큰 주제들이다. 이것들을 하나씩 봐보도록 하겠다.
[branch] : 지사, 분기 (여기서는 분기란 의미로 사용 된다고 보면 편하다.) 약어 : B(Branch) , L(Labeling) , X(eXchange) B _printf ; _printf 로 점프하라 BL _printf ; R14 에 돌아올 주소를 Labeling 해놓고 이동한다. BX _printf ; 현재 모드를 exchange 한다. (X : eXchange) BLX _printf ; 두개의 짬뽕
|
[Data Processing] : 데이터 처리 약어 : MOV(Move) , CMP(Compare) , MVN (MoVe NULL),SUB(SUBtraction), RSB(Reverse SuBstraction), ADD(Addition), BIC (Between ~~~) •[명령어 , 대상 레지스터 , 장난레지스터, 레지스터 or값]
•MOV R1,R2 ; R1:=R2
•MVN R1,#0 ;
R1:=0xFFFFFFFF
•ADD R0,R1,R2 ;
R0:=R1+R2
•SUB R0,R1,#5 ; R0:=R1-5
•RSB R0,R2,R3 ; R0=R3-R2 (Reverse Sub)
•AND R0,R2,R3 ;
R0:=R2&R3
•BIC R0,R2,R3
; R0:=R2 & ~R3 (R3이 1이 들어있는 filed만 0)
•CMP R0,R2
; R0>R2 면
다음조건에서 큰경우, 아니면 작은경우
|
[Load / Store]
약어 : LDR(LoaD Register), STR(STORE Register), B(Byte) 포인터와 비슷한 개념!! : [Rn]=*RN [] 는 주소값! *는 가르키는 곳! •LDR : LoaD 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의 바이트 코드) |
[SWAP] 약어 : SWP (SWAP) •일반 메모리 영역과 register 를 바꿔 치기하는데 사용됨!
•Ex)SWP R0,R1,[R2] :
R0 = *(R2),*(R2)=R1
[R2]를 R0에 저장해 두고, [R2]에 R1을 넣음. 한데 R0를 R1에 넣진 않음..(why?!) |
[PSR] 약어 : CPSR(Copy ProceSs Register), SPSR •CPSR 과 SPSR 두 개와 일반 Register사이의 값을 서로 복사 할 수 있는 명령어들
•MRS R5,CPSR : R5 : =CPSR
•MSR CPSR,R5 : CPSR : = R5
•S = PSR 을 의미하고 R는 Register를 의미
•Move Register PSR 이런 식으로 해석
•CPSR_c(control)
•CPSR_f(flag)
•CPSR_cf(control,flag) 로 준비되어 있음. |
[SWI] : SoftWare Interrupt •Soft Ware Interrupt 명령은 Software가 일부러 Exception을 발생시킬수 있는 유일한 명령어. •보통 user mode 에서 다른 모드로 전환할때 사용. 가장 큰 용례로 kernel 은 SVC mode 일반 application은 user Mode 일때 일반 application이 kernel에게 뭔가 부탁할때 쓰임
•EX) SWI 0x11 : Software
Interrupt Handler 에서 0x11 번재 case를 호출함. |
[DCD] : Data Calloc Dimention •DCD 를 만나면 Data Calloc DIMENSION ~ 메모리를 배열처럼 할당해 주는 기분이다.
•(여러 개를 늘어놓으면 여러 개의 ARRAY처럼 쓸 수 있다.)
•DCB 1Byte 짜리 Data
•DCW 2Byte 짜리 Data
•DCD 4Byte 짜리 Data (& 값처럼 값을 미리 넣어둘 곳을 지정 가능)
•DCQ 8Byte 짜리 Data (static으로 선언해주는 듯이 사용가능)
•DCD는 &와 같다. 메모리 영역에 내가 원하는 값을 넣어 놓도록
메모리를 확보해 놔! |
1차적으로 이해가 제대로 된부분은 여기까지라 여기까지만 정리해보고..담은 분석부터 차근차근!!
기대기대~
'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 assembly 공부 ] 1. 기본 내용 (0) | 2012.10.03 |