假设我有一个打印变量值的程序。让我们将该变量称为“i”。二进制文件为“.exe”格式。如何确定'i'的值并理解特定值是'.exe'格式的变量'i'?
最佳答案
这取决于变量是局部变量还是全局变量。如果它是全局的,那么使用正确的工具就很容易了(我不能推荐任何特定的工具,因为我使用的是 Linux)。您只需在符号表中找到符号“i”的位置,它就会告诉您“i”所在的位置。如果你想知道它包含什么值,那么,你只能看到它的初始值,而不是它在运行时的值(显然,因为你正在查看 exe 文件,而不是运行图像程序)。如果它是未初始化的,那么你就看不到它的初始值;否则它的初始值有望在值位置旁边的工具中可见(可能是十六进制,因此您必须对其进行解码)。
现在,如果它是一个本地 变量,那就是另一回事了。该变量根本没有名称,因为编译程序时局部变量名称会丢失。在该函数执行期间,它只会(可能)占据堆栈上的一个位置。例如,第一个变量通常位于-8(%ebp)
,第二个变量位于-12(%ebp)
,等等(-4( %ebp)
和 0(%ebp)
是特殊的)。因此,如果您正在查看 exe 的汇编代码,-8(%ebp)
很可能会引用函数中的第一个局部变量。同样,您无法知道它有什么值(value),因为您正在静态查看 exe。所有这一切都取决于使用的编译器,以及它设置的优化级别。
很抱歉没有给出具体的工具。我假设您可以访问一些反编译工具,它将向您显示汇编代码和符号表。
关于c - 从exe文件中确定变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4711240/