在内存中找到 stack/heap 个变量

Locate stack/heap variables in memory

我目前正在尝试热补丁程序(根据发布的补丁更新程序内存中的代码和数据)。

假设我们可以停止一个运行程序,然后打补丁。如果补丁更改了一些数据初始化或赋值,我们怎么知道变量在哪里,比如堆栈或堆中的变量?


示例:

补丁前:

void func() {
    int a = 1;
}

补丁后:

void func() {
    int a = 2;
}

打补丁的时候,怎么知道a在栈中的位置(或者可能不在栈中)?

除非您非常了解编译器的工作原理,否则您无法先验地知道这些变量的存储位置,甚至它们的表示方式。每个编译器设计者都制定了自己的 how/where 变量存储规则。

您或许可以通过检查生成的代码找出特定的编译程序。