본문 바로가기

리버싱/개념

어셈블리 명령어&레지스터 종류 한눈에 보기

어셈블리 명령어

RAX와 EAX에서 R과 E의 차이

E는 32비트R은 64비트  프로그램

 

 

 

PUSH,POP

 

 - 스택에 값을 넣는 것을 PUSH, 스택에 있는 값을 가져오는 것이 POP이다. 

 

 

MOV

 

 - MOV는 값을 대입한다. 

 

 

LEA

 

 - LEA는 주소를 대입한다는 뜻이다. 

 

 

ADD, SUB

 

 - ADD a,b 는 a에 b만큼 값을 더하는 명령어이다.

 - SUB a,b는 a에서 b만큼 값을 빼는 명령어이다.

 

 

 

INC,DEC

 

 - INC는 c언어의 i++;

 - DEC은 i--;

라고 생각하면 된다.

 

 

AND, OR, XOR

 

 -  명령어 a,b  에서 and,or,xor연산을 한다.

 -  XOR은 같은 값으로 XOR을 하면 0이 되기 떄문에 XOR로 같은 오퍼랜드를 전달했을떄,

이것은 변수를 0으로 초기화 하는 효과를 줄 수 있다.

 

 

NOP

 

 - 아무것도 하지 말라는 명령어이다

 

 

CMP

 - 비교하는 명령어이다.

 - cmp a,b a와b를 비교하는 명령어, 점프 명령어 앞에 쓰인다.


점프 명령어

 

JMP

 - 점프하는 명령어

 

JE

 - 조건문이 참일때 점프

 

JZ

 - ZERO FLAG가 1일때 점프

 

JNE

 - 비교한 두 대상이 같지 않을 경우 점프

 

JLE

 - 비교 결과가 작거나 0일경우 점프

 


레지스터

 

산술 연산 레지스터

 

EAX(Accumulation)

 

-  산술연산에 사용되는 레지스터이다.(상수/변수 값의 저장 용도)

-  함수의 return 값 지정한다.

 

 

EBX(Base Register)

 

-   간접 번지지정에 사용된다.

-   산수 / 변수를 저장한다.

 

 

ECX(Counter Register)

 

- 반복(Loop)에서 반복 Count 역할을 수행

REP(반복 레지스터)에 얼마나 반복할 것인지를 ECX 레지스터에 저장한다.

 

EDX(Data Register)

 

-   EAX를 보조하는 역할을 수행한다.

-   4byte * 4byte를 연산하면 EAX에 담기지 않을 수 있다 → EDX(상위 bit), EAX(하위 bit)를 이용하여 8byte에 저장한다.

-   나누기를 진행할 경우 몫은 EAX 나머지는 EDX에 저장이 된다.

 


인덱스 레지스터

 

ESI(Source Index)

 

-   복사나 비교를 할 경우 출발지 주소를 저장하는 레지스터이다.

 

EDI(Destination Index)

 

-  복사나 비교를 할 경우 목적지 주소를 저장하는 레지스터이다.

-   stos, movs를 사용할때 마다 1씩 증가한다.

 


 

포인터 레지스터

 

ESP(Stack Pointer)

 

-   Stack Pointer의 가장 최근에 저장된 공간의 주소를 저장하는 레지스터이다. 

-   스택이 쌓일때 마다 ESP 값이 1씩 증가한다.

 

EBP(Base Pointer)

 

-   Stack Pointer의 기준점(바닥 부분)을 저장하는 레지스터이다.

-   EBP 밑에는 Return값이 존재한다.


 

EIP(Instruction Pointer)

 

-   다음 명령어의 위치를 저장하는 레지스터이다.

 


 

SF (Sign Flag)

 

-   부호가 있는 연산에서 수행한 결과가 양수이면, 최상위 비트가 0이면 SF=0, 반대는 1

 

OF (Overflow Flag)

 

-   부호가 있는 연산에서 CF의 역할

 

ZF (Zero Flag)

 

연산의 값이 0일 경우 1로 설정된다.

 

CF (Carry Flag)

 

-   부호가 없는 연산에서 비트올림이나 비트 내림이 발생하면 CD가 1이 된다.

'리버싱 > 개념' 카테고리의 다른 글

스택프레임  (0) 2021.11.08
리버싱에 필요한 것은? (레지스터, 어셈블리어)  (0) 2021.07.13
리버싱에 필요한 것은? (linux)  (0) 2021.07.13
리버싱이란?  (0) 2021.07.10
PE 헤더  (0) 2021.06.17