【发布时间】:2008-09-23 04:23:07
【问题描述】:
如何从 Win32 可执行文件(最好在 C# 中)中提取 RT_RCDATA 部分?
目前我知道如何做到这一点的唯一方法是在 Visual Studio 中打开 EXE。如果可能的话,我希望能够完全在 C# 中完成这项工作。
谢谢!
【问题讨论】:
标签: c# winapi resources pinvoke
如何从 Win32 可执行文件(最好在 C# 中)中提取 RT_RCDATA 部分?
目前我知道如何做到这一点的唯一方法是在 Visual Studio 中打开 EXE。如果可能的话,我希望能够完全在 C# 中完成这项工作。
谢谢!
【问题讨论】:
标签: c# winapi resources pinvoke
P/Invoke LoadResource 将是您最安全的选择。
否则您将不得不编写自己的P/E 处理器,例如。 PE Processor example。处理器不是世界末日,但正如您所看到的,它比 P/Invoke 涉及更多。
差点忘了,就工具而言,大多数 P/E 浏览器都会为您做到这一点。例如。 P/E Explorer,可用但尚未真正开发。我也用 IDA Pro 来处理这样的事情。一个快速的 IDA 插件会很容易做到这一点。
【讨论】:
我假设您正在尝试从可执行文件中读取 RCDATA 类型的资源(请注意,“可执行部分”的含义不同 - 它指的是 PE 的 .text、.data、.rdata 等部分文件)。如果您想从当前程序集中读取它,这里有一个教程展示了如何:Accessing Embedded Resources using GetManifestResourceStream,使用 GetManifestResourceNames 和 GetManifestResourceStream 方法。
如果您不想从当前可执行文件中读取它,可以使用类似于here 所示的方法。
与 PInvoke 相比,这些方法的优势在于它们是 100% .NET,您不必费心将参数编组到/来自平台数据类型并确保验证所有返回值。
【讨论】: