命令字:!ndx.modsyms

用法描述

用于显示内核模块相关的符号信息,包括常规模块、BPF、Kprobe、Ftrace 等模块的符号,相当于cat /proc/kallsyms中的模块符号部分
命令行参数支持:
-a <地址> 按地址查找模块符号
-n <名称> 按符号名称查找
-h 或 ? 显示帮助信息

开发过程

1.找到关键全局变量

符号类型 关键全局变量 作用
常规模块符号 lk!modules 内核所有模块的链表头,存储所有已加载模块的元信息(如名称、符号表地址)
BPF 符号 lk!bpf_kallsyms BPF 符号的链表头,存储所有 BPF 程序相关的符号
Kprobe 符号 lk!kprobe_insn_slots Kprobe 指令页面的管理结构,内部包含 pages 链表,存储 Kprobe 相关符号
Ftrace 符号 lk!ftrace_mod_maps Ftrace 跟踪模块的链表头,存储所有被 Ftrace 跟踪的模块及函数信息

查找过程

内核中遍历打印符号的时候,如果当前遍历的索引大于核心符号数量,就会进入模块符号的遍历。

根据指定的位置 pos 更新迭代器状态,并尝试从不同符号源中获取符号

2.相关数据结构

  • modules :链表节点类型为 struct module ,包含模块名、符号表地址、模块状态等字段。
  • bpf_kallsyms :链表节点类型为 struct bpf_prog 或相关结构,包含 BPF 程序符号信息。
  • kprobe_insn_slots :管理 Kprobe 指令页面,内部有 pages 链表,节点类型为 struct kprobe_insn_page 。
  • ftrace_mod_maps :链表节点类型为 struct ftrace_mod_map ,包含 Ftrace 跟踪的模块及函数信息。

3.读取变量和相关偏移,输出信息

4.实例测试

作者:郭建程  创建时间:2025-09-15 10:48
最后编辑:郭建程  更新时间:2025-09-15 11:36