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) :);