如果我做–strip-debug或–strip-unneeded,我有.ko列出所有带有nm的函数名,如果我只是去掉foo.ko我有一个拒绝加载的内核模块.
@H_502_7@解决方法
有没有人知道如何删除模块加载不需要的所有符号的快捷方式,以便人们无法对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的外部符号.
而你正在寻找的只是剥夺那些的方法.
这最后一段是否正确描述了你要摆脱的符号?