Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Целочисленное переполнение *masm

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> Целочисленное переполнение *masm
Имя
Сообщение << Старые топики   Новые топики >>
Целочисленное переполнение *masm - 2009-01-19 22:29:34.066666   
Kerny

Сообщений: 41
Оценки: 0
Присоединился: 2008-12-11 15:39:17.436666
На команде div ebx
пишет :
Integer overflow
Целочисленное переполнение

.386 .model flat,stdcall option casemap:none includelib C:\masm32\lib\kernel32.lib include C:\masm32\include\kernel32.inc .data w dword ? x dword ? v dword ? z dword ? .code start: mov x,25 mov z,10000 mov eax,x mov w,eax mov eax,x ; eax=25 mov ebx,w ; ebx=25 [b]div ebx[/b] ;eax=eax/ebx, eax=1 invoke ExitProcess,0 end start
">

В чем проблема?
Post #: 1
RE: Целочисленное переполнение *masm - 2009-01-20 01:08:01.980000   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
div ebx
ebx - 32 бита - 4 байта
сли такой делитель, то делимое = EDX:EAX,
с EAX все понятно - там 25
а в EDX - мусор.

И ты делишь 8 байтов (4 непонятно чего и 4 байта, равные 25) на 25.
Результат хочешь получить в EAX, а его не хватает.

Причина - частное от деления > 2^32 - 1.

Рекомендуемый способ устранения -
xor EDX, EDX ;вставить перед делением, это очистит EDX.

Ещё, по можно в начале программы сделать pusha, а в конце popa, (для страховки) это защищит другие программы от твоих манипуляций с регистрами. На эту тему можно поспорить конечно, м.б. ОС сама все сделает при переключении процесса, но я не уверен на счет этого.
Post #: 2
RE: Целочисленное переполнение *masm - 2009-01-21 19:40:22.923333   
Kerny

Сообщений: 41
Оценки: 0
Присоединился: 2008-12-11 15:39:17.436666
quote:

tеstеr
спасибо, помог.
Post #: 3
Страниц:  [1]
Все форумы >> [Прочее] >> Целочисленное переполнение *masm







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.