在内存

时间:2016-02-02 02:25:56

标签: memory stack reverse-engineering computer-forensics volatility

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

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

示例:

补丁前:

void func() {
    int a = 1;
}

补丁后:

void func() {
    int a = 2;
}

修补时,我们怎么知道堆栈中a的位置(或者堆栈中可能没有)?

1 个答案:

答案 0 :(得分:1)

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

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