Linux kernel module symbols relocation

本文探讨了Linux内核模块如何处理对内核函数及其他模块函数的调用。通过readelf命令分析了.ko文件,指出在加载模块时,kernel的load_module函数及其相关子函数如simplify_symbols、apply_relocations等处理了符号重定位,确保模块能正确调用所需函数。在地址替换完成后,新加载的模块如同内置模块一样工作。
摘要由CSDN通过智能技术生成

尝试回答两个问题:

1. Module如何解决kernel的函数调用问题

2. Module如何解决使用到其它module的函数调用问题


*.ko是个ELF文件,本质上与跑在user space的APP一样. 从Module编译结果看起:

执行指令: readelf -a usb_wwan.ko,摘录部分与本主题有关系:

00002104  0001801c R_ARM_CALL        00000000   printk
0000210c  00018b1c R_ARM_CALL        00001014   usb_serial_get_by_inde

 与printk不一样, usb_serial_get_by_inde来自于usbserial.ko,但是二者在usb_wwan.ko并无值得关注的差别,也就是说此刻,usb_wwan.ko并没区分它所调用的函数来自于何方


那加载usb_wwan.ko的时候,kernel做了些什么事情呢?

load_module干的活太多,我们还是只关注relocation相关细节, simplify_symbols()完成了symbols的处理,看具体细节

load_module() --> simplify_symbols()

case SHN_UNDEF:
			ksym = resolve_symbol_wait(mod, info, name);
SHN_UNDEF处理了kernel及其他模块的符号,go on...

simplify_symbols() -->resolve_symbol_wait()-->resolve_symbol() -->find_symbol()-

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值