内联汇编中的方括号

时间:2015-06-07 20:10:12

标签: c assembly inline-assembly

我尝试在lea rax, [rip]程序中使用c。我的计划如下:

...
asm volatile ("lea %%rax, %[rip]"
             :);
...

但是,程序无法编译,抛出错误:undefined name operand。我的平台是x86-64架构上的Ubuntu 1404(作为虚拟机)。

1 个答案:

答案 0 :(得分:3)

为了在使用GCC的内联汇编中使用RewriteRule ^(.*)$ /index\.php?var2=%1 [R=301,L,QSA],您需要将其转换为AT& T语法并正确引用它,因此%字符不会被解释为操作数替换。例如:

lea rax, [rip]

请注意,由于这实际上没有做任何有用的事情,你无法访问C代码中存储在RAX中的值,你应该指定一个输出操作数:

asm volatile ("lea (%%rip),%%rax"
          ::: "rax");

这将允许您通过变量long long ip; asm ("lea (%%rip),%0" : "=r" (ip)); 访问该值。