我想了解內核並嘗試打印一些組成內核格局的基本數據結構的一些時間,但不成功。我的問題是,給定一個內存地址,我希望能夠打印該地址的內容。從指定的內核訪問內核內存
例如,我有一個函數來確定IDT的位置。它返回(void *)
的訂單0xffff81b8c0000fff
。但是,每當我嘗試printk
那個地址時,結果都是內核恐慌。我知道有防止從用戶空間訪問內核內存的保護措施,但我試圖在start_kernel內部執行此操作,在那裏我會認爲它們是可讀的。
的代碼是:
idt_ptr = sidt(); // returns (void *)
printk(KERN_INFO "680: IDT TABLE, FIRST ENTRY\n");
//entry is 64 bits
printk(KERN_INFO "680: %llx\n", *(unsigned long long *)idt_ptr);
下面是使這一嘗試後發生的核恐慌的末尾:
看來我需要的讀訪問的信號,但這不是一個任意的地址嗎?
從我在操作系統開發方面的經驗來看,好像是觸發了頁面錯誤。當您嘗試訪問您不應該或不存在的分頁內存時,會發生這種情況。不幸的是,我不知道更多我可以說幫助你。 – user99545 2012-04-16 02:33:59