c - 从exe文件中确定变量的值

标签 c programming-languages executable reverse-engineering exe

假设我有一个打印变量值的程序。让我们将该变量称为“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/

相关文章:

c - C 中的链表

c++ - C 中的 main() 方法是如何工作的?

programming-languages - C++ 的替代语言?

programming-languages - 为什么变量名中不允许使用特殊字符?

c - Visual Studio : Different Size in Memory for same executable in XP and Windows7

debugging - OllyDbg 可以跟踪启动的 exe 吗?

c 从文件读取输入时修剪换行符

c - 如何使用 GCC 自动矢量化跨步写入?

programming-languages - 为什么禁止嵌套评论?

java - 从 JFrame (linux) (eclipse) 运行可执行文件