我正在寻找能够从编程语言中的输入程序创建 Win32 程序的编译器的源代码(哪个没关系,也许越简单越好)
然而我找不到任何适合我的东西,像 GCC 这样的大型编译器让我非常困惑,因为它们有很多功能,我不知道从哪里开始。
- 是否有针对某些编程语言的 OpenSource Win32 微编译器,我可以看看吗?
我正在寻找能够从编程语言中的输入程序创建 Win32 程序的编译器的源代码(哪个没关系,也许越简单越好)
然而我找不到任何适合我的东西,像 GCC 这样的大型编译器让我非常困惑,因为它们有很多功能,我不知道从哪里开始。
http://en.wikipedia.org/wiki/List_of_compilers选择了许可类型为“开源”的
我建议拿起一本编译器教科书。他们解释了编译器的所有必需组件,并且通常从头到尾开发编译器。
我从我的编译器课程中获得了 Java中的现代编译器实现的副本,我对此感到非常满意。
您是想了解如何构建编译器,还是想了解 Win32 可执行文件在内部的样子?
如果是前者,那么阅读有关如何创建编译器的书将比尝试对源代码进行逆向工程更有效。编译器与您所见过的任何东西都不一样,让作者带您了解所使用的原理、常用技术和工具真的很有帮助。还值得指出的是,编译器是分阶段构建的,只有在实现接近尾声时,您才需要了解您所针对的 CPU 和操作系统。如果您是编译器构造的新手,那么在进入该阶段之前您需要学习很多东西。
但是,如果您想了解 Win32 可执行文件的格式,则需要了解 x86(或 x64)汇编代码和可移植执行 (PE) 文件格式(Windows 将其用于可执行文件)。对于 x86 汇编代码的介绍,我推荐 Paul Carter 博士出色的“PC 汇编语言”免费电子书http://www.drpaulcarter.com/pcasm/,对于 PE,我将从http://msdn.microsoft 开始。 com/en-us/magazine/cc301805.aspx和http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
如果您的目标是了解编译器如何工作和/或如何编码,那么您真的应该阅读有关该主题的书。但是,在查找源代码示例时,请尝试类似这样的Pascal 编译器示例。
Pascal 的语法有点简单,在很多书中都有实现。
我建议为 MS-DOS(16 位)寻找 Pascal、C 或SmallC编译器源代码。特别是如果它们将自己限制为 16 位平面实模式(<= 64KB 内存模式),它们应该相当简单。
对分段实模式的支持增加了最好避免的大量复杂性,并且与 32 位平面保护模式程序(非 OS 32 位编程)无关。
对于非 x86 处理器,Jack Crenshaw 的系列文章“让我们构建一个编译器”的示例程序是针对摩托罗拉 MC68000 16/32 位处理器的类似 Pascal 的语法编译器。还有 Marcel Hendrix 用 Forth 写的关于 win32版本的系列。
还有TCC - Tiny C 编译器,它支持 PE-i386 输出(即 Win32)。
尽管如果您懒得阅读 Firas Assaad 在评论中给出的整个 SO 链接,其中包含除其中一个之外的所有链接,我相信您会发现编译器的源代码非常长。
最简单的编程语言是汇编,准确地说是 x86 汇编。最著名的汇编器 NASM 是开源的;您可以在以下位置查看它的来源:
NASM 具有确实“编译”成汇编语句的宏。虽然它不是一门成熟的语言,但它专注于基础知识。