KABI信息提取方法以及各自优劣对比

kabi 定义了内核与加载的模块(如驱动程序)之间的接口规范,在操作系统与硬件商的生态系统建设中,kabi信息比对则非常重要。我整理了一下自己在核内核外驱动kabi信息提取过程中使用的一些方法和总结,希望对刚接触kabi的朋友有帮助:

  1. 使用modprobe --dump /绝对路径/xxx.ko.xz命令
    modprobe是一个用于加载内核模块的工具,该命令可以打印模块加载时的行为,直接输出驱动文件(xxx.ko.xz)的kabi信息
    优点:用于查看核内驱动kabi信息比较方便,不需要对ko.xz文件解压,只需要知道该驱动文件路径即可,方便快捷
    缺点:获得的信息比较局限,不利于进行详细分析,尤其是分析核外驱动时

  2. 使用nm xxx.ko命令
    nm是一个底层的工具,用于查看目标文件中的符号信息,用于查看目标文件中的符号信息。
    显示的符号类型:
    A:该符号的值在今后的链接中将不再改变
    B:该符号放在BSS段中,通常是那些未初始化的全局变量
    D:该符号放在普通的数据段中,通常是那些已经初始化的全局变量
    d:该符号放在普通的数据段中,通常是那些未被初始化或者初始化为0的局部变量
    T:该符号位于代码段,通常是全局非静态函数(可执行的函数)。当一个函数呗标记为“T”时,这意味着它是模块内部定义的,并且可能被其他模块或内核调用,是模块导出的一部分
    t:该符号位于代码段,但是局部非静态函数,只在定义它的模块或文件内部可见,不对外部链接
    U:该符号未被定义,意味着它在其他地方定义,并且当前模块依赖于这个符号,需要自其他对象文件中链接进来。对于kabi分析而言,该符号表明了模块对外部定义的依赖
    W:未明确指定的弱连接符号
    优点:当用nm来分析.ko文件时,可以展示出该模块中所有符号的详细列表,这有利于了解模块的外部接口和内部结构
    缺点:nm依然需要人工处理来评估kabi兼容性,同时nm 命令的对象是驱动的.ko文件,不能直接分析ko.xz文件,需要对ko.xz文件解压

总结:如果只想要知道kabi信息,或者简单的核内驱动kabi信息对比,modprobe --dump是一个可选的方式;相比之下,nm命令则能够进行更详细分析,同时也有助于提高对模块的理解,是更推荐的方式,进行核外驱动kabi信息分析时,也更优选

新人一枚,如果有用,还望点个赞!谢谢

1 Like