
内核调试
文章平均质量分 52
sydyh43
这个作者很懒,什么都没留下…
展开
-
kprobe功能的代码实现
给目标函数执行前后完成打桩,在打桩函数中获取函数的入参值和返回值,从而实现对某个功能的跟踪,如是否打开了某一个文件。当目标函数执行结束最后一刻,触发异常,完成执行目标函数后post_handler的调用。3.3、通过do_sys_open函数定义可知,filename的指针地址是一个用户态的地址,此处是内核态空间,因此不能直接访问,需要借助函数strncpy_from_user实现数据的拷贝。此处是x86的架构。3、具体的代码实现,以open系统函数为例,对应内核态的函数是do_sys_open。原创 2022-09-24 16:12:13 · 623 阅读 · 1 评论 -
kprobes,强大的调试工具
1、问题:如何查看某一时间段打开了哪些文件2、针对上面问题,打开文件都会走open接口,如下open.c - fs/open.c - Linux source code (v5.15.12) - Bootlin其中,do_sys_open函数的第二个参数就是打开的文件路径名,因此只需要抓取do_sys_open的第二个参数值即可。不同的处理器,入参对应的寄存器也不一样。其中X86-64处理器其中ARM-32处理器3、本文以X86-64为例,因此需要捕捉寄存器%rsi即可4原创 2021-12-31 21:48:14 · 587 阅读 · 0 评论 -
死锁问题----打印此刻系统中所有的task
一、task_struct的遍历进程,线程和内核线程的基本属性都是由struct task_struct结构体定义的。设备上运行的所有task都是通过双链表连成一串,其中第一个task就是init_task,最终又指向会init_task。因此可以通过首个task(init_task)通过双向链表(tasks)遍历所有task,最终回到init_task方式遍历所有的task。 首进程init_task在内核启动的时候静态赋值创建。(/in...原创 2021-08-28 22:39:49 · 392 阅读 · 0 评论 -
设备性能分析汇总
原创 2021-08-20 21:26:11 · 959 阅读 · 0 评论 -
如何打印堆栈
一、打印堆栈可以方便问题定位,找到具体的函数调用流程。二、打印堆栈的方法2.1、用户态#include <stdio.h>#include <stdlib.h> #include <stddef.h> #include <execinfo.h> #define DUMP_DEPTH 20void dump(void) { int i = 0; size_t size = 0; char **strings = N原创 2021-08-14 22:19:12 · 4669 阅读 · 0 评论 -
IO功能问题定位的ftrace使用
1、打开ftrace功能kernel hacking->Tracers2、升级内核后,开始抓取数据#Prepare for the testecho 1 > /sys/block/mmcblk0/trace/enableecho 0 > /sys/kernel/debug/tracing/tracing_onecho 0 > /sys/kernel/debug/tracing/events/enableecho 10000 > /sys/kernel/d原创 2021-04-20 20:33:29 · 629 阅读 · 0 评论 -
通过slab debug定位内核内存泄漏
1、查看内核小内存使用情况cat /proc/meminfoslab=SReclaimalbe(可回收) + SUnreclaim(不可回收),假如出现内存泄漏,同时SUnreclaim值一直增大,可能是内核出现内存泄漏。2、怎么查看到具体哪个slab出现内存泄漏问题2.1、打开内核配置项kernel hacking --> Memory Debugging 打开CONFIG_SLUB_DEBUG 测试项重新更新内核,启动后可以在/sys/kernel/目录下查看到slab目录.原创 2021-01-23 20:46:11 · 1020 阅读 · 0 评论