在内存中找到 stack/heap 个变量
Locate stack/heap variables in memory
我目前正在尝试热补丁程序(根据发布的补丁更新程序内存中的代码和数据)。
假设我们可以停止一个运行程序,然后打补丁。如果补丁更改了一些数据初始化或赋值,我们怎么知道变量在哪里,比如堆栈或堆中的变量?
示例:
补丁前:
void func() {
int a = 1;
}
补丁后:
void func() {
int a = 2;
}
打补丁的时候,怎么知道a
在栈中的位置(或者可能不在栈中)?
除非您非常了解编译器的工作原理,否则您无法先验地知道这些变量的存储位置,甚至它们的表示方式。每个编译器设计者都制定了自己的 how/where 变量存储规则。
您或许可以通过检查生成的代码找出特定的编译程序。
我目前正在尝试热补丁程序(根据发布的补丁更新程序内存中的代码和数据)。
假设我们可以停止一个运行程序,然后打补丁。如果补丁更改了一些数据初始化或赋值,我们怎么知道变量在哪里,比如堆栈或堆中的变量?
示例:
补丁前:
void func() {
int a = 1;
}
补丁后:
void func() {
int a = 2;
}
打补丁的时候,怎么知道a
在栈中的位置(或者可能不在栈中)?
除非您非常了解编译器的工作原理,否则您无法先验地知道这些变量的存储位置,甚至它们的表示方式。每个编译器设计者都制定了自己的 how/where 变量存储规则。
您或许可以通过检查生成的代码找出特定的编译程序。