【问题标题】:Extract an RT_RCDATA section from a Win32 executable (preferably in C#)?从 Win32 可执行文件中提取 RT_RCDATA 部分(最好在 C# 中)?
【发布时间】:2008-09-23 04:23:07
【问题描述】:

如何从 Win32 可执行文件(最好在 C# 中)中提取 RT_RCDATA 部分?

目前我知道如何做到这一点的唯一方法是在 Visual Studio 中打开 EXE。如果可能的话,我希望能够完全在 C# 中完成这项工作。

谢谢!

【问题讨论】:

    标签: c# winapi resources pinvoke


    【解决方案1】:

    P/Invoke LoadResource 将是您最安全的选择。

    否则您将不得不编写自己的P/E 处理器,例如。 PE Processor example。处理器不是世界末日,但正如您所看到的,它比 P/Invoke 涉及更多。

    差点忘了,就工具而言,大多数 P/E 浏览器都会为您做到这一点。例如。 P/E Explorer,可用但尚未真正开发。我也用 IDA Pro 来处理这样的事情。一个快速的 IDA 插件会很容易做到这一点。

    【讨论】:

      【解决方案2】:

      我假设您正在尝试从可执行文件中读取 RCDATA 类型的资源(请注意,“可执行部分”的含义不同 - 它指的是 PE 的 .text、.data、.rdata 等部分文件)。如果您想从当前程序集中读取它,这里有一个教程展示了如何:Accessing Embedded Resources using GetManifestResourceStream,使用 GetManifestResourceNamesGetManifestResourceStream 方法。

      如果您不想从当前可执行文件中读取它,可以使用类似于here 所示的方法。

      与 PInvoke 相比,这些方法的优势在于它们是 100% .NET,您不必费心将参数编组到/来自平台数据类型并确保验证所有返回值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        相关资源
        最近更新 更多