crash —— 查看数据结构内部成员的偏移量和地址

简介: crash —— 查看数据结构内部成员的偏移量和地址

whatis

如果提前知道数据类型的定义,可以直接用struct、union等,否则可以直接用whatis。

crash> whatis -o page
struct page {
   [0] unsigned long flags;
union {
struct {
union {
   [8]             struct list_head lru;
struct {
   [8]                 void *__filler;
  [16]                 unsigned int mlock_count;
                   };
   [8]             struct list_head buddy_list;
   [8]             struct list_head pcp_list;
               };
  [24]         struct address_space *mapping;
union {
  [32]             unsigned long index;
  [32]             unsigned long share;
               };
  [40]         unsigned long private;
           };
struct {
   [8]         unsigned long pp_magic;
  [16]         struct page_pool *pp;
  [24]         unsigned long _pp_mapping_pad;
  [32]         unsigned long dma_addr;
union {
  [40]             unsigned long dma_addr_upper;
  [40]             atomic_long_t pp_frag_count;
               };
           };
...
  [52] atomic_t _refcount;
  [56] unsigned long memcg_data;
}
SIZE: 64

struct

上面显示page是struct类型,那么也可以直接用struct,struct的输出格式更丰富,这里struct也可以用*代替。

crash> *page -xo
struct page {
   [0x0] unsigned long flags;
union {
struct {
union {
   [0x8]             struct list_head lru;
struct {
   [0x8]                 void *__filler;
  [0x10]                 unsigned int mlock_count;
                     };
   [0x8]             struct list_head buddy_list;
   [0x8]             struct list_head pcp_list;
                 };
  [0x18]         struct address_space *mapping;
union {
  [0x20]             unsigned long index;
  [0x20]             unsigned long share;
                 };
  [0x28]         unsigned long private;
             };
...
  [0x34] atomic_t _refcount;
  [0x38] unsigned long memcg_data;
}
SIZE: 0x40

上面显示的是结构体成员的的偏移,如果我们已经知道某个结构体变量的地址,那么可以可以用下面的方法获取其中每个成员的地址:

crash> *page -ox ffffea0000000440
struct page {
  [ffffea0000000440] unsigned long flags;
union {
struct {
union {
  [ffffea0000000448]             struct list_head lru;
struct {
  [ffffea0000000448]                 void *__filler;
  [ffffea0000000450]                 unsigned int mlock_count;
                     };
  [ffffea0000000448]             struct list_head buddy_list;
  [ffffea0000000448]             struct list_head pcp_list;
                 };
  [ffffea0000000458]         struct address_space *mapping;
union {
  [ffffea0000000460]             unsigned long index;
  [ffffea0000000460]             unsigned long share;
                 };
  [ffffea0000000468]         unsigned long private;
             };
...
  [ffffea0000000474] atomic_t _refcount;
  [ffffea0000000478] unsigned long memcg_data;
}
SIZE: 0x40
C 复制 全屏

完。

相关文章
|
存储 算法 NoSQL
【数据结构和算法】散列表的查找算法(开放地址法,链地址法)
【数据结构和算法】散列表的查找算法(开放地址法,链地址法)
478 0
【数据结构和算法】散列表的查找算法(开放地址法,链地址法)
|
3月前
crash —— 获取内核地址布局、页大小、以及栈布局
crash —— 获取内核地址布局、页大小、以及栈布局
|
3月前
crash —— 如何知道哪些数据结构内嵌了指定的数据结构或者内嵌了指向指定数据结构的指针
crash —— 如何知道哪些数据结构内嵌了指定的数据结构或者内嵌了指向指定数据结构的指针
|
6月前
|
存储 算法 NoSQL
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
246 1
|
6月前
|
存储 算法
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
137 0
|
Apache 流计算
《Apache Flink 流式应用中状态的数据结构定义升级》电子版地址
Apache Flink 流式应用中状态的数据结构定义升级
114 0
《Apache Flink 流式应用中状态的数据结构定义升级》电子版地址
数据结构94-深入链地址法
数据结构94-深入链地址法
65 0
数据结构94-深入链地址法
|
NoSQL 数据库 Redis
《如何使用Tair增强数据结构构建丰富在线实时场景》电子版地址
阿里云内存数据库Tair在完全兼容Redis的基础上,推出了 Tair 增强数据结构。Tair的增强数据结构有什么独特的优势?如何使用 TairRoaring 构建企业级实时人群服务?如何使用TairSearch 构建在线交互搜索?我们一一揭晓。
233 0
《如何使用Tair增强数据结构构建丰富在线实时场景》电子版地址
bluez蓝牙协议栈交叉编译移植教程(附带视频下载地址)
由于项目功能的要求,需要移植bluez蓝牙协议栈到S3C2410开发平台上,在移植的过程中出现了很多问题,比如依赖库的版本不匹配,交叉编译器版本过高或者过低等问题,为了能让大家少走移植的弯路,现将自己亲测的组合版本以及编译过程总结如下,同时还附带有编译过程的全称视频,只是没有声音,因为是在实验室没有麦,大家将就以下,虽然没有声音但是不影响编译过程,下载地址为:http://115.com/file/aq7pjuh6# 交叉编译bluez协议栈.avi。
2295 0