pt_regs小笔记

1 · Torch-Fan · May 3, 2023, 5:38 a.m.
struct pt_regs用以在堆栈中保存异常发生时的现场寄存器信息,其具体定义与CPU架构相关。此外使用eBPF的uprobe和uretprobe时,上下文信息就是使用该结构体类型。关于使用eBPF对pt_regs进行操作需要注意的是:你永远不能修改寄存器的值,但是如果寄存器的值是一个对象的地址,你可以顺着地址去修改那块地址的内容~ 1. 常见寄存器的作用:pt_regs里其实就存储了各种寄存器的值,因此理解pt_regs本质还需要知道这些寄存器的作用。由于系统位数不同,寄存器名字可能有小的差异,但是我们只关注其内在意义,就不必因名字而困扰。 2. pt_regs定义:在arch/x86/include/asm/ptrace.h中通过宏定义了32位/64位下的pt_regs定义。如果想知道自己系统中pt_regs的定义,从vmlinux.h中获取即可。用户态下可包含头文件uapi/linux/ptrace.h。(uapi指代userspace API,向用户态提供内核中的数据结构) 2.1 32位系统下pt_regs定义:注意:在该头文件中以下pt_regs的定义是只有#ifnde...