赞
踩
leaq 这个指令是烦人的,leaq (address), %rax, 首先(address)表示获取某个地址的值,而leaq(load effective address)又是去取得一个值的地址(&value),那么取得的结果就是address, 所以本质就是把address放到寄存器中。这个好处是可以利用一些简单的加法和乘法,减少指令个数。可以做一下书里的练习题。
这里有个疑惑记录一下,140页书里有一行代码:7f f8 // jg 5
跳转指令相对位置编码很好理解,但是书里把0xf8翻译成-8我就很不理解,
问:为啥反汇编的话这么确定就把这个二进制当作补码处理来翻译?
查阅资料有人说汇编后的二进制数都是补码,这个姑且先这么看,权威资料没查到。
问:如果0xf8被翻译成-8,那么248这个数值二进制咋表示?
chat-gpt解释如下:其实jmp分为相对短跳转(short jump)和相对长跳转(near jump),二者的汇编虽然都是用jmp这三个字母,但是汇编器会根据输入立即数的大小翻译成不同的二进制, 指令分别被翻译EB(短跳转) 和 E9(长跳转), 二者立即数范围分别是1字节(-128~+127)和4字节 (-2,147,483,648 ~ +2,147,483,647)。举个例子:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。