问题描述
我编写了以下 x86-64 程序来查看中断描述符表的基地址从哪里开始:
#include <stdio.h>
#include <inttypes.h>
typedef struct __attribute__((packed)) {
uint16_t limit;
uint64_t base;
}idt_data_t;
static inline void store_idt(idt_data_t *idt_data)
{
asm volatile("sidt %0":"=m" (*idt_data));
}
int main(void)
{
idt_data_t idt_data;
store_idt(&idt_data);
printf("IDT Limit : 0x%X\n",idt_data.limit);
printf("IDT Base : 0x%lX\n",idt_data.base);
return 0;
}
它会打印以下内容:
IDT Limit : 0xFFF
IDT Base : 0xFFFFFE0000000000
基地址似乎不正确,因为地址应该始终是物理地址,对吗?
另外,我不确定,但限制似乎太高了。我做错了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)