从exe文件中确定变量的值

时间:2011-01-17 08:29:07

标签: c programming-languages executable reverse-engineering exe

考虑一下,我有一个打印变量值的程序。让变量为“i”。二进制文件是'.exe'格式。如何确定'i'的值并且还理解特定值是'。''格式的变量'i'?

1 个答案:

答案 0 :(得分:4)

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

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

很抱歉不提供任何特定工具。我假设您已经访问了一些反编译工具,它们将显示汇编代码和符号表。