我正在阅读教科书 Randal E. Bryant, David R. O'Hallaron - Computer Systems。程序员的观点 [第 3 版](2016 年,Pearson)
我遇到了这个问题,我不确定作者是如何获得答案的。
In the following excerpts from a disassembled binary, some of the information has been replaced by Xs.
Answer the following questions about these instructions. (You do not need to know anything about the callq instruction here.)
What is the target of the je instruction below?
40042f: 74 F4 je XXXXXX
400431: 5D pop %rbp
有人可以帮助解释为什么这样解释吗?我不确定他们是如何获得 -12 和 0xf4 值的,以及为什么需要他们在这里计算 je 指令的目标。
具有立即数的跳转指令是相对的,意味着它向前或向后跳转 X 字节,而不是绝对地址,因此指令本身(或下一个,见下文)的地址很重要。
偏移操作数是有符号的,它是一个字节长(因为74
是短跳转指令,允许在 -128 和 +127 之间的跳转范围 - 有符号 8 位整数的范围)。因此 0xF4 为负(其最左边的位具有值 -0x80 而不是 +0x80 且已设置),它等于 -0xC(因为 0xF4 - 0x100 = -0xC),或十进制 -12。正如解释所说:
(因为 0xf4 是 -12 的 1 字节二进制补码表示)
他们首先如何获得 0xF4:从指令(74 F4 - 74 是操作码,je short
F4 是偏移量)。
现在,跳转的目标是通过将偏移量添加到下一条指令的地址来计算的,在本例中为 0x400431。(你可以想象处理器首先读取指令,导致指令指针前进到指令的末尾到下一条指令的开头,然后才应用从指令指针的当前位置向前或向后跳转。 )
因此,0x400431 - 0xC = 0x400425。
注意:额外的0x
输入0x0x400431
显然是书中的一个错字,它没有任何意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句