Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как изменить значение вещественного числа в исполняемом файле Delphi 7 без перекомпиляции

Delphi , Программа и Интерфейс , Исследование программ

Вопрос, который стоит перед пользователем, заключается в изменении значения вещественного числа в уже скомпилированном исполняемом файле Delphi 7. В коде программы используется переменная типа Single, которая умножается на 0.9 в определенном месте. Задача состоит в том, чтобы изменить это значение на 0.8, не перекомпилируя проект, используя для этого hex-редактор.

Проблема

Программа на Windows, написанная на Delphi 7, содержит переменную типа Single, значение которой умножается на 0.9 при нажатии кнопки. Пользователь хочет изменить это значение на 0.9 * 0.8 = 0.72, не перекомпилируя большой проект с множеством зависимостей.

Исходный код

private myValue: Single;
...
procedure MyForm.ButtonClick(Sender: TObject);
begin
  if button.Down then
    myEditComponent.EditValue := Round(myValue * 0.9);
end;

Поиск значения в исполняемом файле

Используя hex-репрезентацию числа 0.9, равную 0x3F666666, пользователь пытается найти это значение в исполняемом файле, но безуспешно.

Предположения

  • 0.9 может быть представлено в исполняемом файле другим шестнадцатеричным числом.
  • Компилятор может использовать другой способ вычисления, например, myValue * 9 / 10.

Альтернативный ответ (попытка пользователя)

Пользователь рассматривает возможность использования компиляции и отладки в Delphi для получения информации о машинном коде, но не хочет тратить время на установку старых версий Delphi и регистрацию компонентов.

Подтвержденный ответ

Дробные литералы в Delphi 32-битной версии хранятся в формате 80-битных расширенных чисел. Значение 0.9 в этом формате будет выглядеть как 66 66 66 66 66 66 66 E6 FE 3F, а для 0.8 значение будет CD CC CC CC CC CC CC CC FE 3F.

Решение

  1. Откройте исполняемый файл в hex-редакторе.
  2. Найдите последовательность 66 66 66 66 66 66 66 E6 FE 3F.
  3. Замените её на CD CC CC CC CC CC CC CC FE 3F для изменения множителя на 0.8.
  4. Сохраните изменения и закройте hex-редактор.

Тестирование

После изменения значений в исполняемом файле, необходимо провести тестирование программы, чтобы убедиться, что изменения не привели к ошибкам в работе программы.


В данном случае, учитывая специфику формата хранения вещественных чисел в 32-битных версиях Delphi, мы можем точно определить, какие байты необходимо изменить для достижения желаемого результата. Это позволяет избежать необходимости перекомпиляции проекта, что может быть весьма утомительным и трудоемким процессом, особенно для больших проектов с множеством зависимостей.

Создано по материалам из источника по ссылке.

Вопрос пользователя заключается в изменении значения вещественной константы в уже скомпилированной программе на Delphi 7, используя hex-редактор для вставки нового численного значеиня, не затрагивая исходный код и не перекомпилируя проект.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Исследование программ ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 14:53:32/0.00559401512146/1