본문 바로가기

Malware Analysis/- Knowledge storage

(10)
assembly div, idiv, cdq 32bit의 나눗셈을 한다고 가정해보자. 명령어 div(부호가 없는 나눗셈), idiv(부호가 있는 나눗셈)은 많이 알고 있는 개념이다. 그 외에 알아야할 개념은 2가지 정도이다. 피제수와 cdq이다. 피제수는 나눔을 당하는 수 즉, dividied이다. 17과 5를 (32bit data라 가정) 나눈다고 하면 eax에 17을 넣고, ebx(다른 레지스터나 메모리도 상관은 없다)에 5를 넣는다. 그리고 div나 idiv연산을 하면 잘 될 거같지만 그렇지 않다. 제수가 32bit data라면 피제수는 64bit가 되어야한다. 그래서 피제수의 bit를 확장해 줘야하는데 그것이 cdq 연산이다. eax를 eax(상위16비트):edx(하위32비트)로 바꿔준다. 그리고 idiv 연산을 하면 몫은 eax 나머지는 ..
EFLAGS - 제어 플래그, 상태 플래그 EFLAGS 레지스터는 CPU의 동작을 제어하거나 연산 결과를 반영하는데 사용되는 레지스터들이다. EFLAGS 영역은 리버스 엔지니어링에 핵심적인 추적을 위한 용도로 자주 사용되므로 꼭 숙지해야한다. [제어 플레그] 제어 플레그는 CPU의 동작을 제어하는 플레그이다. Direction Flag(DF) 스트링 조작을 할 때에 이 플래그가 0이면 0번지를 나타내는 레지스터 값이 자동적으로 증가하고 1이면 레지스터값은 자동적으로 감소한다. Interupt Flag(IF) 플래그가 0일때 INTR 단자로부터의 외부 인터럽트 요구는 무시하고, 1일 때는 외부 인터럽트 요구를 받아들인다. Trap Flag(TF) 플래그가 0일때 CPU는 보통대로 명령을 실행하지만, 1일 때는 CPU는 한 명령을 실행할 때마다 자동..