[정보 보안] 리버싱

[Reversing] 기초 이론_Assembly(어셈블리)_2

ITsubin 2022. 8. 21. 23:26

산술 연산 명령어

> IA32에서 지원하는 산술연산 명령어의 종류는 아래와 같다.

> [ ADD  /  SUB  /  MUL  /  DIV  /  IMUL  /  IDIV ]


ADD ( 덧셈, + )

> add esp, 4

> Esp=esp+4

> 변수 공간을 해제할때 사용

 

SUB ( 뺄셈, - )

> sub esp, 8

> Esp=esp-8

주로 변수 공간을 확보할 사용이 된다.

 

MUL ( 곱셈, * )

> eax와 연관

> Ex) mul ecx : eax*ecx

> 위 예시의 연산 결과값은 edx:eax에 저장 (상위 비트 : edx, 하위 비트 : eax)

 

IMUL (Interger Multiply, 부호 있는 정수의 곱셈, sign)

> MUL IMUL 명령어 곱셈을 수행한다. ( Unsign Sign형의 연산 차이 )

AX, DX:AX, EDX:EAX 저장

> 오퍼랜드의 크기에 따라 저장할 레지스터의 크기가 결정.

 

DIV ( 나눗셈, / )

> 몫은 EAX, 나머지는 EDX에 저장.

> EDX 영역을 확장해서 사용.

> CBW, CWD, CDQ 등

 

IDIV ( 부호 있는 나눗셈, / )

> 몫은 EAX, 나머지는 EDX에 저장.

> EDX 영역을 확장해서 사용.

> CBW, CWD, CDQ 등

 


+ CBW, CWD, CDQ 명령어?

> 부호 확장 명령어.

> CBW : Convert Byte to Word, 바이트를 워드로 확장.

> CWD : Convert Word to Dword, 워드를 Dword(2워드)로 확장.

> CDQ : Convert Dword to Qword, Dword를 Qword(4워드)로 확장.


+ Increase, Decrease?

> INC : Increase, 피연산자의 데이터에 +1 수행. (단일 오퍼랜드에 +1 수행)

> DEC : Decrease, 피연산자의 데이터에 -1 수행. (단일 오퍼랜드에 -1 수행)


비트 연산 명령어 (비트 연산자)

> AND, OR, XOR

> AND : 두 오퍼랜드의 각 비트의 AND 연산 수행

> OR : 두 오퍼랜드의 각 비트의 OR 연산 수행

> XOR : 두 오퍼랜드의 각 비트의 XOR 연산 수행