目前我知道如何执行此操作的唯一方法是在 Visual Studio 中打开 EXE。如果可能的话,我希望能够完全用 C# 来完成此操作。其他选项包括:

  • 从 Win32 API P/调用 LoadResource()
  • 使用现有工具(有人知道吗?)
  • 还有其他想法吗?

谢谢!

有帮助吗?

解决方案

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

否则你就必须自己写 市盈率 处理器例如。 PE 处理器示例. 。处理器并不是世界末日,但正如您所看到的,它比 P/Invoke 涉及的更多。

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

其他提示

我假设您正在尝试从可执行文件中读取 RCDATA 类型的资源(请注意,“可执行部分”意味着不同的东西 - 它指的是 PE 文件的 .text、.data、.rdata 等部分)。如果您想从当前程序集中读取它,这里有一个教程,展示了如何操作: 使用 GetManifestResourceStream 访问嵌入式资源, , 使用 获取清单资源名称获取清单资源流 方法。

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

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

有一个非常有帮助的 用于许多资源任务的库http://resourcelib.codeplex.com

许多类和函数确实包装了这些 window-api-calls UpdateResource(...), , ETC。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top