Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging jmpq怎么会在错误的地方结束?_Debugging_Assembly_X86 64_Intel - Fatal编程技术网

Debugging jmpq怎么会在错误的地方结束?

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。现在那个位置在我看来不像是真正的

我正在调试llvm的运行时链接器加载的代码的重新定位问题。发生的一件奇怪的事情是,调用一个通过
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)。哦,天哪,我刚刚了解到它接受下一条指令的值,并且在这个过程中完全忘记了间接寻址。