gpt4 book ai didi

c - GCC 中的内联汇编,通过表达式指定偏移量

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:07 25 4
gpt4 key购买 nike

不太确定如何命名这个标题,但是我想模拟这段代码:

asm("movl %%fs:0x30, %0" : "=r" (peb) : : );

但我想在 C 中可变地指定偏移量

尝试:

    int mee = 48;
asm("movl %%fs:%1, %0"

: "=r" (peb)
: "r" (mee)
:
);

错误是错误的内存操作数“%eax”

最佳答案

对于您所写的内容,编译器将第一个操作数转换为 %fs:%eax,因为它选择 %eax 作为保存 值的寄存器>我。我认为您尝试使用的寻址模式是 base:offset 并且偏移量必须是 value 而不是寄存器。这就是错误“错误的内存操作数”的原因。它适用于 %fs:0x30 情况,因为 0x30 是立即数。

要使用寄存器 %eax 作为偏移量,请尝试取消引用它 %%fs:(%1) 以获取寄存器中的值 :

       int mee = 48;
asm("movl %%fs:(%1), %0" : "=r" (peb) : "r" (mee) :);

另见 this guide ,其中包含一些可能对内联汇编中的内存访问(以及更多)有用的示例。

关于c - GCC 中的内联汇编,通过表达式指定偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34931112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com