crash —— 如何获取结构体成员指向的结构的内容?

简介: crash —— 如何获取结构体成员指向的结构的内容?

有时我们得到了某个结构体的地址,这个结构体内部有一个指向另外一个数据结构的指针,那么如何快速输出另外一个数据的内容。

这里有两种方法,还是以task_struct为例,我想输出mm成员的内容:

方法1

根据结构体的地址输出指针成员的值,然后再进行二次引用

crash> *task_struct.mm ffff893e3846e000
  mm = 0xffff893cb80fd000,
crash> *mm_struct -x 0xffff893cb80fd000
struct mm_struct {
  {
    mmap = 0xffff893cb8efbed0,
    mm_rb = {
      rb_node = 0xffff893cb8efa4a8
    },
    vmacache_seqnum = 0x10,
    get_unmapped_area = 0xffffffff8102ac20 <arch_get_unmapped_area_topdown>,
    mmap_base = 0x7f0f6a696000,
    mmap_legacy_base = 0x2b973fb15000,
    mmap_compat_base = 0xf7f65000,
    mmap_compat_legacy_base = 0x555ee000,
    task_size = 0x7ffffffff000,
    highest_vm_end = 0x7ffd5fff5000,
    pgd = 0xffff893cb9a86000,
...

方法2

  • 如果知道task_struct的地址
crash> *task_struct.mm ffff893e3846e000 -p
struct mm_struct *mm = 0xffff893cb80fd000
  -> {
       {
         mmap = 0xffff893cb8efbed0,
         mm_rb = {
           rb_node = 0xffff893cb8efa4a8
         },
         vmacache_seqnum = 16,
         get_unmapped_area = 0xffffffff8102ac20 <arch_get_unmapped_area_topdown>,
         mmap_base = 139704186527744,
         mmap_legacy_base = 47928608641024,
         mmap_compat_base = 4160114688,
         mmap_compat_legacy_base = 1432281088,
         task_size = 140737488351232,
         highest_vm_end = 140726214021120,
         pgd = 0xffff893cb9a86000,
...
  • 如果知道task_struct的on_rq成员的地址
crash> *task_struct.comm,mm -p -l task_struct.on_rq 0xffff893e3846e060
  comm = "sh\000entry.sh\000]\000\000",
struct mm_struct *mm = 0xffff893cb80fd000
  -> {
       {
         mmap = 0xffff893cb8efbed0,
         mm_rb = {
           rb_node = 0xffff893cb8efa4a8
         },
         vmacache_seqnum = 16,
         get_unmapped_area = 0xffffffff8102ac20 <arch_get_unmapped_area_topdown>,
         mmap_base = 139704186527744,
         mmap_legacy_base = 47928608641024,
         mmap_compat_base = 4160114688,
         mmap_compat_legacy_base = 1432281088,
         task_size = 140737488351232,
         highest_vm_end = 140726214021120,
...
C 复制 全屏

总结

如果我们想查看某个结构体的详细内容,那么可以加上-p参数,这样可以看到更多的内容,便于问题分析。

相关文章
|
Linux C语言 开发者
深入解析Linux环境下的scanf()、sscanf()和fscanf()函数
在C语言中,`scanf()`、`sscanf()`和`fscanf()`是用于输入的三个常用函数。它们允许开发者从标准输入、字符串和文件中按照指定的格式读取数据。在Linux环境下,这些函数被广泛用于处理各种输入。本文将详细介绍这三个函数的用法,包括格式化字符串的语法和一些常见的使用场景。
1113 1
|
网络协议 网络安全 网络虚拟化
IPv6地址详解
IPv4地址资源的紧张限制了Internet的进一步发展。NAT、CIDR、VLSM等技术的使用仅仅暂时缓解IPv4地址紧张,但不是根本解决办法。
885 0
|
运维 NoSQL Ubuntu
深入理解Linux中的"crash"命令:内核崩溃的调试利器
`crash`是Linux内核崩溃调试工具,用于分析内核崩溃转储文件,提供GDB-like的交互式CLI。通过加载`vmcore`文件和内核映像,管理员可以查看系统状态、调用栈、内存布局等。安装`crash`可使用包管理器,如`apt-get`或`yum/dnf`。尽管有学习曲线且依赖转储文件,但`crash`在系统故障排查中极其重要。
crash —— 查看进程的内核栈的内容
crash —— 查看进程的内核栈的内容
|
监控 JavaScript 测试技术
从单体应用迁移到微服务的最佳实践
【8月更文第29天】随着软件架构的发展,越来越多的企业开始考虑从传统的单体应用迁移到微服务架构。虽然迁移可以带来诸如更好的可扩展性、更高的灵活性等优势,但这一过程也可能充满挑战。本文将详细介绍如何顺利地进行这一转变,并提供一些实用的步骤和示例代码。
402 1
crash —— 查看数据结构内部成员的偏移量和地址
crash —— 查看数据结构内部成员的偏移量和地址
C 作用域详解
在 C 语言中,作用域决定了变量和函数的可见性和生命周期,包括块作用域、函数作用域、文件作用域和全局作用域。块作用域内的变量仅在块内有效,函数作用域内的变量在整个函数内有效,文件作用域内的全局变量和函数在整个文件内有效,而全局作用域内的变量和函数在整个程序运行期间有效。作用域的优先级遵循局部变量优先的原则,局部变量会遮蔽同名的全局变量。变量的生命周期分为局部变量(函数调用时创建和销毁)、全局变量(程序开始时创建和结束时销毁)以及静态变量(整个程序期间有效)。理解作用域有助于避免命名冲突和错误,提高代码的可读性和可维护性。
|
存储 Linux 编译器
Linux系统中指针的详细分析与操作
Linux系统中指针的详细分析与操作
253 1
|
运维 前端开发 关系型数据库
高效调试与分析:利用ftrace进行Linux内核追踪(上)
高效调试与分析:利用ftrace进行Linux内核追踪
|
机器学习/深度学习 人工智能 算法
【AI赋能】——我国战略新兴业务快速发展 —产业结构调整持续优化
【AI赋能】——我国战略新兴业务快速发展 —产业结构调整持续优化
458 2