Определение значения переменной из exe-файла - PullRequest
1 голос
/ 17 января 2011

Учтите, что у меня есть программа, которая печатает значение переменной. Позволяет обозначить эту переменную как «я». Двоичный файл имеет формат .exe. Как определить значение «i», а также понять, что конкретное значение имеет переменную «i» из формата «.exe»?

1 Ответ

4 голосов
/ 17 января 2011

Это зависит от того, является ли переменная локальной или глобальной. Если это глобально, то с правильными инструментами это довольно просто (я не могу рекомендовать какие-то конкретные, так как использую Linux). Вы просто найдете местоположение символа «i» в таблице символов, и это покажет вам , где «i» находится . Если вы хотите узнать, какое значение оно содержит, вы можете видеть только его начальное значение, но не его значение во время выполнения (очевидно, потому что вы смотрите на исполняемый файл, а не на работающий образ программы ). Если он не инициализирован, то вы не можете увидеть его начальное значение; в противном случае его начальное значение, вероятно, будет видно в инструменте рядом с его местоположением (возможно, в шестнадцатеричном формате, поэтому вам придется его декодировать).

Теперь, если это локальная переменная, тогда это другая история. У переменной вообще не будет имени, так как имена локальных переменных теряются при компиляции программ. Он просто (возможно) будет занимать позицию в стеке во время выполнения этой функции. Например, первая переменная часто находится в -8(%ebp), вторая в -12(%ebp) и т. Д. (-4(%ebp) и 0(%ebp) являются специальными). Поэтому, если вы ищете в исполняемом коде исполняемый файл, скорее всего, -8(%ebp) будет ссылаться на первую локальную переменную в функции. Опять же, вы не можете знать, какое это имеет значение, потому что вы статично смотрите на exe. И все это зависит от того, какой компилятор использовался и какой уровень оптимизации был установлен.

Извините, что не дал никаких конкретных инструментов. Я предполагаю, что у вас есть доступ к некоторым инструментам декомпиляции, которые покажут вам код ассемблера и таблицы символов.

...