IDIV 이전까지의 코드를 수행하게 되면,
AL 에 83h 를 넣고,
CBW 워드로 확장한다.
그리고, CL 에 10h를 넣는다.
아래와 같은 레지스터 값을 가지게 된다.
그리고 마지막, IDIV CL 을 수행하게 되면 다음과 같이 레지스터 값이 변한다.
미리 예상하기에는,
EAX 00000F3F
EDX 00000009
가 될것 같지만, 다르게 나온다.
왜일까.
나눠지는 값은 2바이트이다.
그러나, 나누는 값이 1바이트이다.
그래서, 나눠지는 값이 1바이트로 변한다.
83h 를 10진수로 바꾸면, -125이다.
10h 를 10진수로 바꾸면, 16이다.
손수 나눗셈을 해보면,
몫 : -7
나머지: -13 이 나온다.
-7을 16진수로 바꾸면, F9
-13을 16진수로 바꾸면, F3
따라서,, 나머지와 몫을 이어서 쓰면,
0000F3F9
결과와 똑같다.!!
이 글은 스프링노트에서 작성되었습니다.
'Programming > Reversing' 카테고리의 다른 글
리버싱 기초 정리 1 (0) | 2009.06.22 |
---|---|
WinDBG (0) | 2009.04.23 |
ASM 1 (0) | 2009.04.09 |
MASM32 / EditPlus 연동 (0) | 2009.04.09 |
Register (0) | 2009.04.08 |
댓글