EFLAGS 레지스터는 CPU의 동작을 제어하거나 연산 결과를 반영하는데 사용되는 레지스터들이다. EFLAGS 영역은 리버스 엔지니어링에 핵심적인 추적을 위한 용도로 자주 사용되므로 꼭 숙지해야한다.
[제어 플레그]
제어 플레그는 CPU의 동작을 제어하는 플레그이다.
Direction Flag(DF)
스트링 조작을 할 때에 이 플래그가 0이면 0번지를 나타내는 레지스터 값이 자동적으로 증가하고 1이면 레지스터값은 자동적으로 감소한다.
Interupt Flag(IF)
플래그가 0일때 INTR 단자로부터의 외부 인터럽트 요구는 무시하고, 1일 때는 외부 인터럽트 요구를 받아들인다.
Trap Flag(TF)
플래그가 0일때 CPU는 보통대로 명령을 실행하지만, 1일 때는 CPU는 한 명령을 실행할 때마다 자동적으로 내부 인터럽트를 발생한다.
[상태 플레그]
상태 플레그는 리버스 엔지니어링에서 중요한 플레그이다. S라고 붙인 플레그들이 상태 플레그이다.
Overflow Flag(OF)
이 플레그는 아래에 Carry Flag와 혼동하면 안된다. 캐리 플레그 != 오버 플레그이다. 오버플로 플레그는 부호있는 산술 연산의 결과가 너무 크거나 작아서 목적지에 저장할 수 없을 때 발생하며 이때 오버플로 플래그는 1로 설정한다. 즉 Carry Flag와 차이는 부호가 있느냐 없느냐이다.
Sign Flag(SF)
부호 플레그는 산술 논리 연산의 결과가 음수일 경우 발생하는 플레그이다. 결과가 음수라면 1로 설정한다.
Zero Flag(ZF)
제로 플레그는 산술 논리 연산의 결과가 0일 때에 1로 설정한다. 리버스 엔지니어링에서는 제로 플레그는 구조를 추적하는데 매우 중요한 플래그이다.
Auxiliary Carry Flag(AC)
보조 캐리 플래그는 산술 연산이 8비트 연산자에서 비트3 ㅡ> 비트 4로 캐리가 발생했을 때 발생하는 캐리이다. 이때 보조 캐리 플레그는 1로 설정된다.
Carry Flag(CF)
캐리 플레그는 부호 없는 산술 연산자의 결과가 목적지에 저장할 수 없을 만큼 큰 경우에 발생한다. 이럴 경우 캐리 플레그는 1로 설정한다.
'Malware Analysis > - Knowledge storage' 카테고리의 다른 글
해시(hash) vs 암호화(encryption) (0) | 2018.02.26 |
---|---|
adc, sbb, carry flag, overflow flag 이해하기(+cmp) (0) | 2018.02.01 |
JSON?? (0) | 2018.01.30 |
malwares,virustotal python script (0) | 2018.01.30 |
assembly div, idiv, cdq (1) | 2018.01.23 |