我正在调试我写的驱动程序中的问题。我为此提供的内核核心文件在uart_remove_one_port
中显示了一个问题,它是serial_core.c中的一个函数(即内核的一部分)。我在objdump -d -S
文件上运行了vmlinux
,用于内核我正在运行以更好地查看此内容。我有以下内容:
ffffffff813cce60: 48 8b 83 c8 00 00 00 mov 0xc8(%rbx),%rax
ffffffff813cce67: 48 89 df mov %rbx,%rdi
ffffffff813cce6a: ff 90 98 00 00 00 callq *0x98(%rax)
我对callq
指令正在做什么感到有点困惑。 callq *0x98(%rax)
,似乎在x86_64 stuff as mentioned here中使用了一些表达式。但是,我不确定&#39; *&#39;人物做到了。我也没有找到足够的答案。它是间接,因为我在C int *p = <something_real>; *p = 5;
中使用它还是在增加某些东西?我相信这条指令mov 0xc8(%rbx),%rax
意味着&#34;将0xc8添加到rbx寄存器并将结果推送到rax。&#34;借鉴这个,这是另一条指令说,&#34;将0x98添加到rax然后通过调用该函数取消引用?&#34;