티스토리 뷰

Reversing

IA32 Basics

xxvd 2017. 12. 20. 23:08

Cpu 레지스터란? 

      레지스터(Register)란  Cpu 내부에 존재하는 다목적 저장공간이다. 다른 저장공간(SSD,RAM,HDD) 등과는 다르게 레지스터는

      Cpu 내부에 위치해있어 연산속도가 빠르다.



리버싱을 하는데 레지스터를 알아야 하는 이유?

      디버깅을 하려면 디버거가 어셈블리어로 해석을 해주기 때문에 어셈블리어를 잘 알아야 한다. 

      그런데 이 어셈블리어 명령어의 대부분은 레지스터를 조작하고 내용을 검사하는 것이기 때문에 레지스터를 잘 알아야 한다.



IA32(Intel Architecture 32bit)란

      인텔의 32비트 Cpu에서 사용하는 명령 아키텍쳐이다.



IA32의 구조



ALU : 전기적인 신호를 흘려보내서 연산을 하는 회로

I/O Unit : 입/출력을 할 때 데이터의 통로(키보드나 마이크등) 입/출력을 할 때 데이터가 이 레지스터를 지나간다.

Control Unit : 현재 PC 상태, 다음에 어떤 연산을 해야할지, 연산의 결과를 알 수 있다.

Register : 위에서 설명한 것과 같이 Cpu의 임시 저장공간. 속도가 매우 빠르다.



 General Purpose Register(범용 레지스터)란? 
               범용 이라는 말 그대로 다목적으로 쓰이는 레지스터이다.


General Purpose Register




 

EAX(Accumulator) : 연산의 결과를 저장하는 레지스터이다.
                          연산의 결과가 2byte이면 절반인 AX만 사용한다.
                          *함수의 리턴값이 저장되는 용도로도 사용된다.


EBX(Base Pointer) : 주소 연산 할 때 사용한다. 별로 많이 사용하지 않는다.





ECX(Counter) : 연산의 횟수를 지정해 줄 때 많이 사용한다.                                                                                                                         

ECX는 반복문에서 반복 카운트로 사용된다.(반복을 한번 할 때 마다 ECX의 값을 1씩 줄여나간다.)                          





EDX(Data) : EAX의 보조 역할로 많이 사용된다.                                                                                                                     

연산 결과가 4byte가 넘어가면 EDX에 저장된다.                                                                                     

나누기 연산을 할 때 몫은 EAX에, 나머지는 EDX에 저장된다.                                                                     



   EAX,EBX,ECX,EDX 는 산술연산 (ADD,SUB,XOR,OR등) 명령어에서 상수/변수 값을 저장하기 위한 용도로 많이 사용된다.         



                      






ESI(Source Index) : 문자열에 관련된 레지스터이다.                                                                                                                  

ESI가 저장되어 있는 문자열에 EDI가 가리키는 문자로 가라.(char arr[5]라는 변수가 있으면 arr이라는 변수명은 EDI가,

변수에 저장되어 있는 각각의 값은 ESI가 참조하고있다.)




EDI(Destination Index) : 문자열에 관련된 레지스터.

        ESI가 저장되어 있는 문자열에 EDI가 가리키는 문자로 가라.




EBP(Base Pointer) : EBP 와 ESP는 Stack영역에서 사용되는 레지스터이다.

        EBP는 스택의 시작 주소를 가리킨다.

        EBP는 보통 변하지 않는다

EBP는 함수가 호출 되었을 때 ESP를 저장 했다가, 함수의 리턴명령을 수행하기 바로 전에

다시 ESP값을 되돌려주어 스택을 유지한다. 이것을 스택프레임(Stack Frame) 기법이라고 한다.





 ESP(Stack Pointer) : 스택의 맨 위부분을 가리킨다.

       PUSH,POP을 할 때마다 ESP가 변한다.




 


ESI,EDI,ESP,EBP는 메모리 주소를 저장하는 용도로 사용된다.


EIP(Instruction Pointer) : 다음에 실행할 명령어의 주소가 들어가있다.





Eflags Register : 컴퓨터의 연산 상태를 알 수 있는 레지스터. bit마다 역할이 다름.

Zero Flags : 결과가 0이면 1을, 0이 아니면 0을 저장.




                                                                                        


'Reversing' 카테고리의 다른 글

abex' crackme #1  (0) 2018.06.27
Reversing 기초(what is reversing?)  (0) 2017.12.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함