GCC中的内联asm,通过表达式指定偏移量
不确定该如何命名,但 我想模拟以下代码:GCC中的内联asm,通过表达式指定偏移量,c,gcc,mingw,inline-assembly,C,Gcc,Mingw,Inline Assembly,不确定该如何命名,但 我想模拟以下代码: asm("movl %%fs:0x30, %0" : "=r" (peb) : : ); 但是我想在C中可变地指定偏移量 尝试: int mee = 48; asm("movl %%fs:%1, %0" : "=r" (peb) : "r" (mee) : ); 错误是内存不好的操作数“%eax”对于您所写的内容,编译器将第一个操作数转换为%fs:%eax,因为它选择%eax作为保存mee值的寄存器。
asm("movl %%fs:0x30, %0" : "=r" (peb) : : );
但是我想在C中可变地指定偏移量
尝试:
int mee = 48;
asm("movl %%fs:%1, %0"
: "=r" (peb)
: "r" (mee)
:
);
错误是
内存不好的操作数“%eax”
对于您所写的内容,编译器将第一个操作数转换为%fs:%eax
,因为它选择%eax
作为保存mee
值的寄存器。我认为您尝试使用的寻址模式是base:offset,并且偏移量必须是值而不是寄存器。这就是错误“内存操作数错误”的原因。它在%fs:0x30
情况下工作,因为0x30
是一个立即值
要将寄存器%eax
用作偏移量,请尝试取消对它的引用%%fs:(%1)
,以获取寄存器中的值:
另请参见,其中包含一些内联汇编中可能有用的内存访问(及更多)示例
int mee = 48;
asm("movl %%fs:(%1), %0" : "=r" (peb) : "r" (mee) :);