从exe文件中确定变量的值

Kar*_*uru 1 c executable programming-languages exe reverse-engineering

考虑我有一个打印变量值的程序。让我们将该变量称为“i”。二进制文件为“.exe”格式。如何确定“i”的值并了解该特定值是“.exe”格式中变量“i”的值?

mgi*_*uca 5

这取决于变量是局部变量还是全局变量。如果它是全局的,那么使用正确的工具就很容易了(因为我使用 Linux,所以我不能推荐任何特定的工具)。您只需在符号表中找到符号“i”的位置,即可显示“i”所在的位置。如果你想知道它包含什么值,那么,你只能看到它的初始值,而看不到它运行时的值(显然,因为你正在查看exe文件,而不是程序的运行映像)。如果它没有初始化,那么你就看不到它的初始值;否则它的初始值将有望在值位置旁边的工具中可见(可能是十六进制,因此您必须对其进行解码)。

现在,如果它是局部变量,那么情况就不同了。该变量根本没有名称,因为编译程序时局部变量名称会丢失。在该函数执行期间,它只会(可能)占据堆栈上的一个位置。例如,第一个变量通常位于-8(%ebp),第二个变量通常位于-12(%ebp),等等(-4(%ebp)0(%ebp)是特殊的)。因此,如果您正在查找 exe 的汇编代码,很可能-8(%ebp)会引用函数中的第一个局部变量。同样,您无法知道它有什么价值,因为您静态地查看该 exe。所有这些都取决于使用的编译器以及它设置的优化级别。

抱歉没有提供任何具体工具。我假设您可以访问一些反编译工具,这些工具将向您显示汇编代码和符号表。