6

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

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

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

这种方法的优点是我可以为我的编译器控制一切。

但我在犹豫。考虑到 ELF ABI 的详细程度,这种方式可行吗?

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

4

1 回答 1

7

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

一些建议阅读:

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

于 2012-05-21T05:09:42.773 回答