본문 바로가기
보안 공부/Reversing

[리버싱] CMP와 TEST 명령어 차이

by 그적 2019. 11. 1.

< 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로 세트 된다.)

댓글