2011-03-12 58 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()); 
}