读取GDTR的值

Pir*_*ate 1 x86 assembly gcc inline-assembly

我发现可能是通过SGDT汇编命令读取GDTR。我将这段程序集插入我的C代码中Error: operand type mismatch for 'sgdt'

unsigned long j;
asm("sgdt %0" : "=r"(j));
Run Code Online (Sandbox Code Playgroud)

Pet*_*des 5

sgdt只能接受一个内存操作数,而不是一个寄存器,因此必须为"=m"。操作数大小为8 + 2字节(对于),因此您需要一个结构;使用long会导致存储在对象外部。

阅读手册! https://www.felixcloutier.com/x86/sgdt