加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux-kernel – 如何在不破坏Linux内核模块的情况下剥离本地符

发布时间:2020-12-13 16:59:00 所属栏目:Linux 来源:网络整理
导读:如果我做–strip-debug或–strip-unneeded,我有.ko列出所有带有nm的函数名,如果我只是去掉foo.ko我有一个拒绝加载的内核模块. 有没有人知道如何删除模块加载不需要的所有符号的快捷方式,以便人们无法对API进行反向工程设计? PS:对于所有开源bigots传教士;
如果我做–strip-debug或–strip-unneeded,我有.ko列出所有带有nm的函数名,如果我只是去掉foo.ko我有一个拒绝加载的内核模块.

有没有人知道如何删除模块加载不需要的所有符号的快捷方式,以便人们无法对API进行反向工程设计?

PS:对于所有开源bigots传教士;这是一般公众在任何情况下都不会使用的东西,因此不需要将问题变成GPL火焰战争.

解决方法

由于没有回答我以前的问题,这里有一些猜测,也可能是一些线索,以及回答的一步:

根据我的记忆,.ko只不过是一个.o文件,它源于源模块生成的所有.o文件的合并,以及.modinfo部分的添加.
任何.ko构建Makefile的末尾都有一个LD调用:我记得,ld是用-r选项调用的,这就是创建Makefile调用.ko的.o文件的原因.这个结果文件不要与存档或对象库(.a文件)混淆,这只是一种格式存档/打包多个.o文件为一个:合并对象是一个链接的结果,产生另一个.o module:但是在结果模块中,所有可以合并的部分都是,并且可以解析的所有公共/外部对都在这些部分中.
所以我假设您最终得到包含所有“本地”外部定义的.ko文件:

>那些因为他们是外在的
用来调用.o
.ko中的模块(但不是
因为他们不需要,所以需要
应该从外面打电话
.ko),和
>那些.ko模块需要的
与装载机正确沟通
和内核.

在合并期间,前者很可能已经被ld解决了,但是ld无法知道你是否打算让它们也可以从.ko之外调用.

因此,您看到的无关符号是每个.o文件的外部符号,但不需要作为结果.ko的外部符号.
而你正在寻找的只是剥夺那些的方法.

这最后一段是否正确描述了你要摆脱的符号?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读