这是一个经典问题。我想了解特定系统调用失败的原因。是否可以显示系统调用的内核堆栈跟踪:
- 当返回非零或为负数时(它依赖于 syscall 来知道何时失败,也许我们应该根据失败来判断
errno
) - 并且当执行到达返回指令时?
已尝试使用trace
/trace-bpfcc
来自bcc-tools
(Fedora)/ bpfcc-tools
(Ubuntu):
$ sudo /usr/sbin/trace-bpfcc -K 'r::do_sys_open "%llx", retval'&
$ touch /root # As normal user
15979 15979 touch do_sys_open fffffffffffffffe
kretprobe_trampoline+0x0 [kernel]
do_syscall_64+0x5a [kernel]
entry_SYSCALL_64_after_hwframe+0x44 [kernel]
但堆栈跟踪毫无意义。