调用跟踪包含如下条目:
[<deadbeef>] FunctionName+0xAB/0xCD [module_name]
[<f00fface>] ? AnotherFunctionName+0x12/0x40 [module_name]
[<deaffeed>] ClearFunctionName+0x88/0x88 [module_name]
在 AnotherFunctionName 前面的问号标记代表什么意思?
调用跟踪包含如下条目:
[<deadbeef>] FunctionName+0xAB/0xCD [module_name]
[<f00fface>] ? AnotherFunctionName+0x12/0x40 [module_name]
[<deaffeed>] ClearFunctionName+0x88/0x88 [module_name]
在 AnotherFunctionName 前面的问号标记代表什么意思?
ClearFunctionName+0x88
处被调用(或在x86上,在该位置之前立即调用的函数)。arch/x86/kernel/dumpstack.c
中。看一下它的代码,我将尝试在下面解释它。print_context_stack()
似乎执行以下操作。dump_stack()
中本地变量的地址。while (valid_stack_ptr …){…stack++}
),并检查其所指向的内容是否也可能是内核代码中的地址(if (__kernel_text_address(addr))...
)。这样,它试图找到这些函数调用时推送到堆栈上的函数返回地址。当然,并不是每个看起来像返回地址的 unsigned long 类型的值都实际上是返回地址。因此,该函数试图进行检查。如果内核代码中使用了帧指针 (%ebp/%rbp 寄存器用于配置 CONFIG_FRAME_POINTER),则可以使用它们来遍历函数的堆栈帧。函数的返回地址位于帧指针正上方 (即在 %ebp/%rbp + sizeof(unsigned long)
处)。print_context_stack 正是检查这一点。