【发布时间】:2012-08-22 13:55:43
【问题描述】:
我接触过许多编程语言。他们每个人都有自己的魅力,但也有一些我不喜欢的东西。因此,我正在设计自己的编程语言,并简单地用其他语言实现我喜欢的东西。
在进行了一些研究(虽然主要是推测)之后,我相信我对处理器和操作系统的工作原理有所了解。我设法制作了一个解释器,它以我使用指令指针和一些(虚拟)寄存器制作的自定义格式读取和解释指令,并且目前一直在将代码编译为该格式。
但是,这对我来说似乎很愚蠢,因为我的编译器现在生成一个二进制文件来生成二进制文件并解释它,然后再解释它。虽然目前的做法确实有一些好处(例如只编译一次并且能够几乎在任何地方运行它),但我很好奇在制作实际生成代码的编译器时从哪里开始操作系统可以读取。
我听说过一些关于 PE 和 ELF 的事情,但一直没能找到任何在低级别描述这些格式的东西。大多数事情似乎都是关于它用来做各种事情的伟大概念,但似乎没有什么可以以可理解的方式构造,例如首先是 16 位 ...,然后是 20 位 ...,然后28 of ...,然后是重定位表,然后是一些指令,其中...表示...等。
另外,我使用 C++。
【问题讨论】:
-
您是否阅读过有关 elf 的 Wikipedia 页面(首先在 google 上为 linux elf 热门)以及缺少哪些详细信息,包括其包含多个规范的链接?
-
不要气馁,但如果您要设计一种新的编程语言,您最不需要担心的就是可执行格式,因为这些是由汇编程序等低级工具处理的链接器。检查 LLVM,它可以让您在生成可执行文件方面走得更远。
-
“ELF 规范”的首次点击:skyfree.org/linux/references/ELF_Format.pdf
-
如果您要选择编译后的可执行路径,请再投给 LLVM。您还可以考虑将 JVM(如果您更关注静态语言)或 Parrot VM(用于动态)作为运行中间代码的更可移植的方式,因为这两个平台都有合理的文档记录并且适合使用您自己的语言作为目标.
标签: c++ compiler-construction format executable