< CMP와 TEST 명령어의 차이 >
1) CMP
- 형식 : CMP dest, src
- 기능 : dest피연산자에서 src연산자를 묵시적으로 빼서 값을 비교한다.
- 원칙 1) 뺀 값이 0일 경우 ZF가 1로 세트 되고, 다를 경우 0으로 세트 됨.
2) 처음 상태일 때는 NZ(Not Zero)로 ZF가 0이지만, 계산 값이 0일 경우 ZF가 1로 세트 되면서 NZ가 ZR로 변경됨.
3) 혼자 사용 X, 언제나 조건 점프 혹은 조건 이동 명령어와 함께 사용됨
2) TEST
- 형식 : TEST opr1, opr2
- 기능 : 두 피연산자 사이에 논리적인 AND연산을 수행하여 ZERO 플래그에 영향을 주지만 결과값을 저장 X.
- 원칙 1) OF, CF는 항상 0으로 세트 되고, 계산 값이 0일 경우에 ZF가 1로 세트 된다.
2) 2개의 오퍼랜드가 필요
3) 혼자 사용 X, 언제나 조건 점프 혹은 조건 이동 명령어와 함께 사용됨
CMP 명령어는 dest 값과 src 값이 동일한지 확인하는데 주로 쓰임
TEST 명령어는 opr1 값과 opr2 값이 0인지 확인하는데 주로 쓰임
// TEST 명령어의 경우 두 오퍼랜드가 0이 아닐 경우를 제외하고는 어떤 값이 0인지 단정을 못 지으므로 주로 아래 예시처럼 쓰이는 경우가 대부분이다.
(구체적으로 "TEST eax, eax"로 쓰이면 eax가 0 일 경우에는 0 AND 0 = 0 연산을 하므로 ZF가 1로 세트 된다.)
'보안 공부 > Reversing' 카테고리의 다른 글
[리버싱] 스택 프레임과 함수 프롤로그/에필로그 (0) | 2019.11.01 |
---|---|
[리버싱] 리틀엔디안, 빅엔디안 (0) | 2019.11.01 |
[리버싱] MOV와 LEA의 차이 (5) | 2019.09.17 |
[리버싱] 어셈블리 명령어 종류 (0) | 2019.09.17 |
[리버싱] 어셈블리어란/어셈블리어종류 (0) | 2019.09.17 |
댓글