You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86_64架构下BPFtrace提示rax无效,咨询有效寄存器名称

x86_64架构下bpftrace支持的寄存器及问题修复

一、x86_64架构bpftrace支持的寄存器列表

在x86_64架构中,bpftrace支持以下小写形式的寄存器名称:

  • 通用寄存器:rax, rbx, rcx, rdx, rsi, rdi, rbp, rsp, r8, r9, r10, r11, r12, r13, r14, r15
  • 指令指针寄存器:rip
  • 标志寄存器:rflags

二、报错原因及修复方案

你遇到的rax is not a valid register on this architecture (x86_64)报错,主要有两个原因:

  1. 探针点与寄存器访问方式不匹配:x64_sys_call并非标准kprobe探针点,且在kprobe上下文里,寄存器需通过regs->寄存器名的方式访问,而非reg("寄存器名")。
  2. 若误写为大写寄存器名(如RAX),也会触发该错误。

修正后的命令示例

方案1:使用更可靠的tracepoint探针(推荐)

tracepoint上下文可直接通过args->id获取系统调用号,无需操作寄存器:

bpftrace -e 'tracepoint:syscalls:sys_enter_* /pid == cpid/ { printf("SYS %d\n%s\n----\n%s\n\n", args->id, kstack, ustack) }' -c /bin/ls

方案2:使用标准kprobe探针

针对x86_64的系统调用入口探针__x64_sys_*,通过regs->rax获取系统调用号:

bpftrace -e 'kprobe:__x64_sys_* /pid == cpid/ { printf("SYS %lx\n%s\n----\n%s\n\n", regs->rax, kstack, ustack) }' -c /bin/ls

补充说明

若仍存在寄存器识别问题,建议升级bpftrace到最新稳定版本,新版本对寄存器访问的兼容性和稳定性更好。

内容的提问来源于stack exchange,提问作者joachim Bose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 13:42:40