此问题在此处已有答案:
What does an asterisk * before an address mean in x86-64 AT&T assembly?(7个答案)
昨天关门了。
我注意到,与 GNU as(GAS)不同,Rust使用的LLVM内部汇编程序不允许使用jmp %rax
。编译器错误为“mnemonic without a size suffix”。如果我尝试添加像jmpq %rax
这样的大小后缀,它也不起作用。
最小再现器:
core::arch::global_asm!(
"foo:",
"mov $ffffffff88000000, %rax",
"jmp %rax"
, options(att_syntax));
fn main() {
}
当我用GAS编译这个汇编代码时,objdump
显示为jmpq *%rax
。
1条答案
按热度按时间wz1wpwve1#
GAS和LLVM的内部汇编程序有细微的区别,GAS似乎允许更多的“马虎”,而LLVM更精确。
我不知道这是什么意思,但是将该行更改为
jmp *%rax
(带 *)就解决了这个问题。