![]() |
eXeL@B —› Вопросы новичков —› Asm в delphi |
Посл.ответ | Сообщение |
|
Создано: 31 декабря 2013 17:06 · Поправил: dimka_new · Личное сообщение · #1 Здравствуйте господа ! Во первых с наступающим НГ! Возник такой вопрос, исследую прожку, логику разобрал получил число -488,60545065341159046752816081086 Остался вот такой блог: 0064088A |. E8 FD24DCFF CALL Qurqiyma.00402D8C ; Frac 0064088F |. DB2D E0086400 FLD TBYTE PTR DS:[6408E0] 00640895 |. DEC9 FMULP ST(1),ST Здесь ST=1.000000000000000000e+12, ST(1)=-0.6054506534115944305 00640897 |. E8 2025DCFF CALL Qurqiyma.00402DBC ; Trun 0064089C |. 85D2 TEST EDX,EDX 0064089E |. 7D 07 JGE SHORT Qurqiyma.006408A7 006408A0 |. F7D8 NEG EAX - здесь EAX=0854311D 006408A2 |. 83D2 00 ADC EDX,0 006408A5 |. F7DA NEG EDX здесь EDX=FFFFFF74 006408A7 |> 81F0 29E30301 XOR EAX,103E329 вот здесь eax=F7ABCEE3 Прошу помощи в переводе данного куска в delphi. Что такое frac и trun я почитал, но у меня что-то несходится. Заранее спасибо и еще раз с НГ! ![]() |
![]() Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 31 декабря 2013 17:44 · Личное сообщение · #2 Перемножение двух float, выделение целой части(Trunс), могу предположить что в EAX - дробная/ EDX - целая часть результата(или даже наоборот), если (signed int) EDX < 0, то знак дробной части(EAX) меняется, к EDX добавляется остаток от переноса и знак тоже меняется. Потом исключающие или. (Пока это все, что могу сказать в более менее трезвом состоянии ![]() Выложите программу короче. ![]() |
|
Создано: 31 декабря 2013 18:06 · Личное сообщение · #3 |
|
Создано: 31 декабря 2013 18:27 · Личное сообщение · #4 Либо я у меня мозг тоже опьянел чутка, но моя логика такова: было какое-то число, типа -123456789.6054506534115944305 Фраком отезаем дробную часть, то есть -0.6054506534115944305, которое лежит сейчас в st0 затем в St0 командой FLD TBYTE PTR DS:[6408E0] - ложим 1.000000000000000000e+12 потом умножение FMULP ST(i), ST(0) Multiply ST(i) by ST(0), store result in ST(i), and pop the register stack. по идее получается -605450653411.5944 затем транком отрезаем дробную часть, получая -605450653411 (Int64) откуда -488,60545065341159046752816081086 - и правда не знаю ![]() Показал бы прогу ;) ----- ds ![]() |
|
Создано: 31 декабря 2013 18:32 · Поправил: dimka_new · Личное сообщение · #5 DimitarSerg не верно выразился, -488,60545065341159046752816081086 - получилось ДО этого блока. -605450653411 - как раз то что нужно А как это выглядит в дельфях: потом умножение FMULP ST(i), ST(0) Multiply ST(i) by ST(0), store result in ST(i), and pop the register stack. по идее получается -605450653411.5944 ![]() |
|
Создано: 31 декабря 2013 18:41 · Поправил: DimitarSerg · Личное сообщение · #6 |
|
Создано: 31 декабря 2013 18:49 · Поправил: dimka_new · Личное сообщение · #7 |
|
Создано: 31 декабря 2013 19:51 · Личное сообщение · #8 |
|
Создано: 31 декабря 2013 20:09 · Личное сообщение · #9 |
![]() |
eXeL@B —› Вопросы новичков —› Asm в delphi |