【发布时间】: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