crash —— 如何知道哪些数据结构内嵌了指定的数据结构或者内嵌了指向指定数据结构的指针

简介: crash —— 如何知道哪些数据结构内嵌了指定的数据结构或者内嵌了指向指定数据结构的指针

需求

有时我们有这样的需求,比如我们知道了结构体task_struct,然后我们又想知道内核中有哪些数据结构中包含了task_struct,或者包含了指向task_struct的指针。

做法

whatis -m可以做到:

crash> whatis -m task_struct
  SIZE  TYPE
8  rcuwait
16  core_thread
16  io_task_cancel
16  ns_get_path_task_args
16  tgid_iter
24  ldsem_waiter
24  migration_arg
24  migration_swap_arg
24  rt_wake_q_head
24  swait_queue
32  default_wait_cb
32  hwlat_kthread_data
32  io_tctx_node
32  io_wq_data
32  irq_work
32  msg_sender
...

此外还支持对列出的数据结构的大小进行过滤:

  • 获取大小为32字节的结构
crash> whatis -r 32 -m task_struct
SIZE  TYPE
32  default_wait_cb
32  hwlat_kthread_data
32  io_tctx_node
32  io_wq_data
32  irq_work
32  msg_sender
32  nfs_referral_count
32  perf_switch_event
32  remote_function_call
32  request_wait
32  semaphore_waiter
  • 获取大小范围32-48字节的结构
crash> whatis -r 32-48 -m task_struct
SIZE  TYPE
32  default_wait_cb
32  hwlat_kthread_data
32  io_tctx_node
32  io_wq_data
32  irq_work
32  msg_sender
32  nfs_referral_count
32  perf_switch_event
32  remote_function_call
32  request_wait
32  semaphore_waiter
40  bpf_iter_seq_task_file_info
40  debuggerinfo_struct
40  ext_wait_queue
40  klist_waiter
40  mmap_unlock_irq_work
40  mutex_waiter
40  perf_comm_event
40  to_kill
48  execute_cb
48  perf_task_event
48  rwsem_waiter
48  send_signal_irq_work

有时遇到slab内存泄漏,比如发现kmalloc-64这个slab占用的内存太大,我们可以用这个命令来获取大致是这个尺寸的结构有哪些:

crash> whatis -r 33-64
SIZE  TYPE
33  cfg80211_ssid
33  hdcp2_ake_send_hprime
33  hdcp2_lc_send_lprime
33  hdcp2_rep_stream_ready
33  iso_directory_record
33  netdev_phys_item_id
34  acpi_pld_info
34  bdb_lvds_options
34  g4x_wm_state
34  i2c_smbus_data
34  ptp_header
34  sky2_stat
36  acpi_cedt_cfmws
36  acpi_resource_i2c_serialbus
36  acpi_resource_pin_function
...
相关文章
|
8月前
|
存储 Go iOS开发
掌握Go语言:探索Go语言指针,解锁高效内存操作与动态数据结构的奥秘(19)
掌握Go语言:探索Go语言指针,解锁高效内存操作与动态数据结构的奥秘(19)
|
8月前
|
存储 C语言 索引
【c语言指针详解】复杂数据结构的指针用法
【c语言指针详解】复杂数据结构的指针用法
164 0
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
63 4
|
6月前
【数据结构OJ题】复制带随机指针的链表
力扣题目——复制带随机指针的链表
59 1
【数据结构OJ题】复制带随机指针的链表
|
4月前
crash —— 获取内核地址布局、页大小、以及栈布局
crash —— 获取内核地址布局、页大小、以及栈布局
|
4月前
crash —— 查看数据结构内部成员的偏移量和地址
crash —— 查看数据结构内部成员的偏移量和地址
|
8月前
|
算法 C语言
C数据结构-翻转指针法、头插法实现单链表反转
本文介绍以C语言实现无头单链表反转的算法:翻转指针法与头插法。
67 4
|
8月前
数据结构--链表刷题(一)快慢指针(下)
数据结构--链表刷题(一)快慢指针
56 0
|
8月前
数据结构--链表刷题(一)快慢指针(上)
数据结构--链表刷题(一)快慢指针
65 0