修改正在运行的可执行文件的资源内容

mrw*_*oik 2 c# c++ windows resources file

所有,

我将我的应用程序设置存储在资源中.当我的程序首次加载时,我使用WinAPI读取指定的资源.然后我解析检索到的字节数据.这对我来说完美无缺.

现在让我们说用户改变我的应用程序中的设置.他/她检查复选框控件.我想将更新的设置保存到我的资源中.但是,在我的应用程序运行时,似乎我对UpdateResource的调用无效.即使它的大小相同,我也无法修改我的资源数据.

首先,是否可以修改正在运行的图像的资源数据?其次,如果不可能,我有什么选择在我的应用程序内部存储设置?

注意:我必须在运行的可执行文件中设置.它们不能位于硬盘驱动器或注册表中.请不要建议作为一种选择.

小智 6

编写自修改代码是100%可能的.这不是很容易做到的.

当您启动可执行文件时,Windows会将其映射到内存中.这实际上会锁定文件并阻止在运行时进行编辑.显然,您可以取消映射您的程序(通过在ntdll中使用未记录的函数).取消映射文件后,您就可以对其进行更改.

这有点类似于你想要做的事:http://www.johnfindlay.plus.com/lcc-win32/asm/SelDelNT.htm

显然,您想要进行更改,而不是删除它.疯狂背后的想法是一样的 - 你必须取消映射文件.