在不使用libelf或其他库的情况下创建ELF二进制文件

时间:2012-05-21 04:50:11

标签: c linux compiler-construction elf

最近我试着自己在linux平台上编写一个简单的编译器。

当谈到编译器的后端时,我决定在不使用第三方库的情况下生成ELF格式的二进制文件,例如libelf

相反,我想尝试直接将机器代码编写到与ELF ABI相对应的文件中,只需使用write()函数并控制ELF文件的所有细节。

这种方法的优点是我可以控制编译器的所有内容。

但我犹豫不决。考虑到ELF ABI的详细程度,这种方式是否可行?

我希望有任何建议和指向可用的优质资源。

1 个答案:

答案 0 :(得分:5)

这有多容易/可行取决于您希望支持哪些功能。如果你想使用动态链接,你必须处理符号表,重定位等。当然,如果你想能够链接现有的库,甚至是静态库,你将不得不支持他们需要的任何东西。但如果你的目标只是制作独立的静态ELF二进制文件,那真的很容易。您只需要一个主ELF头(100%样板)和2个PT_LOAD程序头:一个用于加载程序的代码段,另一个用于加载其数据段。理论上它们可以组合在一起,但是安全加固的内核不允许给定的页面既可写又可执行,所以将它们分开是明智的。

有人建议阅读:

http://www.linuxjournal.com/article/1059