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

 eXeL@B —› Вопросы новичков —› Asm в delphi
Посл.ответ Сообщение

Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 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.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 31 декабря 2013 17:44
· Личное сообщение · #2

Перемножение двух float, выделение целой части(Trunс), могу предположить что в EAX - дробная/ EDX - целая часть результата(или даже наоборот), если (signed int) EDX < 0, то знак дробной части(EAX) меняется, к EDX добавляется остаток от переноса и знак тоже меняется. Потом исключающие или. (Пока это все, что могу сказать в более менее трезвом состоянии
Выложите программу короче.

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

Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 31 декабря 2013 18:06
· Личное сообщение · #3

Блин со всей математикой разобрался, отложил эти команды на потом и влип...
Да наверное повременю, думал сегодня успею, но тоже уже принял, так что после праздников
До всчтречи в 2014 году!




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

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




Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

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





Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 31 декабря 2013 18:41 · Поправил: DimitarSerg
· Личное сообщение · #6

dimka_new

Code:
  1. var q,r:double;
  2. res:int64;
  3. begin
  4. q:=-488.60545065341159046752816081086;
  5. r:=1.000000000000000000e+12;
  6. res:=Trunc(Frac(q)*r);


а знаете все получилось )
ко мне на "ты" лучше )
мой год начинается, несложно посчитать мой возраст

-----
ds


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

Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 31 декабря 2013 18:49 · Поправил: dimka_new
· Личное сообщение · #7

DimitarSerg, а знаете все получилось )
Потом выложу исходники и программу
Сорри, забыл поздравить с наступающим !!!
Ну если твой год, так это еще лучше)



Ранг: 34.1 (посетитель), 118thx
Активность: 0.040.01
Статус: Участник

Создано: 31 декабря 2013 19:51
· Личное сообщение · #8

DimitarSerg пишет:
мой год начинается, несложно посчитать мой возраст


12 лет?



Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 31 декабря 2013 20:09
· Личное сообщение · #9

nick8606, шутку юмора понял, смешно)
Может 144, а лучше 256


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


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