【发布时间】:2025-12-27 04:20:22
【问题描述】:
我目前正在尝试对程序进行热补丁(根据已发布的补丁更新程序内存中的代码和数据)。
假设我们可以停止一个正在运行的程序,然后打补丁。如果补丁改变了一些数据初始化或赋值,我们怎么知道变量在哪里,比如堆栈或堆中的变量?
例子:
补丁前:
void func() {
int a = 1;
}
补丁后:
void func() {
int a = 2;
}
在打补丁的时候,我们怎么知道a在堆栈中的位置(或者可能不在堆栈中)?
【问题讨论】:
-
我建议你在这种情况下修补初始化指令;在堆栈中定位变量是不可靠的(依赖于编译器;还有一些优化可以使事情更难处理)。这种解决方案可以接受吗?
标签: memory stack reverse-engineering computer-forensics volatility