首页 > 其他分享 >读取内核变量的几种方法

读取内核变量的几种方法

时间:2023-08-07 14:24:44浏览次数:302  
标签:8.4 GNU linux 6.2 几种 version 内核 Ubuntu 读取

作者

[email protected]

背景

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

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

完。

标签:8.4,GNU,linux,6.2,几种,version,内核,Ubuntu,读取
From: https://www.cnblogs.com/pengdonglin137/p/17611170.html

相关文章

  • UM2080F32基于ARM Cortex-M0+内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发
    UM2080F32是基于ARMCortex-M0+内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。工作于200MHz~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持FEC功能,同时内部集成了完整的射频接收机、射频发射机、频率综合器、调制解......
  • ios 自制Framework 获取指定bundle并读取里面的资源
    原文地址:https://zhanglei.blog.csdn.net/article/details/121673288目录一、前言二、访问应用资源三、Framework中的资源存放四、访问Framework中指定的bundle五、访问bundle中的资源六、建议Framework与bundle分开存放一、前言应用中某些模块需要组件化,组件化后的工程最后会......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • Java实现本地缓存的几种方式
    一、概况引入缓存,主要用于实现系统的高性能,高并发。将数据库查询出来的数据放入缓存服务中,因为缓存是存储在内存中的,内存的读写性能远超磁盘的读写性能,所以访问的速度非常快。但是电脑重启后,内存中的数据会全部清除,而磁盘中的数据虽然读写性能很差,但是数据不会丢失。目的主要为了重......
  • Python文件读取方法:read()、readline()和readlines()的区别
    在Python中,读取文件是一项常见的任务。Python提供了多种方法来读取文件内容,其中包括read()、readline()和readlines()方法。本文将介绍这些方法的区别和使用场景。read()read()方法用于一次性读取整个文件的内容,并将其作为一个字符串返回。语法如下:file_object.read()优点:读取整个......
  • Javaexcel文件读取,插入到数据库中
    你可以使用Java的ApachePOI库来读取Excel文件,并使用JDBC连接数据库将数据插入到数据库中。下面是一个示例代码:importjava.io.FileInputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importorg.apache.poi.ss.usermo......
  • linux内核移植步骤「建议收藏」
    【说明:本文转载自如下地址】https://cloud.tencent.com/developer/article/2107681?areaSource=102001.3&traceId=I-X1VzDQ2XOPORi2lXiHa大家好,又见面了,我是你们的朋友全栈君。 2016.6.8经过一个多星期的内核折磨,今天终于可以写下自己移植内核的一些心得,网上有很多博客论坛都......
  • 二、2.1 安卓ADB进不去的几种情况及处理!
    背景简介可能大家有些童鞋是学习有关安卓的,所以关于安卓adb的调试是缺少不了的。这里号主把自己遇到的几种adb进不去的情况及处理办法分享一下。目录1、输入adbshell提示如下:error:nodevices/emulatorsfound2、输入adbshell提示如下:error:morethanonedevice/emlator......
  • 事务失效有哪几种原因
    在做业务开发时,遇到了一个事务不起作用的问题。事情是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚。查阅资料后,问题得到解决,记录下来分享给大家。场景我在这里模拟一个场景,大概的调用方式就如下面的代码这样。@Override@Transactional(rollbackFor=......
  • Java 利用poi读取excel行数,列数
    一般读取行总数时,会调用getLastRowNum(),读取列总数时,会调用getLastCellNum(),但是这两个方法的返回值有点区别。sheet.getLastRowNum();//返回最后一行的索引,即比行总数小1 row.getLastCellNum();//返回的是最后一列的列数,即等于总列数getLastRowNum():如果she......