crash中使用list遍历结构体
list [[-o] offset][-e end][-[s|S] struct[.member[,member] [-l offset]] -[x|d]] [-r|-h|-H] start
如下介绍只列举常用的和容易混淆的参数:
- [-o] offset:用于指定next地址指针,可以不用加-o,它支持两种offset格式,一种为structure.member,另一种为一个数字当使用这个offset参数后,最后跟的start地址应该是这个结构体地址,而不是list_head地址。
- -s struct:用于打印结构体中的成员的,当一个结构体很大,而我们只想关注其中的个别结构体成员,那么可以使用这个参数,多个成员之间可以使用逗号分开。
- -l offset:参数格式和-o一样,但是它代表的含义不同,当传入的start地址并非结构体地址,而是嵌入在结构体中的list_head地址时,需要使用-l表示这个list_head相对于结构体的偏移量。
start:它有两种含义,首先它可以表示一个结构体的地址,其次当与-l和-s使用时,它表示一个list_head地址。 - -H start:当结构体中嵌入list_head使用时,使用这个参数表示start为单独的list_head头地址,用于表示链表的起始,这个头并不包含数据。
- -h start:当结构体中嵌入list_head使用时,使用这个参数表示start为一个结构体地址,而非单独的list_head头。
举例说明:
当打印系统中所有的task结构体数据时,list后需要跟offset参数用于表示next地址在哪里,需要使用-h指定某一个task_struct的地址。
crash> struct -o task_struct.tasks
struct task_struct {[1072] struct list_head tasks;
}
使用如下方法进行list遍历:
list task_struct.tasks -s task_struct.comm -h ffff88083cc5d080
或者使用:
list 1072 -s task_struct.comm -h ffff88083cc5d080
输出如下所示,其中输出的地址为结构体地址:
ffff88083cc5d080comm = "agent\000\000\000\000"
ffff88102ac7a280comm = "test\000r\000"
ffffffff81951440comm = "swapper/0\000\000\000\000\000\000"
ffff881053cf0000comm = "systemd\000\060\000\000\000\000\000\000"
ffff881053cf0b80comm = "kthreadd\000\000\000\000\000\000\000"
ffff880854448000
假如我们只知道一个task_struct中的一个tasks(list_head)地址,想通过这个list_head来遍历所有task_struct结构体,那么此时就需要使用-l选项了:
list 0xffff88102ac7a6b0 -l task_struct.tasks -s task_struct.comm
输出如下所示,和上面不同的是,输出的地址为嵌入的list_head结构体成员tasks的地址:
crash> list -h 0xffff88102ac7a6b0 -l task_struct.tasks -s task_struct.comm
ffff88102ac7a6b0comm = "test\000r\000"
ffffffff81951870comm = "swapper/0\000\000\000\000\000\000"
ffff881053cf0430comm = "systemd\000\060\000\000\000\000\000\000"
ffff881053cf0fb0comm = "kthreadd\000\000\000\000\000\000\000"
ffff880854448430
crash中使用list遍历结构体相关推荐
- 遍历结构体_三菱ST语言编程(3)——结构体变量
上篇文章介绍了数组,是一组相同类型数据的列表,那么不同类型的数据能否组合到一起用一个标签表示呢?答案当然是可以的,而实现这个功能的就是结构体(struct). 建立结构体 在三菱结构化编程的界面中左侧 ...
- c语言遍历字节,C语言遍历结构体
假设结构体为: typedef struct { unsigned char ucType; char cProgramID[32]; char cRegionGroupID[32]; unsigne ...
- Linux中表示“时间”的结构体和相关函数
转载于:http://blog.chinaunix.net/uid-25909722-id-2827364.html Linux中表示"时间"的结构体和相关函数 2011-09-1 ...
- MDK keil中在定义一个结构体的时候加点后面不出现结构体当中变量的提示
MDK keil中在定义一个结构体的时候加点后面不出现结构体当中变量的提示 解决办法: 1.确保已经将顶层头文件stm32f10x.h添加至当前你所写的文件内: 2.检查你自己写的文件是否已经加载到工 ...
- C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例
C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例 目录 一.简单介绍 二.结构体定义和使用 三. ...
- c++中的构造数据类型----结构体
c++中的构造数据类型----结构体 构造数据类型: 无论是基本数据类型还是数组类型都仅仅描述了事物某一方面的特性, 但是, 一种事物往往具有多方面的属性, 如一个同学有学号, 姓名, 性别, 年龄等 ...
- Swift中的类和结构体(2)
Swift中的类和结构体(2) 异变方法 方法调度 影响函数派发方式 异变方法 在Swift中,值类型属性不能被自身的实例方法修改,编译器不会通过编译,报错Left side of mutating ...
- java中的类跟结构体_C#中的结构体与类的区别
经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字str ...
- 结构体中引用另一结构体
结构体中引用另一结构体 1.自引用结构体 1.1不使用typedef时 2.1使用typedef时 2.互引用结构体 结构体引用主要分为自引用和互引用.我主要以实例展示如何使用,不会过多赘述太多,想必 ...
最新文章
- THE DRAGON PRINCE BOOK 3
- Hadoop2.6.0子项目hadoop-mapreduce-examples的简单介绍
- (3.2)将分词和去停用词后的评论文本基于“环境、卫生、价格、服务”分类...
- 优秀编程网站收录集锦
- android 手机交互设计,移动设备交互设计比较
- 897. 递增顺序查找树-未解决
- Function(函数)
- 最受欢迎Java数据库访问框架(DAO层)
- Archlinux 在启动时出现Error file vmlinuz not found解决方法
- 《FLUENT 14流场分析自学手册》——2.3 FLUENT14.5软件包的安装以及运行
- 人脸识别测试点整理思维导图方式
- imageAI基本使用
- 微型计算机系统教案,微型计算机硬件系统教案
- 服务器解析错误_常见的域名解析错误原因及应对方法
- 8251A可编程串行接口
- 【漏洞复现-maccms-命令执行】vulfocus/maccms-cve_2017_17733
- P1252 马拉松接力赛
- 【iOS】录音和音频合成
- Android作为HTTP服务器--NanoHTTPD源码分析
- java后端工程师面试题(笔试):2022-11-04 经历(一)