在我的操作系统类中,我们用C编程并且我们覆盖定时器中断,之后我们编写的定时器中断我们必须处理4个进程,但是我们需要得到进程的上下文,比如指令指针,数据段等。我们如何从c获取该信息?如果没有,我们是否还需要在C代码中使用ASM?谢谢:D
我正在使用Windows XP 32位虚拟机,并使用DOS 16位虚拟机
答案 0 :(得分:2)
是的,你几乎至少需要一点汇编语言。典型的起点是pusha
。这保留了主要的通用寄存器,因此您可以在不破坏任何关键任务的情况下工作。如果您支持FPU,您可能希望查看fsave
。您可以分别恢复popa
和frestore
。
答案 1 :(得分:0)
您可能需要使用汇编代码来执行上下文保存/恢复,除非您已经实现了getcontext
/ setcontext
等库例程。
答案 2 :(得分:0)
我相信这种技术不适用于EIP和EFLAGS,因为它们只能通过特殊说明访问。
对于DOS 16位,我不知道相当于 movl ,但我认为你明白了。
unsigned long get_ebp()
{
__asm__("movl %ebp, %eax");
}
int main()
{
printf("ebp: 0x%p\n", get_ebp());
}