私は見たこれ答えはスタックトレースに基づいて見ることができます。
$ 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これは確かに関数名を表します。他のパラメータは何を表しますか? (おそらく0xffffffffff81012b72開始アドレスを指すアドレスsave_stack_trace_tsk+0x22)最も重要なのは、0x40が何を意味するのかです。 0x40は、この特定の関数が占める合計バイト数を表しますか?
ありがとうございます!
答え1
その中はsave_stack_trace_tsk+0x22/0x40
関数0x22
内のオフセットsave_stack_trace_tsk
であり、0x40
関数のサイズですsave_stack_trace_tsk
。両方の16進数はバイト単位です。
%pB
これはカーネル実装で使用されるフォーマット指定子拡張の結果ですprintf
。関数の終わり(およびサイズ)を決定する方法を含む詳細については、lib/vsprintf.c
Linuxカーネルのソースコードを参照してください。kernel/kallsyms.c
これは[<0xffffffff81012b72>]
同じsave_stack_trace_tsk+0x22
カーネルアドレスですが、生の形式です。
これは常に[<0>]
最新のカーネルにあります。これ変化。