Debugging jmpq怎么会在错误的地方结束?
我正在调试llvm的运行时链接器加载的代码的重新定位问题。发生的一件奇怪的事情是,调用一个通过Debugging jmpq怎么会在错误的地方结束?,debugging,assembly,x86-64,intel,Debugging,Assembly,X86 64,Intel,我正在调试llvm的运行时链接器加载的代码的重新定位问题。发生的一件奇怪的事情是,调用一个通过R_X86\u 64\u PLT32重新定位的函数后出现segfault。在这种情况下,llvm在GOT(全局偏移量表?)中创建一个条目并进行间接跳转。callq指令在这里结束: 0x7ffff7f12021 jmpq *0xded21(%rip) # 0x7ffff7ff0d48 因此,我希望下一条指令位于0x7ffff7ff0d48。现在那个位置在我看来不像是真正的
R_X86\u 64\u PLT32重新定位的函数后出现segfault。在这种情况下,llvm在GOT(全局偏移量表?)中创建一个条目并进行间接跳转。callq
指令在这里结束:
0x7ffff7f12021 jmpq *0xded21(%rip) # 0x7ffff7ff0d48
因此,我希望下一条指令位于0x7ffff7ff0d48。现在那个位置在我看来不像是真正的代码,但那是另一回事了。让我烦恼的是,经过一步,我最终来到了这里:
0x3415b20 adc %bl,0x323(%rsi)
这是一个完全不同的位置,是一个SEGFULT的源头,它甚至似乎杀死了gdb。jmpq是怎么来到这里的?是否正在进行某些截断?跳转到的地址存储在0x7ffff7ff0d48中,而不是跳转到的地址。我不知道为什么存储在那里的值会不正确(即0x3415b20)。哦,天哪,我刚刚了解到它接受下一条指令的值,并且在这个过程中完全忘记了间接寻址。