메모리 연산 명령어
> [ LEA / SCAS / STOS / REP ]
LEA
> Load Effective Address, MOV와 유사하지만 LEA는 주소 값을 복사하는 명령어이다.
SCAS
> Scan String, AL / AX / EAX에 저장되어 있는 값과 EDI에 저장된 주소를 참조한 곳의 값을 비교.
(비교 후 Flag 값 설정)
STOS
> Store String, AL / AX / EAX에 저장되어 있는 값과 EDI에 저장된 주소를 참조한 곳의 값을 비교.
(비교 후 Flag 값 설정)
REP
> Repeat String, ECX Register에 저장된 값 만큼 ECX가 0이 될 때까지 REP 뒤에 위치한 명령을 반복.
CODE 이동 명령어
> [ JMP / CALL / RET ]
JMP
> 무조건 주소로 이동. JMP [주소]의 형식으로, JMP 명령어로 해당 주소로 이동 가능.
> 조건을 설정하여 주소 이동도 가능.
> Ex) JMP 00401000
CALL
> 함수 호출 시 사용
> CALL 명령어가 실행되면 함수 종료 후 돌아올 주소를 스택에 백업하고 다른 함수로 EIP를 이동시킨다.
> [ PUSH EIP, JMP ] 두 명령어를 동시에 수행하는 것과 같다.
RET
> 함수의 종료 시 사용
> RET 명령어는 함수가 종료하여 Stack에 저장된 복귀 주소로 돌아간다.
> [ POP EIP, ADD ESP, N ]명령을 동시에 수행하는 것과 유사.
(POP EIP와 같이 직접 EIP의 값을 수정할 수는 없음)
조건 점프 명령
> Flag Register 값들을 이용해 조건이 만족하면 점프를 수행하는 명령어.
JA(Jump if (unsigned) above) : CF = 0 and ZF = 0
JAE(Jump if (unsigned) above or equal) : CF = 0
JB(Jump if (unsigned) below) : CF = 1
JBE(Jump if (unsigned) below or equal) : CF = 1 or ZF = 1
JC(Jump if carry flag set) : CF = 1
JCXZ(Jump if CX is 0) : CX = 0
JE(Jump if equal) : ZF = 1
JECXZ(Jump if ECX is 0) : ECX = 0
JG(Jump if (signed) greater) : ZF = 0 and SF = 0
JGE(Jump if (singed) greater of equal) : SF = OF
JL(Jump if (signed) less) : SF != OF
JLE(Jump if (signed) less or equal) : ZF = 1 and SF != OF
JNA(Jump if (unsigned) not above) : CF = 1 or ZF = 1
JNAE(Jump if (unsigned) not above or equal) : CF = 1
JNB(Jump if (unsigned) not below) : CF = 0
JNBE(Jump if (unsigned) not below or equal) : CF = 0 and ZF = 0
JNC(Jump if carry flag not set) : CF = 0
JNE(Jump if not equal) : ZF = 0
JNG(Jump if (signed) not greater) : ZF = 1 or SF != OF
JNGE(Jump if (signed) not greater or equal) : SF != OF
JNL(Jump if (signed) not less) : SF = OF
JNLE(Jump if (signed) not less or equal) : ZF = 0 and SF = OF
JNO(Jump if overflow flag not set) : OF = 0
JNP(Jump if parity flag not set) : PF = 0
JNS(Jump if sign flag not set) : SF = 0
JNZ(Jump if not zero) : ZF = 0
JO(Jump if overflow flag set) : OF = 1
JP(Jump if parity flag set) : PF = 1
JPE(Jump if parity is equal) : PF = 1
JPO(Jump if parity is odd) : PF = 0
JS(Jump if sign flag is set) : SF = 1
JZ(Jump is zero) : ZF = 1
'[정보 보안] 리버싱' 카테고리의 다른 글
[Reversing] 기초 이론_Assembly(어셈블리)_2 (0) | 2022.08.21 |
---|---|
[Reversing] 기초 이론_Assembly(어셈블리) (0) | 2022.08.20 |
[Reversing] 기초 이론_CPU와 레지스터_3 (0) | 2022.08.19 |
[Reversing] 기초 이론_CPU와 레지스터_2 (0) | 2022.08.18 |
[Reversing] 기초 이론_CPU와 레지스터 (0) | 2022.08.10 |