大家熟知的ELF文件有三种类型:1. 可重定位,2 可执行,3. 动态链接。关于ELF的相关资料网上很多,也讲的十分详细。
在此给出一个链接的细节说明。
一般的Linux的驱动模块编译出来的*.ko文件其实就是可重定位的文件,其格式和一般Use mode编译的*.o相似,
这一点大家可以自己去尝试下,使用readelf -h * 读取下头部即可。
但是整个insmod ×.ko的过程和×.o 的过程存在差异:
*.o的静态链接之后,找到相关的符号,并修改的符号的地址,
而insmod ×ko的使用方式其实类似于*so, 通过了×plt,got 段做了地址的偏移。
ARM有一个trace的模块叫gator,大家可以尝试对应地址和符号的位置。
就讲到这里,希望对读者有帮助。