![]() |
eXeL@B —› Вопросы новичков —› никак не пойму работу div |
Посл.ответ | Сообщение |
|
Создано: 07 сентября 2011 05:19 · Личное сообщение · #1 Доброе время суток. Пытаюсь написать кейген к crackme 4 от фантома CMP BYTE PTR DS:[ESI], 0 JE SHORT 0040132A MOV AL, BYTE PTR DS:[ESI] ADD AL, CL XOR AL, CL DIV BL SHR AX, 8 ADD AL, 41 MOV BYTE PTR DS:[EDI], AL INC EDI INC ESI INC ECX JMP SHORT 00401310 MOV BYTE PTR DS:[EDI], 0 это сам алгоритм генерации ключа от ника в Olly. Пытаюсь перенести его в студии и заметил интересную вещь, что после того как происходит деление , в регистр eax заносится результат не 3h как по идее должно было бы быть а 803h . Откуда эта 8 берётся никак не пойму, ниже тот же самый код но в студии написанный там как раз именно 3h в eax . int t(0); _asm{ mov eax, 56 mov ecx, 1Ah xor edx,edx div ecx mov t, eax //mov n, edx } printf("t div 1Ah %d \n",t); t - выводит "3" Почему так происходит? ![]() |
|
Создано: 07 сентября 2011 05:34 · Поправил: PE_Kill · Личное сообщение · #2 Потому что в 8 битном режиме результат деления записывается в AL а остаток от деления в AH, а вместе это регистр AX. В 16 и 32 битном режиме результат записывается в AX/EAX соотвественно, а остаток записывается в DX/EDX. Это можно нагуглить за 10 секунд. Первый DIV как раз и работает в 8 битном режиме, а код в студии в 32 битном. ЗЫ Кстати алгоритмы не идентичны. В первом берется остаток от деления посредством SHR AX, 8 а во втором случае берется именно результат деления, т.к. остаток лежит в EDX. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 07 сентября 2011 05:48 · Личное сообщение · #3 |
![]() |
eXeL@B —› Вопросы новичков —› никак не пойму работу div |