[1] 데이터 이동 명령어
- MOV : 값을 넣어줌, operand1 <- operand2
- LEA : Load Effective Address 약자로 MOV와 동일, 주소 값을 저장
- PUSH : 스택에 값을 저장, 스택 4byte 증가, ESP 4byte 감소
- POP : 스택 끝에 저장된 값을 가져옴, 스택 4byte 감소, ESP 4byte 증가
[2] 산술연산 명령어
- ADD : 덧셈
- SUB : 뺄셈
- INC : 오퍼랜드 내용을 1증가
- DEC : 오퍼랜드 내용을 1감소
- MUL/IMUL : EAX와 오퍼랜드를 곱셈하여 EAX에 저장
- DIV/IDIV : EAX와 오퍼랜드를 나누어 EAX에 저장
- NEG : 오퍼랜드의 2의 보수(부호반전)
[3] 비트연산 명령어
- AND : 두 비트가 모두 1이면 1, 나머지는 0으로 계산
- OR : 두 비트 중 하나라도 1이면 1, 아니면 0으로 계산
- XOR : 각 비트 값을 비교하여 값이 같으면 0, 다르면 1로 계산
- NOT : 비트 값을 반대 값(0->1, 1->0)으로 변경
- SHL : 왼쪽으로 쉬프트 연산
* 최하위 비트는 0으로 채워지고 기존 값은 CF 플래그 레지스터에 저장
- SHR : 오른쪽으로 쉬프트 연산
* 최상위 비트는 부호비트로 채워지고 CF 플래그 레지스터에 저장
- ROL/RCL : 왼쪽으로 쉬프트 연산, 최하위 비트는 최상위비트로 채워짐
- ROR/RCR : 오른쪽으로 쉬프트 연산, 최상위 비트는 최하위비트로 채워짐
[4] 제어 명령어
- CMP : 두 개의 오퍼랜드 비교(뺄셈 연산 후 플래그 설정)
- TEST : 두 개의 오퍼랜드 비교(AND 연산 수행 후 플래그를 설정)
- CALL : 해당되는 주소의 함수를 호출하여 수행 코드 위치로 옮김
- INT : 인터럽트를 일으키는 명령어
- LEAVE : 함수에서 사용한 지역변수 스택을 비움
- RET : 스택에 저장된 주소로 복귀
- NOP : 아무 동작도 수행하지 않음(기계어 코드 0x90), 공격 코드를 삽입할 때 자주 쓰임
[5] 분기 명령어
- JMP : 무조건 EIP 주소값으로 점프
- JCC : CC(조건부코드) 값에 따라 해당 EIP 주소 값으로 점프
- JE : Jump If equal
-JNE : Jump if not equal
[6] 반복 명령어
- REP : ECX 레지스터 지정 횟수만큼 또는 ZF 플래그 조건에 맞을 동안 반복
- LOOP : LOOP 영역을 ECX 레지스터 지정 값만큼 반복
*출처 : 윈도우즈 보안과 운영실습 - 최은정 교수님 강의자료
'Security study > Reversing' 카테고리의 다른 글
32bit IAT, EAT 로딩 과정 및 개념 (0) | 2021.09.27 |
---|---|
notepad.exe 패킹 언패킹(tool없이 패킹 풀기 & PEID 결과 비교) (0) | 2021.09.13 |
PE 헤더(PE Header) (0) | 2021.09.13 |
32bit / 64bit 함수 호출 규약 (0) | 2021.09.11 |
64bit 레지스터 개념 정리 (0) | 2021.09.11 |