【发布时间】:2015-07-07 20:51:02
【问题描述】:
我正在为 x86 处理器创建一个操作系统,并在用户空间中执行一个程序(启用分页)。在程序开始进行系统调用('int $0x80')之前,IDTR 指向我的 IDT,0x80 的条目正确地指向我想要执行的函数。在 gdb 中,在一个“si”之后,处理器在地址 0xe05b 处结束,IDTR 完全清除(设置为 0)。
请注意,在进入用户空间之前,'int $0x80' 调用完美运行,它会进入我的函数调用。在执行人工 iret 以到达用户空间后,下一个 'int $0x80' 会导致这种奇怪的行为。
如果有帮助,这一切都是在我更改文件系统代码后开始发生的,但我看不出这与 IDTR 有什么关系。
它似乎也清除了所有其他寄存器,包括堆栈、数据和代码选择器。就像是某种恐慌
有谁知道什么可能导致处理器这样做?
提前致谢!
【问题讨论】:
标签: x86 operating-system kernel interrupt-handling