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

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

如果我做–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的外部符号.
而你正在寻找的只是剥夺那些的方法.

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

原文地址:https://www.jb51.cc/linux/394766.html

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

相关推荐