보안 공부/System 보안

어셈블리 기초 _ 명령어 모음

H.J.World 2018. 12. 7. 13:43
728x90
반응형

Reversing 분석을 하다보니 어셈 명령어가 헷갈려서 다시한번 정리하고 올려본다..

 

- 데이터 이동 명령어

 

mov - Move

mov 명령어는 두번째 인자의 주어진 데이터(레지스터, 메모리 주소, 상수값)을 첫번째 인자에 복사합니다. 주의할 점은, 레지스터끼리의 데이터 이동은 가능하지만, 메모리 주소간의 데이터 이동은 할 수 없다. 이러한 경우에 메모리 간 데이터 복사를 위해서는 복사하고자 하는 데이터를 먼저 특정 레지스터로 이동 후 이동해야 한다.

 

mov eax, ebx — ebx의 데이터를 eax에 복사한다.
mov byte ptr [var], eax — eax를 var가 가르키는 주소로 복사한다.

 

 

push — Push stack

push 명령어는 현재 ESP 레지스터가 가지고 있는 스택 메모리 주소에 인자 값을 한다. ESP 포인터는 push 명령어에 의해 작아지게 되고, 스택이 아래로 길어진다.  -> 스택은 높은 메모리 주소(0xFFFFFFFF) 부터 낮은 메모리 주소(0x00000000)으로 자란다.

 

push eax — eax 레지스터의 데이터를 스택으로 옮긴다.
push [var] — var 포인터가 나타내는 메모리의 데이터를 스택으로 옮긴다.


 

pop — Pop stack

 

pop 명령어는 현재 ESP 레지스터가 가지고 있는 스택 메모리 주소에 있는 데이터를 인자로 복사하고, ESP 포인터의 값을 +4h 한다. (이 때, 무조건 4바이트 단위로 복사하게 된다.) ESP 포인터는 pop 메모리에 의해 커진다.

 

lea — Load effective address

lea 명령어는 2번째 인자의 메모리 주소를 첫번째 인자에 넣는다. 

원하는 메모리의 포인터를 얻을 때 흔히 사용되며, 주소값을 계산하여 액세스하는 과정에서, mov 명령어로 처리하면 프로그램이 길어지는 것을 좀 더 효율적으로 처리하기위해 만들어진 것으로 보인다.


lea edi, [ebx+4*esi] — EBX+4*ESI 의 주소값에 담긴 데이터가 edi에 로드된다. 브라켓이 없다면, 이 주소가 도르된다.
lea eax, [var] — var 의 데이터가 eax 로 로드된다.
lea eax, [val] — val 의 데이터가 eax 로 로드된다.

 


 

 - 산술 및 논리 명령어


imul — Integer Multiplication

imul 명령어는 정수 곱셈을 계산할 때 사용하며, 인자가 2개와 3개일 때의 2가지 문법을 지원한다. 인자가 2개일 경우, 첫번째 인자와 두번째 인자를 곱한 결과를 첫번째 인자에 저장한다. 인자가 3개일 경우, 두번째 인자와 세번째 인자를 곱한 결과를 첫번째 인자에 저장한다.

추가로, 첫번째 인자는 반드시 레지스터여야만 한다. 또한, 세번째 인자가 올 경우에는 반드시 const 형태의 정수만 사용할 수 있다.

imul eax, [var] — var포인터가 가리키는 값 * eax 를 eax에 저장한다.
imul esi, edi, 25 — esi 에 EDI * 25를 저장한다.

 

 

- 흐름 제어 명령어

CMP - 첫번째에서 두번째 값을 뺀다.

 

cmp EDX, EAX

JE 00401000 ( JE = 결과가 같을 경우 점프, 아닐결우 수행하지 않음)

 

CMP 연산 ( cmp a , b ) 

 ZF(Zero Flag)

CF(Carry Flag)

 a< b

 0

 a>b

 0

0

 a==b

 1

0

 

JA - Jump if above, >

JAE - Jump if above or euqal, >=

JB - Jump if below <

JEB - Jump if below or equal, <=

JC - Jump if carry flag set

JCXZ - Jump if CS is 0

JE - Jump if equal, ==

JECXZ - Jump if ECX if 0

JG - Jump if greater, >

JZ - Jump if zero

 

JE는 CMP와 어울리고, JZ는 TEST에 어울림

 

728x90
반응형