Linux 内核对象文件(.ko)是否有结构?

Does Linux Kernel Object file(. ko) has structure?

我有一个linux内核模块,它有防篡改机制。

当 insmod 模块时,在其初始化函数中检查模块的完整性。

为了测试这个机制,我稍微改变了内核模块的二进制文件。

用于指定此作业。更改的内容是模块文件的某个偏移量的 2 个字节。 (00 02 -> 02 00 十六进制表示)

然后我 insmod 被篡改的模块,我收到 killed 消息并发生内核 oops。

dmesg 表示无法处理 ffffc900209aa7d1 的内核分页请求。 添加它的最后一个调用跟踪过程是 find_symbol_in_section+0x39/0xda.

我猜想模块的地址或与 insmod 进程相关的某些值已更改并导致内核 oops。

所以我认为让我了解有关内核对象文件结构的信息会很有帮助。

根据man page for init_module(2) Linux kernel modules use the ELF file format. You can use a utility like objdump(1) or readelf(1)从中获取读取信息。