2011-03-12 54 views
1

在我的操作系统类中,我们使用C语言进行编程,并且重写了定时器中断,然后我们编写了定时器中断,我们必须处理4个进程,但是我们需要获取进程的上下文,如指令指针,数据段等。我们如何从c获取这些信息?如果没有,我们是否也需要在C代码中使用ASM?感谢:d如何获取过程信息?

我使用虚拟框与Windows XP 32位,并使用DOS的16位虚拟机

+0

查看一些问题并接受一些答案。 – karlphillip 2011-03-12 01:23:39

回答

2

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

0

你可能需要使用汇编代码来执行上下文保存/恢复,除非你有已经实现的库例程,如getcontext/setcontext

+0

我可以在哪里获得具有该功能的图书馆? – alfjos89 2011-03-12 00:50:04

+0

@ alfjos89:那些通常会在你的C标准库中,但是你可以下载各种协同/上下文切换库来做类似的事情。 – 2011-03-12 19:11:51

0

我相信这种技术不适用于EIP和EFLAGS,因为它们只能通过特殊说明进行访问。

我不知道相当于movl为DOS 16位,但我认为你明白了。

unsigned long get_ebp() 
{ 
    __asm__("movl %ebp, %eax"); 
} 

int main() 
{ 
    printf("ebp: 0x%p\n", get_ebp()); 
}