当前位置: 首页 > news >正文

【DeepSeek】linux 内核kallsyms 动态符号表文件

/proc/kallsyms是 Linux 内核提供的一个动态符号表文件,它包含了当前运行内核中所有内核符号(函数、变量)的地址和名称。这个文件对于内核调试、性能分析(如 perf、ftrace)和系统监控工具至关重要。


1. 基本内容

文件每行格式如下:

<内存地址> <符号类型> <符号名称> [<模块名>]

示例:

ffffffff81000000 T startup_64 ffffffff81000120 T secondary_startup_64 ffffffff810001a0 T verify_cpu ffffffff81a32000 D __per_cpu_start ffffffff82000000 A __entry_text_start

符号类型说明:

  • T/t:文本(代码)符号,T 表示全局,t 表示局部
  • D/d:已初始化数据,D 表示全局,d 表示局部
  • B/b:未初始化数据(BSS段)
  • R/r:只读数据
  • A:绝对地址(不重定位)
  • U:未定义符号(通常来自模块)
  • ?:未知类型

2. 主要特点

动态性

  • 内容随内核运行状态变化(如模块加载/卸载)
  • 地址可能因KASLR(内核地址空间布局随机化)而每次启动不同

权限控制

  • 非 root 用户查看时,所有符号地址显示为0
  • 这是安全措施,防止攻击者利用内核地址信息
  • root 用户或具有CAP_SYSLOG权限的进程可看到真实地址

包含范围

  • 内核核心符号
  • 所有已加载内核模块的符号
  • 部分架构相关符号

3. 主要用途

调试与追踪

# 查找特定函数地址grep"sys_open"/proc/kallsyms# 配合 ftrace 使用echosys_open>/sys/kernel/debug/tracing/set_ftrace_filter

性能分析(perf)

# perf 依赖 kallsyms 解析内核符号perf record-a-g--sleep1perf report

内核开发

  • 验证符号是否被正确导出
  • 查看符号地址布局
  • 动态追踪函数调用关系

安全分析

  • 检测异常内核模块
  • 分析 rootkit 可能隐藏的符号

4. 相关配置与接口

内核配置选项

CONFIG_KALLSYMS=y # 基本支持 CONFIG_KALLSYMS_ALL=y # 包含所有符号(包括非全局) CONFIG_KALLSYMS_ABSOLUTE_PERCPU=n # 通常关闭

用户空间访问

// 编程读取示例FILE*fp=fopen("/proc/kallsyms","r");// 注意:非特权用户只能看到零地址

系统控制

# 临时禁用地址隐藏(仅用于调试)echo0>/proc/sys/kernel/kptr_restrict# 查看当前设置cat/proc/sys/kernel/kptr_restrict# 值说明:# 0 - 所有用户可查看地址# 1 - 仅root可查看(默认)# 2 - 所有用户都看不到真实地址

5. 与 System.map 的区别

特性/proc/kallsymsSystem.map
来源运行时内核编译时生成
地址实际加载地址(含KASLR偏移)编译时相对地址
实时性动态更新(模块加载)静态
权限受 kptr_restrict 控制文件系统权限
内容更完整(含模块)仅内核核心

6. 实际应用示例

查找系统调用表

# 查找系统调用处理函数grep"sys_call_table"/proc/kallsyms

模块分析

# 查看特定模块的符号grep"\[module_name\]"/proc/kallsyms

地址转换

# 将地址转换为符号名称cat/proc/kallsyms|sort|awk'{print $1 " " $3}'>sym_map# 然后用于地址解析

7. 注意事项

  1. 生产环境安全:保持kptr_restrict=1(默认)
  2. 性能影响:频繁读取大文件可能影响性能
  3. 地址有效性:符号地址仅当前时刻有效(模块可卸载)
  4. 虚拟地址:显示的是内核虚拟地址,非物理地址

8. 扩展工具

  • nm vmlinux:查看未压缩内核的静态符号
  • readelf -s:ELF 格式符号查看
  • objdump -t:对象文件符号表
  • perf script:性能数据符号解析

/proc/kallsyms是连接用户空间工具与内核内部细节的关键桥梁,为系统监控、调试和分析提供了基础数据支持。

http://www.cnnetsun.cn/news/2164069.html

相关文章:

  • 从消息到响应:Hubot核心组件解密与智能聊天机器人构建终极指南
  • 2026届最火的十大降AI率工具横评
  • HTTP认证机制终极指南:从基础验证到高级安全防护
  • 15分钟快速搭建GCP自动部署流水线:零代码Dockerfiles终极指南
  • 告别手写代码!用NXP GUI Guider拖拽设计LVGL界面,5分钟搞定嵌入式UI
  • 为 Node.js 后端服务接入 Taotoken 实现多模型对话功能
  • Unity编辑器扩展实战:用PreviewRenderUtility为你的自定义工具窗口添加3D预览(附完整代码)
  • UnityExplorer实战指南:在游戏运行时轻松调试Unity项目
  • 5个简单步骤:用Mac Mouse Fix让普通鼠标在macOS上实现触控板级体验
  • 3分钟快速配置:OBS视频字幕生成工具完全指南
  • Ollama部署DeepSeek-R1-Distill-Qwen-7B完整指南:支持中文长文本理解与结构化输出
  • 手把手教你用CS5523芯片,把手机屏幕信号接到4K显示器上(MIPI DSI转DP/eDP实战)
  • 终极指南:如何用HS2-HF_Patch一键解锁《Honey Select 2》完整游戏体验 [特殊字符]
  • 如何在Hermes Agent项目中自定义Provider并接入Taotoken服务
  • 开发者在多模型间切换时如何保障服务稳定性与低延迟
  • Vue Excel Editor 终极指南:如何在Vue 2中实现专业级Excel式数据表格编辑
  • 别再死记硬背了!PADS Logic/Layout/Router三大组件核心快捷键与无模命令实战手册(附常用设置)
  • 【完整源码+数据集+部署教程】 工厂危险工作区域监测设备图像分割系统源码&数据集分享 [yolov8-seg-C2f-DAttention&yolov8-seg-repvit等50+全套改进创新点发
  • 从躺平到追梦,海棠山铁哥借《第一大道》对阵《灵魂摆渡・浮生梦》书写平凡传奇
  • 单相逆变电源PID调压避坑指南:从MATLAB仿真到MSP430+FPGA实战
  • 【嵌入式实战-06】从零搭建 STM32+MFRC522 RFID 门禁系统
  • 创业公司如何借助 Taotoken 低成本试错多款大模型
  • 如何快速搭建Web表格:终极Vue Excel编辑器指南
  • TPFanCtrl2:ThinkPad双风扇控制终极指南,打造静音高效散热系统
  • 使用curl命令快速测试Taotoken接口连通性与模型响应
  • 别再死记公式了!用Python动手推导酉空间的内积、距离与度量矩阵
  • GESP2025年3月认证C++五级( 第一部分选择题(1-8))
  • 系统将自动清除超出预约期限的预约记录并修改相关信息
  • 2025届毕业生推荐的十大降重复率助手横评
  • 终极KMS激活指南:3分钟完成Windows和Office永久免费激活