나는 보았다이것답은 스택 추적을 기반으로 볼 수 있습니다.
$ 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
. 두 16진수는 모두 바이트 단위입니다.
%pB
이는 커널 구현에서 사용되는 형식 지정자 확장의 결과입니다 printf
. 함수의 끝(및 크기)이 결정되는 방법을 포함한 자세한 내용은 lib/vsprintf.c
Linux 커널 소스 코드를 참조하세요.kernel/kallsyms.c
이는 [<0xffffffff81012b72>]
동일한 save_stack_trace_tsk+0x22
커널 주소이지만 원시 형식입니다.
이것은 항상 [<0>]
최신 커널에 있습니다.이것변화.