我正在尝试修补 Windows x86 DLL 中的一个函数,但是结果证明我需要一个静态变量来存储某些状态,而这些状态在调用中未被原始可执行文件正确保留。
我知道通常静态变量存储在.data段中或.bss段中,以及 PE 文件头中SizeOf(Un)InitializedData。但是,我很难找出如何在 x86 程序集中写入添加空间的地址。基本上,我假设它类似于mov eax, dword ptr ds:[??],但我不知道??我应该在那里放什么。
另一种方法是破解并重新使用.data段内的一些希望实际上没有使用的内存区域。我试图通过查看Memory layout选项卡x32dbg并找到.data加载的 DLL的段地址,然后获取接近末尾某处的地址来做到这一点。这种方法将工作秒,内存确实是书面的,但该计划不久之后崩溃由于一些例外RtlFreeHeap(),这我也感到困惑,因为我认为它的.data部分,而不是堆。
有人可以帮助我了解如何做到这一点吗?