该
0xe8操作码后面跟着一个符号偏移量被应用到PC(已经由时间推进到下一指令)来计算分支目标。因此
objdump,将分支目标解释为
0x671。
YASM正在渲染零,因为它可能已在该偏移量上放置了重定位,这就是它要求加载程序
puts在加载期间填充正确偏移量的方式。加载程序在计算重定位时遇到溢出,这可能表明它
puts与您的调用之间的偏移量比32位带符号偏移量所表示的偏移量还大。因此,加载程序无法修复此指令,您将当机。
66c: e8 00 00 0000显示未填充的地址。如果您在重定位表中查找,您应该在上看到重定位
0x66d。汇编器使用全零的重定位填充地址/偏移量并不少见。
此页面提示YASM有一个
WRT指令,可以控制使用
.got,
.plt等等。
根据NASM文档上的
S9.2.5 ,看起来您可以使用
CALL puts WRT ..plt(假定YASM具有相同的语法)。



