如何手动创建可执行的.exe PE文件?

App*_*rew 21 windows compiler-construction linker executable portable-executable

在解释词法分析器和解析器之后,关于如何创建编译器的所有文本都会停止.他们没有解释如何创建机器代码.我想了解端到端流程.

目前我的理解是,Windows exe文件格式称为Portable Executable.我读到了它的标题,我还没有找到一个可以轻松解释这个问题的资源.

我的下一个问题是,我没有看到任何解释机器代码如何存储在文件中的资源.是否像32位固定长度指令一样接一个地存储在该.text部分?

有没有地方至少解释如何创建一个什么都不做的exe文件(它有一个No Op指令).然后我的下一步是链接到dll文件以打印到控制台.

zen*_*ngr 9

好问题!我对这个具体问题没有太多专业知识,但这就是我的开始:

  1. PE或ELF不会创建纯机器代码.它还包含一些标题信息等.阅读更多:将自定义数据写入Windows和Linux中的可执行文件

  2. 我假设您正在寻找ELF/PE文件如何保存机器代码,您可以从这个问题中获得(使用objdump):如何仅提取ELF部分的内容

  3. 现在,如果您想知道如何首先生成内容部分,即如何生成机器代码,那么这就是编译器代码生成的任务.

  4. 尝试使用像ResourceEditor这样的资源编辑器来理解exe或者只是ildasm.

PS:这些主要是Unix解决方案,但我确信,PE应该做一些基本相似的事情.

我认为最好的方法是首先尝试分析现有的PE/ELF如何工作,基本上是逆向工程.要做到这一点,Unix机器将是一个很好的起点.然后做你的魔术:)

不一样,但这里有类似的问题.

更新:

我从示例c代码生成了一个对象转储.现在,我认为你的目标正确吗?您需要知道生成此文件(a.out)吗?

https://gist.github.com/1329947

看看这张图片,一段交响代码的续航时间.

在此输入图像描述

Source Now,为了清楚起见,您正在寻求实现最后一步,即将目标代码转换为可执行代码?