我正在使用TResourceStream
类来读取资源,知道我想修改内存中的资源,但上述类的Write方法的文档说:
应用程序不应使用TResourceStream来编写资源 正在运行的应用程序写入会覆盖继承的方法 应用程序尝试写入时引发EStreamError异常 应用程序的资源。
与TResourceStream的所有其他数据写入方法(WriteBuffer, WriteComponent)调用Write来做实际的写操作,调用任何一个 TResourceStream的数据写入方法会引发异常。
问题是,有没有办法使用任何WinApi函数修改正在运行的应用程序中的资源?或资源是否只读?
答案 0 :(得分:8)
资源只是指向内存中映射的某些可执行部分的指针。
因此,您可以使用VirtualProtectEx
更改此内存,就像修补代码的任何部分一样。
请参阅Ok to use VirtualProtect to change resource in Delphi?有关此技术的信息(此处有关resourcestring,但可以在任何锁定的资源上使用相同的API)。