在我的操作系統類中,我們使用C語言進行編程,並且重寫了定時器中斷,然後我們編寫了定時器中斷,我們必須處理4個進程,但是我們需要獲取進程的上下文,如指令指針,數據段等。我們如何從c獲取這些信息?如果沒有,我們是否也需要在C代碼中使用ASM?感謝:d如何獲取過程信息?
我使用虛擬框與Windows XP 32位,並使用DOS的16位虛擬機
在我的操作系統類中,我們使用C語言進行編程,並且重寫了定時器中斷,然後我們編寫了定時器中斷,我們必須處理4個進程,但是我們需要獲取進程的上下文,如指令指針,數據段等。我們如何從c獲取這些信息?如果沒有,我們是否也需要在C代碼中使用ASM?感謝:d如何獲取過程信息?
我使用虛擬框與Windows XP 32位,並使用DOS的16位虛擬機
是的,你幾乎需要至少一點彙編語言。典型的起點是pusha
。這保留了主要的通用寄存器,因此您可以在不破壞任何關鍵任務的情況下工作。如果你支持FPU,你可能會想看看fsave
。你分別用popa
和frestore
恢復那些。
你可能需要使用匯編代碼來執行上下文保存/恢復,除非你有已經實現的庫例程,如getcontext
/setcontext
。
我可以在哪裏獲得具有該功能的圖書館? – alfjos89 2011-03-12 00:50:04
@ alfjos89:那些通常會在你的C標準庫中,但是你可以下載各種協同/上下文切換庫來做類似的事情。 – 2011-03-12 19:11:51
我相信這種技術不適用於EIP和EFLAGS,因爲它們只能通過特殊說明進行訪問。
我不知道相當於movl爲DOS 16位,但我認爲你明白了。
unsigned long get_ebp()
{
__asm__("movl %ebp, %eax");
}
int main()
{
printf("ebp: 0x%p\n", get_ebp());
}
查看一些問題並接受一些答案。 – karlphillip 2011-03-12 01:23:39