如何获取流程信息?

时间:2011-03-12 00:22:55

标签: c assembly operating-system dos

在我的操作系统类中,我们用C编程并且我们覆盖定时器中断,之后我们编写的定时器中断我们必须处理4个进程,但是我们需要得到进程的上下文,比如指令指针,数据段等。我们如何从c获取该信息?如果没有,我们是否还需要在C代码中使用ASM?谢谢:D

我正在使用Windows XP 32位虚拟机,并使用DOS 16位虚拟机

3 个答案:

答案 0 :(得分:2)

是的,你几乎至少需要一点汇编语言。典型的起点是pusha。这保留了主要的通用寄存器,因此您可以在不破坏任何关键任务的情况下工作。如果您支持FPU,您可能希望查看fsave。您可以分别恢复popafrestore

答案 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());
}