내 기억용으로 남김
For my memorizing purpose
INC - Plus 1 / 피연산자에 1을 더함
DEC - Minus 1 / 피연산자에 1을 뺌
ADD - Destination + Source = Destination
SUB - Destination - Source = Destination
MUL - 부호없는 al, ax, eax * 피연산자
IMUL - 부호있는 al, ax, eax * 피연산자
DIV - 부호없는 정수의 나눗셈
MOV - Copy data from Source to Destination
AND - Bit And 연산 ( Destination / Source both )
OR - Bit OR 연산 ( Destination / Source both )
XOR - Bit XOR 연산 ( Destination / Source both )
TEST - 두 연산자 사이에 논리적인 AND 연산을 수행하여 플래그 레지스터에 영향을 주지만 결과값은 저장하지 않는다.
OF, CF는 항상 0으로 세트되고 TEST연산 결과값이 0이면 ZF가 1로 세트, 0이 아니면 ZF가 0으로 세트된다.
PUSH - Put value into Stack
POP - ESP 레지스터가 가리키고 있는 위치의 스택 공간에서 4byte 만큼을 Destination 피연산자에 복사하고
ESP 레지스터의 값에 4를 더한다.
PTR - 피연산자의 크기를 재설정한다.
LEA - Source 피연산자의 유효 주소를 계산하여 Destination 피연산자에 복사한다.
JMP - 피연산자의 위치로 실행 흐름이 변경된다. 피연산자가 가리키는 코드로 점프 뛰어서 실행한다고 생각하면 된다.
피연산자에는 레이블이나 레지스터, 메모리 값이 올 수 있다.
CALL - 함수 호출시 사용된다. JMP 명령과 같이 프로그램의 실행 흐름이 변경되지만 JMP명령어와 다른 점은 되돌아올 리턴 어드레스를 스택에 저장한다는 것이다. 되돌아올 주소를 저장하기 때문에 함수 호출 후 원래 위치로 실행흐름을 되돌릴 수 있다. 호출한 함수가 일을 다 마치면 원래 위치에서 다시 프로그램이 실행 될 수 있음을 의미한다.
CMP - 두 피연산자를 비교하는 작업을 한다. Destination 피연산자에서 Source 피연산자를 묵시적으로 빼서 값을 비교한다. 두 피연산자의 값이 같다면 결과는 0이 되고 제로 플래그가 1로 세트된다. 다르다면 제로 플래그는 0으로 세트된다.
NOP - 아무 일도 하지 않는 명령어이다. 리버싱 작업에서 목적에 따라 유용하게 사용될 수 있다.
< 조건 점프 명령어 >
JG - > 크다면 점프
JGE - => 크거나 같다면 점프
JL - < 작다면 점프
JLE - =< 작거나 같다면 점프
JC - 캐리플래그가 세트되면 점프
JCXZ - CX == 0 점프
JE - == 같다면 점프
JECXZ - ECX == 0 점프
JNA - !> 크지 않다면 점프
JNAE - !> || != 크지 않거나 같지 않으면 점프
JNB 작지 않으면 점프
JNBE 작지 않거나 같지 않으면 점프
JNC 캐리플래그가 세트되지 않으면 점프
JNE 같지 않다면 점프
JNO 오버플로우 플래그가 세트되지 않다면 점프
JNP 패러티플래그가 세트되지 않다면 점프
JNS 사인플래그가 세트되지 않다면 점프
JNZ 제로가 아니라면 점프
JO 오버플로우 플래그가 세트되면 점프
JP 패러티플래그가 세트되면 점프
JPE 패러티가 같다면 점프
JPO 패러티가 홀수이면 점프
JS 사인플래그가 세트되면 점프
JZ 제로이면 점프