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 나머지는 edx에 들어간다.
'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 |
EFLAGS - 제어 플래그, 상태 플래그 (0) | 2018.01.22 |