【问题标题】:Generating a PE format executable生成 PE 格式的可执行文件
【发布时间】:2014-02-07 12:02:11
【问题描述】:

我正在尝试生成一个 PE 格式的可执行文件;我正处于一个让 dumpbin 满意的阶段,据我所知,它与与微软链接器链接的空程序没有本质区别,但 Windows 仍然拒绝它:PE file - what's missing?

如果我有一些生成有效 PE 文件的算法,也许我可以从那里爬山。以下是我目前发现的:

  • 有大量文档、示例代码和工具用于阅读 PE 文件,而不是从头开始生成。

  • PE Bliss 在其功能中列出了生成,但不会编译。

  • 用于 PE 文件生成的示例汇编语言模板专注于最小化大小。最有希望的文件会生成一个被 Windows 拒绝的文件,尽管据我所知它应该被接受;具有讽刺意味的是,我发现确实有效的文件生成了一个 Windows 接受的文件,尽管据我所知它应该被拒绝,因为几乎每个名义上的重要组件都丢失或格式错误。

是否有任何示例代码可以生成正确的 PE 文件?

【问题讨论】:

  • “有大量的文档、示例代码和工具用于读取 PE 文件,而不是从头开始生成它们。” 我不这么认为。编译器和链接器必须知道这一点才能生成 PE 可执行文件。
  • @m0skit0 所以他们必须这样做。另一方面,他们通常不附带有关如何执行此操作的文档,因此作为后备,我可以 git-clone 一个 MLOC 规模的程序并开始删除内容,直到我有一个最小的正确解决方案,我想我我希望事情变得更容易:)
  • 我很确定 GCC(或任何开源项目)必须有一些关于它的文档;)
  • 我很久以前写了一个高级 x86 汇编器,其中还包括一个 PE 链接器。二进制文件和源代码可在here 获得。有趣的部分将在 src/nqa.ex 中(用于生成导入/导出/重定位表和所有标题的函数)。尽管它是用一种有些晦涩难懂的语言编写的,但对于了解 C/C++/Java 的人来说仍然应该可以理解。

标签: windows assembly portable-executable


【解决方案1】:

这是关于从头开始生成 PE 的经典页面:

http://www.phreedom.org/research/tinype

关于必需/可选部分的通用列表,请参阅 PE 格式的 corkami 页面:

http://code.google.com/p/corkami/wiki/PE

另请参阅代码树,了解许多完全从头开始生成的小型 PE 文件示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2014-09-25
    • 2016-05-28
    • 1970-01-01
    • 2010-10-07
    • 2011-02-24
    相关资源
    最近更新 更多