读取内核变量的几种方法

简介: 读取内核变量的几种方法

作者

pengdonglin137@163.com

背景

开发过程中,有时需要读取内核中某个变量的值,比如我想获取下面这个变量的内容:

const char linux_banner[] =
  "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
  LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";

这个变量其实是/proc/version的内容:

# cat /proc/version
Linux version 6.2.0+ (pengdl@ubuntu) (gcc (Ubuntu 8.4.0-3ubuntu2) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #3 SMP PREEMPT_DYNAMIC Sun Aug  6 20:50:53 PDT 2023

下面我们通过几种办法从内存里得到其内容。

方法

使用gdb

# gdb /mnt/linux-6.2/vmlinux /proc/kcore
# 获取变量的地址
(gdb) info address linux_banner
Symbol "linux_banner" is static storage at address 0xffffffff82961660.
# 读取变量的内容
(gdb) x /s 0xffffffff82961660
0xffffffff82961660 <linux_banner>:      "Linux version 6.2.0+ (pengdl@ubuntu) (gcc (Ubuntu 8.4.0-3ubuntu2) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #3 SMP PREEMPT_DYNAMIC Sun Aug  6 20:50:53 PDT 2023\n"

使用bpftrace

# export BPFTRACE_STRLEN=200; bpftrace -e 'BEGIN {printf("%s\n", str(kaddr("linux_banner")))}'
Attaching 1 probe...
Linux version 6.2.0+ (pengdl@ubuntu) (gcc (Ubuntu 8.4.0-3ubuntu2) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #3 SMP PREEMPT_DYNAMIC Sun Aug  6 20:50:53 PDT 2023

crash工具

# crash /mnt/linux-6.2/vmlinux
crash> rd -a linux_banner
ffffffff82961660:  Linux version 6.2.0+ (pengdl@ubuntu) (gcc (Ubuntu 8.4.0-3ubu
ffffffff8296169c:  ntu2) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #3 SMP P
ffffffff829616d8:  REEMPT_DYNAMIC Sun Aug  6 20:50:53 PDT 2023
BASH 复制 全屏

完。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
Web App开发 编解码 前端开发
面试题22:如何测试Web浏览器的兼容性?
面试题22:如何测试Web浏览器的兼容性?
750 3
|
JavaScript
electron中使用ws
electron中使用ws
|
10月前
|
编解码
观海微电子----LCD颜色
本文介绍了颜色的基本概念及其在LCD显示中的应用。从颜色的视觉形成、三要素(色相、明度、饱和度)到RGB色彩系统、CIE标准色度学系统,涵盖色域、色温、色坐标等关键参数,并解析彩色滤光片、色块分Bin及色偏等显示技术要点,系统阐述了颜色科学与液晶显示的关联原理。(238字)
观海微电子----LCD颜色
|
运维 监控 安全
一文讲清质量管理5M1E分析法的底层逻辑
本文介绍了质量管理中的5M1E分析法,即从人、机、料、法、环、测六个方面系统分析质量波动原因,并提供具体管理方法与实操要点。通过整体联动与闭环管控,帮助企业实现质量管理的系统化与高效化,提升产品质量与稳定性。
|
Unix 自然语言处理 移动开发
UltraEdit实现“删除包含某个关键字的所有行”
原文:UltraEdit实现“删除包含某个关键字的所有行” UltraEdit实现“删除包含某个关键字的所有行”   1.Ctrl+R调出“替换对话框” 2.在左下角的“正则表达式”和“从文件顶部全部替换”都打勾(正则表达式引擎用UltraEdit) 3.在“查找内容”后面输入:*select*^p 4.在“替换为”后面置空 5.点击右侧的“全部替换” 但是注意这里的^p只是在unix编码格式中,dos编码格式时要用^n。
4111 0
|
Python
变量名能用中文吗_汉语拼音变量名_蛇形命名法_驼峰命名法
本文探讨了变量命名规范,包括汉语拼音、中文和英文变量名的使用。主要内容如下: 1. **回顾上次内容**:介绍了命名法(如大驼峰、小驼峰、蛇形命名法)。 2. **Python命名规范**:常量用全大写加下划线(如`MATH_PI`),类名和类型名用大驼峰(如`MyClass`),异常名也用大驼峰(如`NameError`)。 3. **拼音变量名**:虽然可以使用拼音缩写或全拼,但易读性较差,建议避免。 4. **中文变量名**:Python 3 支持中文作为变量名,但不推荐广泛使用,因其不利于国际合作。
1358 5
|
监控 安全 搜索推荐
SCUM 管理员工具:提升效率与优化体验的利器
在数字化时代,SCUM 游戏的管理工具为游戏运营和玩家体验带来了新变革。本文介绍了该工具的概述、意义、应用场景及未来趋势,展望了智能化、多元化、个性化和开放化的发展方向。
1379 0
|
小程序 数据可视化 开发工具
HTML我帮您打造拖拽可视化的WEUI小程序工具
HTML我帮您打造拖拽可视化的WEUI小程序工具
567 0
|
计算机视觉 人工智能 监控
AI魔幻行为大赏:细数机器视觉的9大应用场景
本文主要介绍了机器视觉的主要应用场景,目前绝大部分数字信息都是以图片或视频的形式存在的,若要对这些信息进行有效分析利用,则要依赖于机器视觉技术的发展,虽然目前已有的技术已经能够解决很多问题,但离解决所有问题还很遥远,因此机器视觉的应用前景还是非常广阔的。
11682 155
|
机器学习/深度学习 数据采集 运维
高效处理异常值的算法:One-class SVM模型的自动化方案
高效处理异常值的算法:One-class SVM模型的自动化方案
936 1