微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为不同的 linux 内核编译一个 linux 内核模块

如何解决如何为不同的 linux 内核编译一个 linux 内核模块

我对内核编程有点陌生,但几天来我一直在为这个问题苦苦挣扎。我有一台带有 linux 内核 '5.10.0-kali7-amd64' 的机器,我用它来开发 Ubutnu 16.04.4 '4.4.0-119-generic' 的 linux 内核模块,但我想不出任何我可以在我的机器上为那个版本编译它并让它在 4.4.0 内核机器上实际工作的方式。

我得到的最接近的是这个:

  1. 我从 https://launchpad.net/ubuntu/xenial/+package/linux-headers-4.4.0-119 下载了源代码 并与 dpkg 一起安装
  2. 然后我从 https://www.ubuntuupdates.org/package/core/xenial/main/updates/linux-image-4.4.0-119-generic
  3. 下载并安装了 4.4.0-119-generic
  4. 它们都安装没有问题。
  5. 我在我的 Makefile make -C /lib/modules/4.4.0-119-generic/build M=$(PWD) modules 中使用编译了我的模块,它也可以工作并编译了我的 hello world 模块。

然而,当上传到 4.4.0 机器时,insmod 错误地说 insmod: ERROR: Could not insert module rootkitMy.ko: Invalid module format。 dmesg 说:module: rootkit: UnkNown rela relocation: 4 然后我在 4.4.0 机器上编译了我的源代码,并创建了一个与 modinfo 完全相同的模块,但那个模块确实有效。 这是两者的 modinfo:

filename:       /rootkit.ko
version:        0.01
description:    Rootkit hook
author:         Bl4ckC4t
license:        GPL
srcversion:     46604268C8D1B7FA5115CB4
depends:        
vermagic:       4.4.0-119-generic SMP mod_unload modversions retpoline 



filename:       /rootkitMy.ko
version:        0.01
description:    Rootkit hook
author:         Bl4ckC4t
license:        GPL
srcversion:     46604268C8D1B7FA5115CB4
depends:        
vermagic:       4.4.0-119-generic SMP mod_unload modversions retpoline 

rootkitMy.ko 是在 5.10 机器上编译的,但无法运行,而 rootkit.ko 是在 4.4.0 机器上编译的,并且在注入 insmod 时可以正常工作来自我 5.10 机器的模块?

解决方法

我设法解决了这个问题。 Unknown rela relocation: 4 是由于内核处理 PLT 的方式发生变化而导致的 insmod 错误,更具体地说是 R_X86_64_PC32 和 R_X86_64_PLT32。 binutils >= 2.31 时,链接器决定使用 R_X86_64_PLT32 重定位,旧内核不支持这种重定位。

要解决此问题:

  1. 我从 https://ftp.gnu.org/gnu/binutils/
  2. 下载了旧版本的 binutils (2.26.1)
  3. 从存档中提取文件夹
  4. 通过运行将 binutils 编译到 /usr/local/binutils-2.6
./configure --prefix=/usr/local/binutils-2.6
make
sudo make install
  1. 将新的 binutils 导出到我的路径并重新编译我的模块 export PATH=/usr/local/binutils-2.6/bin:$PATH

现在它起作用了!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。