摘要: 有时我们得到了某个结构体的地址,这个结构体内部有一个指向另外一个数据结构的指针,那么如何快速输出另外一个数据的内容。 这里有两种方法,还是以task_struct为例,我想输出mm成员的内容: 方法1 根据结构体的地址输出指针成员的值,然后再进行二次引用 crash> *task_struct.mm 阅读全文
posted @ 2023-09-24 21:41 摩斯电码 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 以下面的task_struct为例: crash> *task_struct -ox ffff893e3846e000 struct task_struct { [ffff893e3846e000] struct thread_info thread_info; [ffff893e3846e010] 阅读全文
posted @ 2023-09-24 21:29 摩斯电码 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 方法1 使用ps获取进程的task_struct地址,然后得到mm_struct地址 crash> ps | grep bash 6666 96253 8 ffff88a07fd42000 IN 0.0 24268 3048 bash 8288 59636 14 ffff88fdc4678000 I 阅读全文
posted @ 2023-09-24 18:41 摩斯电码 阅读(166) 评论(0) 推荐(0) 编辑
摘要: crash提供了vm命令来输出进程的vma相关的信息。 输出当前当进程的vma列表 crash> vm PID: 3319 TASK: ffff889760358000 CPU: 6 COMMAND: "kvm" MM PGD RSS TOTAL_VM ffff893ada165000 ffff89 阅读全文
posted @ 2023-09-24 18:19 摩斯电码 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 在linux系统中可以通过/proc/slabinfo获取slab的统计数据,crash提供了kmem来实现这个功能。 查看系统每个kmem_cache的概要信息 crash> kmem -s CACHE OBJSIZE ALLOCATED TOTAL SLABS SSIZE NAME ffff88 阅读全文
posted @ 2023-09-24 16:47 摩斯电码 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 将page的flags转换为可读字符串 crash> kmem -g 01fffe00000a001c FLAGS: 1fffe00000a001c PAGE-FLAG BIT VALUE PG_referenced 2 0000004 PG_uptodate 3 0000008 PG_dirty 阅读全文
posted @ 2023-09-24 15:49 摩斯电码 阅读(37) 评论(0) 推荐(0) 编辑
摘要: linux中page数据结构可以通过mem_map数组访问,下面的方法可以输出每个page的相关成员。 通用版本 下面这个命令可以显示每个page的一些关键成员的值。 crash> kmem -p PAGE PHYSICAL MAPPING INDEX CNT FLAGS ffffea0000000 阅读全文
posted @ 2023-09-24 15:13 摩斯电码 阅读(105) 评论(0) 推荐(0) 编辑
摘要: crash> kmem -n NODE SIZE PGLIST_DATA BOOTMEM_DATA NODE_ZONES 0 100925439 ffff88e03ffc1000 ffff88e03ffc1000 ffff88e03ffc5000 ffff88e03ffc9000 ffff88e03 阅读全文
posted @ 2023-09-24 15:04 摩斯电码 阅读(59) 评论(0) 推荐(0) 编辑
摘要: crash> kmem -v VMAP_AREA VM_STRUCT ADDRESS RANGE SIZE ffff88debf51c900 ffff88debf53bd00 ffffc90000000000 - ffffc90000002000 8192 ffff88debf51cf60 ffff 阅读全文
posted @ 2023-09-24 14:40 摩斯电码 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 通用统计信息 crash> kmem -i PAGES TOTAL PERCENTAGE TOTAL MEM 197646761 754 GB FREE 33983015 129.6 GB 17% of TOTAL MEM USED 163663746 624.3 GB 82% of TOTAL M 阅读全文
posted @ 2023-09-24 14:37 摩斯电码 阅读(131) 评论(0) 推荐(0) 编辑
摘要: crash> mach MACHINE TYPE: x86_64 MEMORY SIZE: 766.5 GB CPUS: 96 PROCESSOR SPEED: 2200 Mhz HZ: 250 PAGE SIZE: 4096 KERNEL VIRTUAL BASE: ffff88800000000 阅读全文
posted @ 2023-09-24 12:55 摩斯电码 阅读(71) 评论(0) 推荐(0) 编辑
摘要: crash> mach -c CPU 0: struct cpuinfo_x86 { x86 = 6 '\006', x86_vendor = 0 '\000', x86_model = 85 'U', x86_stepping = 7 '\a', x86_tlbsize = 0, x86_virt 阅读全文
posted @ 2023-09-24 12:45 摩斯电码 阅读(85) 评论(0) 推荐(0) 编辑
摘要: crash> mach -m PHYSICAL ADDRESS RANGE TYPE 0000000000000000 - 0000000000001000 E820_RESERVED 0000000000001000 - 000000000006e000 E820_RAM 000000000006 阅读全文
posted @ 2023-09-24 12:43 摩斯电码 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 通过sym可以将内核地址转换成内核符号,或者将内核符号转换成内核地址。 根据地址转换为符号 函数地址 crash> sym ffffffff8166f300 ffffffff8166f300 (T) blk_update_request+16 /home/pengdl/x86_64/linux-6. 阅读全文
posted @ 2023-09-24 12:06 摩斯电码 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 查看所有的内核符号以及地址 crash> sym -l 0 (D) __per_cpu_start 0 (D) irq_stack_union 4000 (D) cpu_debug_store 5000 (D) cpu_tss_rw 8000 (D) gdt_page 9000 (d) except 阅读全文
posted @ 2023-09-24 11:44 摩斯电码 阅读(74) 评论(0) 推荐(0) 编辑
摘要: crash —— 如何知道哪些数据结构内嵌了指定的数据结构或者内嵌了指向指定数据结构的指针 阅读全文
posted @ 2023-09-24 11:08 摩斯电码 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 需求 有时我们有这样的需求,比如我们知道了结构体task_struct,然后我们又想知道内核中有哪些数据结构中包含了task_struct,或者包含了指向task_struct的指针。 做法 用whatis -m可以做到: crash> whatis -m task_struct SIZE TYPE 阅读全文
posted @ 2023-09-24 11:06 摩斯电码 阅读(44) 评论(0) 推荐(0) 编辑
摘要: whatis 如果提前知道数据类型的定义,可以直接用struct、union等,否则可以直接用whatis。 crash> whatis -o page struct page { [0] unsigned long flags; union { struct { union { [8] struc 阅读全文
posted @ 2023-09-24 10:49 摩斯电码 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 在crash中可以用whatis命令查看数据类型信息以及函数的原型。 如果想知道某个数据是什么类型那么可以用下面的方法: 查看结构体的定义 crash> whatis mm_struct struct mm_struct { struct { struct maple_tree mm_mt; uns 阅读全文
posted @ 2023-09-24 10:04 摩斯电码 阅读(65) 评论(0) 推荐(0) 编辑