我尝试在lea rax, [rip]
程序中使用c
。我的计划如下:
...
asm volatile ("lea %%rax, %[rip]"
:);
...
但是,程序无法编译,抛出错误:undefined name operand
。我的平台是x86-64架构上的Ubuntu 1404(作为虚拟机)。
答案 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));
访问该值。