Fork me on GitHub
侧边栏
上一页 1 ··· 54 55 56 57 58 59 60 61 62 ··· 135 下一页
摘要: TLB 是页表项的物理 cache,用于加速虚拟地址到物理地址的转换。CPU 在访问一个虚拟地址时,首先会在 TLB 中查找,如果找不到对应的表项,那么就称之为 TLB miss,此时就需要去内存里查询页表,如果页表项是合法的,那么就会把它添加到 TLB 中。如果内核修改了页表,那么就需要主动的去清 阅读全文
posted @ 2024-06-02 10:42 yooooooo 阅读(442) 评论(0) 推荐(0)
摘要: find_sys_call_table 和 kallsyms_lookup_name 都可以用于查找内核符号,但它们的具体作用和使用场景有所不同。以下是两者的详细对比: 1. find_sys_call_table 作用 find_sys_call_table 是一种通过遍历内核内存或者其他方式来手 阅读全文
posted @ 2024-05-29 15:52 yooooooo 阅读(227) 评论(0) 推荐(0)
摘要: 在Linux内核编程中,READ_ONCE 宏用于确保从内存中读取一个变量的值时,编译器不会对这个读取操作进行优化,从而保证了读取操作的原子性。这个宏通常在需要防止编译器优化、多线程或中断上下文中使用,以确保数据的一致性和正确性。 以下是 READ_ONCE 宏的定义及其解释: #define RE 阅读全文
posted @ 2024-05-29 15:21 yooooooo 阅读(488) 评论(0) 推荐(1)
摘要: 1. 页表转换寄存器描述符 1.1,页表/页目录结构 基于前言中的内核配置,内核采用39位虚拟地址,因此可寻址范围为2^39 = 512G,采用(linux 默认为五级页表,另外还有PUD,P4D,由于本文只配置三级,其他两项不予罗列)3级页表结构,分别为: PGD (Page Global Dir 阅读全文
posted @ 2024-05-25 20:25 yooooooo 阅读(690) 评论(0) 推荐(0)
摘要: 下面是在实际工作中遇到的一次内核(5.4.110)访问非法内存地址(空指针)导致出错的现场,在这里记录一下简单的分析流程为以后遇到类似的问题作为参考。 [ 220.619861] Unable to handle kernel NULL pointer dereference at virtual 阅读全文
posted @ 2024-05-20 14:43 yooooooo 阅读(698) 评论(0) 推荐(0)
摘要: profile是用于追踪程序执行调用流程的工具,类似于perf中的-g指令 相比perf -g而言,profile功能化更加细分,可以根据需要选择追踪层面,例如-U(用户要调用流程) -K (内核态调用流程) 下面具体介绍该工具的使用 采用profile --help,我们可以看到如下介绍: usa 阅读全文
posted @ 2024-04-07 11:17 yooooooo 阅读(172) 评论(0) 推荐(0)
摘要: 引入tracepoint的背景 当需要获取内核的debug信息时,通常你会通过以下printk的方式打印信息: void trace_func() { //…… printk("输出信息"); //…… } 缺点: 内核中printk是统一控制的,各个模块的printk都会被打印,无法只打印需要关注 阅读全文
posted @ 2024-04-03 17:50 yooooooo 阅读(635) 评论(0) 推荐(0)
摘要: kprobe是什么? kprobe 是一种动态调试机制,用于debugging,动态跟踪,性能分析,动态修改内核行为等,2004年由IBM发布,是名为Dprobes工具集的底层实现机制[1][2],2005年合入Linux kernel。probe的含义是像一个探针,可以不修改分析对象源码的情况下, 阅读全文
posted @ 2024-04-02 15:04 yooooooo 阅读(814) 评论(0) 推荐(0)
摘要: rchar:代表自进程启动以来所读取的总字符数,包括通过缓存或直接读取的字符。单位是字节(bytes)。 wchar:代表自进程启动以来所写入的总字符数,包括通过缓存或直接写入的字符。单位是字节(bytes) syscr:代表自进程启动以来所执行的 read 系统调用的次数。 syscw:代表自进程 阅读全文
posted @ 2024-03-26 11:48 yooooooo 阅读(160) 评论(0) 推荐(0)
摘要: BPF 是 Linux 内核中基于寄存器的虚拟机,可安全、高效和事件驱动的方式执行加载至内核的字节码。与内核模块不同,BPF 程序经过验证以确保它们终止并且不包含任何可能锁定内核的循环。BPF 程序允许调用的内核函数也受到限制,以确保最大的安全性以防止非法的访问。 尽管 BPF 为编写事件驱动的内核 阅读全文
posted @ 2024-03-26 10:35 yooooooo 阅读(638) 评论(0) 推荐(1)
上一页 1 ··· 54 55 56 57 58 59 60 61 62 ··· 135 下一页