我正在调试llvm运行时链接器加载的代码重定位的一些问题。发生一件奇怪的事情是在调用已通过R_X86_64_PLT32
重新定位的函数后发生段错误。在这种情况下,llvm在GOT(全局偏移表?)中创建一个条目并进行间接跳转。 callq
指令最终到达:
0x7ffff7f12021 jmpq *0xded21(%rip) # 0x7ffff7ff0d48
所以我希望下一条指令位于0x7ffff7ff0d48。现在这个位置对我来说看起来不像真正的代码,但这是另一个故事。困扰我的是,经过一步,我最终到了这里:
0x3415b20 adc %bl,0x323(%rsi)
这是一个完全不同的位置,也是一个甚至似乎杀死gdb的段错误的来源。 jmpq怎么会在这里结束?是否有一些截断?