我正在寻找一个编译器的源代码,它能够从一个编程语言的输入程序中创建Win32程序(不管是哪种语言,也许越简单越好)。
但是我找不到适合我的东西,像GCC这样的大型编译器让我感到非常困惑,因为它们拥有很多功能,我不知道从哪里开始。
- 是否有开源的Win32微型编译器可以供我参考?
我正在寻找一个编译器的源代码,它能够从一个编程语言的输入程序中创建Win32程序(不管是哪种语言,也许越简单越好)。
但是我找不到适合我的东西,像GCC这样的大型编译器让我感到非常困惑,因为它们拥有很多功能,我不知道从哪里开始。
http://en.wikipedia.org/wiki/List_of_compilers 选择开源许可证类型的编译器。
你是想了解如何构建编译器,还是想了解Win32可执行文件的内部结构?
如果是前者,阅读关于如何创建编译器的书籍将比尝试逆向工程源代码更有效。编译器与您以往见过的任何东西都不同,有作者引导您了解原理、常用技术和工具会非常有帮助。值得指出的是,编译器是分阶段构建的,只有在实现的后期才需要了解目标CPU和操作系统。如果您是编译器构建新手,则需要学习很多内容,才能到达那个阶段。
然而,如果您想了解Win32可执行文件的格式,则需要了解x86(或x64)汇编代码和便携式执行(PE)文件格式(Windows用于可执行文件)。对于x86汇编代码的介绍,我建议阅读Paul Carter博士的优秀免费电子书“PC Assembly Language” http://www.drpaulcarter.com/pcasm/,对于PE,我建议从这里开始 http://msdn.microsoft.com/en-us/magazine/cc301805.aspx 和 http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
最简单的编程语言是汇编语言,具体来说是x86汇编语言。最著名的汇编器NASM是开源的,您可以在此处查看它的源代码:
NASM有宏,这些宏确实被“编译”成汇编语句。虽然它不是一个完整的语言,但它专注于基础知识。
我建议寻找适用于 MS-DOS(16 位)的 Pascal、C 或SmallC编译器源代码。特别是如果它们限制自己在 16 位平面实模式(≤64KB 存储器模式)内,它们应该相当简单。
支持分段实模式会增加很多复杂性,最好避免使用,对于非操作系统的 32 位平面保护模式程序无关紧要。
对于非 x86 处理器,Jack Crenshaw 的文章系列 "Let's Build a Compiler" 中的示例程序是一种类 Pascal 语法编译器,针对 Motorola MC68000 16/32 位处理器。还有 Marcel Hendrix 在 win32 上用 Forth 编写的 版本。
还有TCC - Tiny C Compiler,支持 PE-i386 输出(即 Win32)。
虽然如果您不想读Firas Assaad在评论中提供的整个SO链接,该链接包含了除了一个之外的所有这些链接,我相信您会发现编译器的源代码非常长。