eXeL@B —› Вопросы новичков —› Опознать стандартную функцию TurboPascal |
Посл.ответ | Сообщение |
|
Создано: 11 марта 2019 06:26 · Поправил: dosprog · Личное сообщение · #1 Ковыряю старинную Написана изначально на какой-то из старых версий TurboPascal. Интересует в той программке конкретно одна функция, которую IDA определила так: Code:
Собственно, вопрос по той функции, которую IDA обозвала как @Sin$q4Real(x), якобы она из RTL. Но RTL используется, видимо, кастомная, не от NorbertJuffa. И похоже, что то не sin(x) вовсе. Для справок дальше выложу RTL-ную fsin.asm от TurboPascal 7... |
|
Создано: 11 марта 2019 06:33 · Поправил: dosprog · Личное сообщение · #2 [продолжение] Файл fsin.asm от TurboPascal 7 стандартной RTL, для сравнения: Code:
Ну и собственно, в чём затык - переписал функцию на Си - Всё работает, за исключением функции sin(x), по которой как раз и были вопросы. В тексте комментариями обозначены места, где затык: Code:
- Эта тестовая программа, будучи запущенной, должна написать: Calculated: 91% но вместо этого пишет: Calculated: 42% Трассируя оригинальную программу и тестовый пример, вижу промежуточные результаты совпадающими вплоть до вызова функции sin() Если в тестовом примере вместо "#if 0" написать "#if 1", то функция get_persent (double factor) вернёт 91, как ей и положено. ... То, что функция обозвана как sin(x) неверно, подтверждается тем, что вызов sin(2.71) и на Си, и на Паскале даёт одинаковый результат, примерно 0.415. Что и приводит по итогу к результату 42% вместо 91%. Но вот что это за функция в действительности, мне пока определить не удалось, сходу. |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 11 марта 2019 09:09 · Личное сообщение · #3 |
|
Создано: 11 марта 2019 09:48 · Поправил: dosprog · Личное сообщение · #4 |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 11 марта 2019 10:16 · Личное сообщение · #5 dosprog пишет: ..С этим их нестрандартным load действительно различаются,но по числам функи очень похожи Code:
Code:
RealMulNoChk == __RealAdd? |
|
Создано: 11 марта 2019 10:36 · Поправил: dosprog · Личное сообщение · #6 ELF_7719116 пишет: load действительно различаются,но по числам функи очень похожи Та константа это PI. Только и всего.. Так, наверное, и IDA пыталась опознавать эту функцию. ELF_7719116 пишет: RealMulNoChk == __RealAdd? Не.. RealMul это умножение.. Функции разные, однозначно. В стандартной RTL пытался искать что-то похожее, в том числе и по этим константам, но ничего похожего нет. .. Это был у паскальщиков в 90-х такой фетиш - подцепляли всякие самодельные RTL'ы. Считалось признаком определённой крутости, - но иногда потом эта крутость выливалась в непонятные глюки софта. |
|
Создано: 11 марта 2019 10:49 · Личное сообщение · #7 Begin WriteLn(Cos(2.71)); End. --------------- Borland Pascal Version 7.0 Copyright (c) 1983,92 Borland International -9.0830066636E-01 | Сообщение посчитали полезным: dosprog |
|
Создано: 11 марта 2019 11:03 · Поправил: dosprog · Личное сообщение · #8 |
eXeL@B —› Вопросы новичков —› Опознать стандартную функцию TurboPascal |
Эта тема закрыта. Ответы больше не принимаются. |