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

时间:2011-12-16 16:08:57

标签: delphi winapi resources

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

  

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

     

与TResourceStream的所有其他数据写入方法(WriteBuffer,   WriteComponent)调用Write来做实际的写操作,调用任何一个   TResourceStream的数据写入方法会引发异常。

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

1 个答案:

答案 0 :(得分:8)

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

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

请参阅Ok to use VirtualProtect to change resource in Delphi?有关此技术的信息(此处有关resourcestring,但可以在任何锁定的资源上使用相同的API)。