是否可以修改已加载的资源?

Sal*_*dor 4 delphi resources winapi

我正在使用TResourceStream类来读取资源,知道我想修改内存中的资源,但上面类的Write方法的文档说:

应用程序不应使用TResourceStream来编写正在运行的应用程序的资源.当应用程序尝试写入应用程序的资源时,Write会覆盖继承的方法以引发EStreamError异常.

由于TResourceStream(WriteBuffer,WriteComponent)的所有其他数据写入方法都调用Write来进行实际写入,因此调用TResourceStream的任何数据写入方法都会引发异常.

问题是,有没有办法使用任何WinApi函数修改正在运行的应用程序中的资源?或者资源是否只读?

Arn*_*hez 8

资源只是指向映射到内存中的某些可执行部分的指针.

因此,您可以通过使用来更改此内存VirtualProtectEx,就像您可以修补代码的任何部分一样.

请参阅Ok以使用VirtualProtect更改Delphi中的资源?关于这个技术(这里关于resourcestring,但可以在任何锁定的资源上使用相同的API).