将自己的变量放入现有的Windows可执行文件中
我在修改一个已有Windows应用的行为,需要把我自己的变量放在某处。这个变量是在一个子例程中计算出来的,之后应该可以被另一个子例程访问。这意味着它需要一个已知的地址。有人能给出把这个变量放在哪里的建议吗?用你自己的代码没问题——我已经把它放进了一个代码洞穴里。但对变量我就不确定了。作为一个选项,我也可以尝试把它放在同一个代码洞穴中,但那需要使用VirtualProtect为所需的地址空间提供写入权限,我也不确定这是不是一个好主意。也许有更聪明的做法?
解决方案
通常,最好的办法是在数据段或bss段中寻找未使用的位置。通常在该段末尾到达页边界之间会有填充,你可以利用它。
如果你真的走投无路,你也可以使用一个环境变量或你自己的 命名共享内存区段,你每次都重新映射,但这两种方式都带来较大的开销。通常应当可以在数据段或bss段中找到8 字节,用于存储指向你分配的内存的指针。
另一种方法是在代码洞穴中分配内存,然后把它的指针存放在一个已知的位置——仅此一次——但始终不设置读/写/执行权限。相反,你在 GetCurrentProcess 上调用 WriteProcessMemory,这绕过了保护,但开销很大(只是因为你只需要执行一次,应该没问题)。在初始分配和写入操作完成后,你就可以定期读取该指针,并按需要使用你分配的内存。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。