Сейчас на форуме: asfa, _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› никак не пойму работу div
Посл.ответ Сообщение

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 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"


Почему так происходит?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 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


| Сообщение посчитали полезным: YellowKlen

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 сентября 2011 05:48
· Личное сообщение · #3

Спасибо , пойду ка я спать пожалуй.


 eXeL@B —› Вопросы новичков —› никак не пойму работу div
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати