我正在尝试验证和理解在模拟框架中执行的指令。模拟步骤如下:

执行指令列表包括包含在二进制和可能的内核指令中的指令。
我正在通过使用二进制文件上 objdump 的输出来验证跟踪的用户指令。它们是相等的,确认了执行的正确性。
这是上图中指令的 objdump 输出:
对于内核指令,我必须应用初步步骤:
对于验证步骤,我使用与用户指令相同的方法,将 linux 内核映像的 objdump 与跟踪输出进行比较。但是,我注意到了一些差异……主要是在发现内核符号指令时。这是跟踪的输出:
这是 linux 内核映像的对应部分:
从这些图片中可以看出,每个对应于内核符号的 callq(将 linux 映像的虚拟地址与 /proc/kallsyms 进行比较)在跟踪输出中被替换为 NOP DWORD(nopl 指令)。
我想要做的是理解为什么内核符号有一个 NOP DWORD 而不是 callq 。
是因为搬家吗?如果是,我如何重建此类指令的重定位?
注意:我使用 objdump-dr来检查 Linux 映像上的重定位,但输出没有改变。
我的内核指令验证方法错误?