内联汇编中的方括号
square brackets in inline assembly
我尝试在 c
程序中使用 lea rax, [rip]
。我的程序如下:
...
asm volatile ("lea %%rax, %[rip]"
:);
...
但是,程序没有编译,抛出错误:undefined name operand
。我的平台是 x86-64 架构上的 Ubuntu 1404(作为虚拟机)。
为了在 GCC 的内联汇编中使用 lea rax, [rip]
,您需要将其转换为 AT&T 语法并正确引用它,这样 % 字符就不会被解释为操作数替换。例如:
asm volatile ("lea (%%rip),%%rax"
::: "rax");
请注意,由于这实际上没有做任何有用的事情,您无法在 C 代码中访问存储在 RAX 中的值,您应该指定一个输出操作数:
long long ip;
asm ("lea (%%rip),%0"
: "=r" (ip));
这将使您可以通过变量 ip
访问值。
我尝试在 c
程序中使用 lea rax, [rip]
。我的程序如下:
...
asm volatile ("lea %%rax, %[rip]"
:);
...
但是,程序没有编译,抛出错误:undefined name operand
。我的平台是 x86-64 架构上的 Ubuntu 1404(作为虚拟机)。
为了在 GCC 的内联汇编中使用 lea rax, [rip]
,您需要将其转换为 AT&T 语法并正确引用它,这样 % 字符就不会被解释为操作数替换。例如:
asm volatile ("lea (%%rip),%%rax"
::: "rax");
请注意,由于这实际上没有做任何有用的事情,您无法在 C 代码中访问存储在 RAX 中的值,您应该指定一个输出操作数:
long long ip;
asm ("lea (%%rip),%0"
: "=r" (ip));
这将使您可以通过变量 ip
访问值。