我见过这答案并根据堆栈跟踪可以看出:
$ cat /proc/<PID>/stack
[<ffffffff81012b72>] save_stack_trace_tsk+0x22/0x40
[<ffffffff81213abe>] proc_pid_stack+0x8e/0xe0
[<ffffffff81214960>] proc_single_show+0x50/0x90
[<ffffffff811cd970>] seq_read+0xe0/0x3e0
[<ffffffff811a6a84>] vfs_read+0x94/0x180
[<ffffffff811a7729>] SyS_read+0x49/0xb0
[<ffffffff81623ad2>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
据我猜测,符合
[<ffffffff81012b72>] save_stack_trace_tsk+0x22/0x40
save_stack_trace_tsk肯定是指函数名 其他参数表示什么? (也许0xffffffff81012b72指向起始地址的地址save_stack_trace_tsk+0x22)最重要的是 0x40 表示什么? 0x40 是否表示该特定函数占用的字节总数?
多谢!
答案1
其中save_stack_trace_tsk+0x22/0x40
,0x22
是函数内部的偏移量save_stack_trace_tsk
,0x40
是函数的大小save_stack_trace_tsk
。两个十六进制数字均以字节为单位。
%pB
这是内核实现使用的格式说明符扩展的结果printf
:有关详细信息,包括如何确定函数的结束(因此大小),您可以查看linux内核源代码中的lib/vsprintf.c
and 。kernel/kallsyms.c
这[<0xffffffff81012b72>]
是相同的save_stack_trace_tsk+0x22
内核地址,但采用原始形式。
这总是[<0>]
在较新的内核中,因为这改变。