通过执行内嵌汇编asm获取gdtr内容。由于64位X86架构的gdtr有80(64+16)位,需要10个字节的内存来进行存储。
#include<stdio.h>
#define LEN 10
int main()
{
unsigned char ch[LEN];
int i;
printf("***\n");
printf("null:");
for(i = 0; i < LEN; i++){
ch[i] = 0;
printf("%02X",ch[i]);//打印数组ch初始化内容
}
printf("\n***\n");
asm volatile("sgdt %0" : "=m" (ch));//获取gdtr寄存器内容并存入ch数组中
//注意,gdtr寄存器的内容从高位到低位依次存入到ch[0]-ch[9]
printf("value_gdtr:");
for(i = 0; i < LEN; i++){
printf("%02X",ch[i]);//打印ch数组内容
}
printf("\n***\n");
return 0;
}
代码执行结果: