最近我试图在linux平台上编写一个简单的编译器。
当涉及到编译器的后端时,我决定不使用第三方库(如libelf
来生成ELF格式的二进制文件。
相反,我想尝试直接写入机器代码,通过使用write()
函数和ELF文件的所有细节来控制ELF ABI文件。
这种方法的优点是我可以控制我的编译器的一切。
但是我很犹豫。 考虑到ELF ABI的详细程度是否可行?
我希望有任何build议和指向良好的可用资源。
这是多么容易/可行取决于你想要支持的功能。 如果你想使用动态链接,你必须处理符号表,重定位等。当然,如果你想能够链接现有的库,甚至静态链接,你将不得不支持他们需要的任何东西。 但是如果你的目标是制作独立的静态ELF二进制文件,那真的很简单。 所有你需要的是一个主要的ELF头文件(100%样板文件)和2个PT_LOAD
程序头文件:一个载入你程序的代码段,另一个载入它的数据段。 理论上它们是可以组合的,但是安全性强的内核不允许给定的页面既是可写的也是可执行的,所以将它们分开是明智的。
一些建议阅读: