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

 eXeL@B —› Программирование —› Как вызвать _ftol() в C#
Посл.ответ Сообщение

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

Создано: 09 августа 2018 08:36 · Поправил: nmix
· Личное сообщение · #1

Всем привет!

Изучаю код функции. В IDA Pro получил псевдо-представление кода на C.
Смотри картинку.

Если на входе функции имеем аргумент 0x53BE28 (5488168).
После выполнения цикла for получаем i = 495910.87368

Далее выполняется функция _ftol(); т.е. преобразование вещественного числа в целочисленное.
Получаем результат 0x79126 (495910)

До этого момента все понятно. Но вот дальше вычисления не ясны.

При выходе из функции снова вызывается _ftol();

И в результате мы получаем 0xD54D3 (873683)

Как так получилось? Как выполнить _ftol() над целочисленной переменной ?

Вероятно, функция выполняется на памятью в которой лежит значение 0x79126

Прошу направить или ткнуть носом где почитать.


2322_09.08.2018_EXELAB.rU.tgz - Reverse.png




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 09 августа 2018 09:02 · Поправил: f13nd
· Личное сообщение · #2

Очевидно декомпилятор шляпу выдал. Чисто логически не может эта функция войдом быть. Если он этой функцией не заменил fistp или подобную инструкцию, тогда это хоть как-то логично выглядит.
ЗЫ: 873683 это дробная часть переменной i, если верить картинке. Так что с программой все в порядке, это декомпилер так шутит. А 495910 это 0x79126, целая часть этой же i.

-----
2 оттенка серого


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


Ранг: 77.2 (постоянный), 74thx
Активность: 0.190.15
Статус: Участник

Создано: 09 августа 2018 10:31
· Личное сообщение · #3

nmix
Может, следует использовать более профильный инструмент для ресёрча?
nmix пишет:
При выходе из функции снова вызывается _ftol();

Нет, не вызывается.. Просто возвращает инт..



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

Создано: 09 августа 2018 11:06 · Поправил: nmix
· Личное сообщение · #4

f13nd пишет:
ЗЫ: 873683 это дробная часть переменной i, если верить картинке. Так что с программой все в порядке, это декомпилер так шутит. А 495910 это 0x79126, целая часть этой же i.


Вы абсолютно правы. Как я это вчера ночью не заметил))
Тему можно закрыть. Ответ получен.



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 09 августа 2018 12:04
· Личное сообщение · #5

Автор сам может закрыть свою тему, кнопка "Закрыть тему" находится внизу страницы, под кнопкой "Отправить сообщение".

| Сообщение посчитали полезным: nmix
 eXeL@B —› Программирование —› Как вызвать _ftol() в C#
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати