1. 레지스터 (Register)


  - 프로세서가 사용하는 작은 메모리 공간


  1-1 ) EAX (Accumulator)

   - 산술 계산에 사용되며 함수의 반환 값을 저장


  1-2 ) EDX (Data)

   - 산술 계산에 사용되지만 EAX와 같이 함수의 반환 값을 저장하지는 않음


  1-3 ) ECX (Counter)

   - 주로 반복문의 반복 횟수를 카운팅하는데 사용


  1-4 ) EBX (Base)

    - Base 값 지정, 주로 index 계산의 Base로 사용


  1-5 ) ESI (Source)

    - 문자열 또는 각종 반복 데이터를 처리하거나 메모리를 옮길 때 Source 주소 지정을 위해 사용


  1-6 ) EDI (Destination)

    - 문자열 또는 각종 반복 데이터를 처리하거나 메모리를 옮길 때 Destination 주소 지정을 위해 사용


  1-7 ) al & ah (Low & High)

    - 8비트 레지스터

    

   




2. 어셈블리 (Assembly)


  2-1 ) PUSH & POP

   - 스택에 값을 넣는 것을 PUSH, 스택의 값을 가져오는 것이 POP (PUSHAD, POPAD : 모든 레지스터를 PUSH, POP)


  2-2 ) MOV

   - 값을 넣어주는 명령어 (ex : MOV  eax, 1 )


  2-3 ) LEA

   - 주소를 가져와 넣어주는 명령어


  ※ MOV와 LEA의 차이


   



  2-4 ) ADD

   - src에서 dest로 값을 더하는 명령어


  2-5 ) SUB

   - src에서 dest로 값을 빼는 명령어


  2-6 ) INT

   - 인테럽트를 발생시키는 명령어. 뒤에 오는 오퍼랜드 값에 해당하는 인테럽트를 발생시킴. 

      대표적으로 INT 3 명령어가 존재하며 0xCC opcode를 가진 DebugBreak()가 있다. 


  2-7 ) CALL

   - 함수를 호출하는 명령어. Call 뒤의 오퍼랜드로 주소가 오게되고 해당 주소를 호출한 뒤 작업이 끝나서 Ret 명령어를 만나면 Call 다음 주소로 되돌아옴


  2-8 ) INC & DEC

   - 오퍼랜드에 1을 더하거나 뺀다.


  2-9 ) AND & OR & XOR

   - dest와 src를 연산한다. XOR eax, eax 와 같은 구문은 eax를 초기화하는데 사용


  2-10 ) NOP

   - 아무것도 수행하지 않고 다음 명령어를 수행하는 명령어


  2-11 ) CMP & JMP

   - 비교 및 점프 명령어




3. 스택 (Stack)


  - 프로세서가 사용하는 작은 메모리 공간, 함수의 반환 주소, 파라미터와 함수 내에서 선언하는 지역 변수가 해당 메모리에 위치함

 

  3-1 ) 지역 변수


   


   - push  ebp 

     : 이전 함수의 stack base pointer를 저장함 (호출된 함수의 스택 공간을 사용하기 위함)

   - mov  ebp, esp

     : 이전 함수의 esp를 현재 함수의 stack base pointer로 옮김  

   - sub  esp, 50h

     : 현재 함수의 stack pointer를 50 감소시킴 (0x50 크기의 지역 변수 공간 할당)  


   -> 지역변수가 4바이트 크기라 가정하면 ebp - 4 : 첫 번째 지역변수, ebp - 8은 두 번째 지역변수가 됨

  3-2 ) 함수의 호출과 파라미터

  

   


   - 위와 같이 3개의 인자를 전달받는 함수가 있을 경우 마지막 인자부터 역순으로 스택에 push되고 함수가 호출됨

   - 따라서 함수 호출 후 ebp에는 이전 스택의 base pointer, ebp + 4에는 함수의 리턴 주소가  위치하고 그 위로는 함수에 전달된 인자가 위치함

   - ebp + 0x8  : 첫 번째 파라미터

   - ebp + 0xC  : 두 번째 파라미터

   - ebp + 0x10 : 세 번째 파라미터


  3-3 ) 함수의 리턴 주소

   - 함수가 호출되면 전달된 인자들이 스택에 쌓이고 그 이후에 함수의 리턴 주소가 위치함

   




'Study > Reversing' 카테고리의 다른 글

우회 기법  (0) 2019.03.20
FSC_Level1 풀이  (0) 2019.03.20
Petya Ransomware 분석  (0) 2019.02.19
PE 헤더  (0) 2019.02.18
2. C 문법과 디스어셈블리  (0) 2019.02.14

+ Recent posts