
您是否曾有过制作自己的私有二进制格式以在 Linux 中使用的冲动?也许您在编译项目时考虑过创建尽可能小的二进制文件,并对 ELF 格式的臃肿感到厌恶?如果您像 [Brian Raiter] 一样,那么这会让您掉入许多兔子洞,结论是,如果您想要时尚、精简的二进制文件,平面二进制格式是您的最佳选择。这些格式类似于 COM,许多人从 MS-DOS 中就知道了,但在 CP/M 时代就已经存在了。这里的“扁平”意味着整个二进制文件被加载到 RAM 中,没有任何麻烦或前戏。
尽管 Linux(尚)不支持这种二进制格式,但好消息是您可以通过实现 Linux 内核的 COM 支持来学习如何编写内核模块。在文章中,[Brian]带我们走进了这个COM兔子洞,其中涉及设置内核模块开发环境并探索如何实现二进制文件格式。对于那些研究过 Linux 内核如何处理shebang ( #!
) 和“misc”格式等问题的人来说,这将引导我们走过熟悉的道路。
在 Windows 上,内核通过扩展名识别 COM 文件,然后为其提供 640 kB 和一个中断表供使用。内核模块的作用几乎相同,但仍然涉及大量代码。
当然,这个特殊的兔子洞还不够深,因此 COM 格式被扩展到.
♚ (Unicode U+265A) 格式,因为现在是 2025 年,我们必须使用所有这些 Unicode 字形来实现某些目的。这种格式扩展允许令人惊奇的事情,例如完成执行后自动退出(例如崩溃)。
经过所有这些努力,我们不仅学会了如何编写内核模块并向 Linux 添加新的二进制文件格式,还学会了接受 Unicode 字形空间的丰富性,而不是继续受到 ASCII 的限制。所有这些都很好。
上图:[Brian Raiter] 调查他的劳动成果的插图,作者:[Bomberanian]
原文: https://hackaday.com/2025/04/13/learning-linux-kernel-modules-using-com-binary-support/