我们假设.data部分有以下项目:
0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000
Run Code Online (Sandbox Code Playgroud)
在代码中,
mov $0x1234, %eax
mov 0x1238, %ebx
Run Code Online (Sandbox Code Playgroud)
我相信使用$符号,它将是常数,因此%eax将具有内存地址,但%ebx呢?
两条指令究竟有什么不同?
区别在于$它是数值而没有$它是地址
如果指令的参数没有任何特殊标记(例如%表示寄存器或$表示数字常量),那么它就是内存访问.以下是:
Run Code Online (Sandbox Code Playgroud)movl 10, %eax movl foo, %eax对应于intel语法:
Run Code Online (Sandbox Code Playgroud)mov eax, [10] mov eax, [foo]要使用数字常量,或使用标签的地址,有$运算符:
Run Code Online (Sandbox Code Playgroud)movl $10, %eax movl $foo, %eax在Intel语法中:
Run Code Online (Sandbox Code Playgroud)mov eax, 10 mov eax, offset foo