CSAPP习题求解:已知机器码与起始地址计算JE分支指令跳转目标
x86-64 je指令跳转目标计算逻辑
核心规则
x86短跳转指令采用PC相对寻址,跳转目标计算公式为:
跳转目标地址 = 当前跳转指令的下一条指令地址 + 指令中存储的偏移量真值
两个值的来源
你提到的两个值本质是同一偏移量的不同表示:
0xF4:是je指令第二字节的原始编码,指令完整机器码为74 F4,其中74是je的操作码,F4是8位补码形式的偏移量-12:是0xF4被解释为8位有符号整数的真值:
8位有符号数的最高位为符号位,0xF4二进制为11110100,符号位为1表示负数,补码转真值的计算为0xF4 - 2^8 = 244 - 256 = -12
具体计算过程
- 先确定下一条指令地址:当前je指令地址从
0x40042f开始,总长度为2字节,因此下一条指令(也就是pop %rbp)的地址为0x40042f + 2 = 0x400431 - 代入公式计算跳转目标:
0x400431 + (-12) = 0x400431 - 0xC = 0x400425 - 最终je的跳转目标为
0x400425
内容的提问来源于stack exchange,提问作者Megan Darcy
相关产品推荐
相关产品推荐

