2010-04-12 35 views
8

我在寻找能够在一种编程语言从输入程序创建的Win32程序的编译器的源代码(这并不重要,也许是越简单越好)实例编译器

然而,我可以我找不到任何适合自己的东西,像GCC这样的大型编译器让我非常困惑,因为它们有很多功能,我不知道从哪里开始。

  • 是否有一个开源的Win32微编译器,用于某些编程语言,我可以看一看吗?
+3

看看这个问题:http://stackoverflow.com/ questions/1669/learn-to-write-a-compiler – 2010-04-12 17:27:14

+0

这是一本书的清单。 – saf 2010-04-12 17:36:26

+0

其实我正在为我的Win32平台的语言开发一个编译器。我建议您阅读PE头文件,并获取用于实现操作码的x86 Intel参考手册的副本。然后,您应该创建一些“抽象”执行层,并使用此模型来创建处理器状态的预测以生成有效的程序集。 – Pindatjuh 2010-04-12 17:55:48

回答

4

http://en.wikipedia.org/wiki/List_of_compilers选择那些与许可证类型“开源”

+0

这些是不帮我的编译器。您如何期望我通过一万行代码来挖掘基本知识? – saf 2010-04-12 17:34:57

+0

你认为编译器的编号小于10的编译器吗?我有一种感觉,没有。 – Andrey 2010-04-12 17:42:21

+0

有很多这样的编译器。如果取消复杂的语法和优化,编译器确实不那么复杂。当然,像这样的编译器对于实际编码工作并不有用,但对于了解编译器工作原理的基础知识来说是理想的。 – 2010-04-12 17:53:29

0
gas

可以将汇编语言转换为目标代码,其可以ld然后用合适的运行时链接到生成的程序。

+3

这两者都不是编译器。 – WhirlWind 2010-04-12 17:18:21

+0

与WhirlWind达成一致。 – Kawa 2010-04-12 17:23:22

+0

根据定义,汇编器是一种编译器。 Upvoted与downvoters分歧。 是的,如果你正在实现一个编译器,你不应该对PE文件格式感到困扰 - 这不是编译器的工作,而是连接器的工作。 – 2010-04-13 08:56:18

2

我会建议拿起编译器的教科书。他们解释了编译器的所有必需组件,并且通常从头到尾开发一个编译器。

我从我的编译器课程拥有Modern Compiler Implementation in Java的副本,我对此很满意。

0

如果您的目标是了解编译器如何工作和/或如何编码,那么您应该阅读关于此主题的书籍。但是,在查找源代码示例时,请尝试Pascal编译器样本,如this one

帕斯卡有一个有点简单的语法,并在许多书中实现。

0

最简单的编程语言是Assembly,x86-assembly。最着名的汇编程序NASM是开源的;你可以看看它的源:

http://repo.or.cz/w/nasm.git

NASM具有宏的这确实是“编译”成汇编语句。虽然它不是一门完全成熟的语言,但它专注于基础知识。

0

我会建议寻找一个Pascal,C或SmallC MS-DOS(16位)的编译器源代码。特别是如果他们将自己限制为16位平实模式(< = 64KB内存模式),它们应该相当简单。

对分段实模式的支持增加了很大的复杂度,这是最好避免的,而且对于32位平面保护模式程序(非OS 32位编程)来说是不相关的。

对于非x86处理器,Jack Crenshaw系列文章“Let's Build a Compiler”的示例程序是针对Motorola MC68000 16/32位处理器的类似Pascal的语法编译器。还有Marcel Hendrix在win32 version of the series上写的Forth。

还有TCC - 支持PE-i386输出(即Win32)的Tiny C编译器。

虽然如果你无法阅读Firas Assaad在评论中给出的整个SO链接,其中包含除这些链接之外的所有链接,我相信你会发现编译器的源代码非常长。

2

你想了解如何建立一个编译器,或者你想了解一个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.aspxhttp://msdn.microsoft.com/en-us/magazine/cc301808.aspx