l
freeloader
記憶體布局
0000:0000 - 0000:0fff:
中斷向量表和
bios
資料0000:1000 - 0000:6fff:
實模式的棧記憶體
0000:7000 - 0000:7fff:
命令列(multiboot)
0000:8000 - ***x:***x: freeloader
程式和資料
***x:***x - 7000:7fff:
隨機分配的堆記憶體
7000:8000 - 7000:ffff:
保護模式的棧記憶體
8000:0000 - 8000:ffff:
檔案系統讀取的記憶體緩衝區
9000:0000 - 9000:ffff: bios
中斷13h
讀取資料緩衝區
a000:0000 - ffff:ffff: 保留l
ntoskrnl.exe
和hal.dll
記憶體布局
freeldr.sys
會把ntoskrnl.exe
載入到記憶體實體地址
8m開始位置,它的虛擬位址是
0xc0000000
。接著會載入分析
ntoskrnl.exe
檔案,從
ntoskrnl.exe
檔案裡分析它,並找到所有需要載入的動態連線庫,把這些庫全部載入到後面,也就是跟著
ntoskrnl.exe
ntoskrnl.exe
之前,已經進入保護模式狀態,否則是訪問不了大於1m的記憶體空間的。載入
ntoskrnl.exe
和它所依賴的
dll檔案之後,就把很多引數傳送給
ntoskrnl.exe
,跳轉到
ntoskrnl.exe
裡面執行,這樣就進入作業系統核心執行了。
ntoskrnl.exe
所依賴的dll如下圖所示:
reactos作業系統實現 178
sendmessagew函式主要用來向視窗傳送訊息。下面就是它的實現 001 lresult winapi 002 sendmessagew hwnd wnd,003 uint msg,004 wparam wparam,005 lparam lparam 006 028 029 填寫訊息結構。03...
reactos作業系統實現 187
隨著全球化的發展,開發軟體都是面向多語言的環境。目前大多數程式都是採用不同字型來顯示不同語言的辦法,那麼有沒有一種更好的辦法,一種字型就可以解決全球語言的顯示呢?答案肯定的,它就是採用邏輯字型ms shell dlg和ms shell dlg2。比如開發應用程式時,就看到在資源裡可以設定ms she...
reactos作業系統實現 193
selectobject函式是將物件選定到指定的裝置場境中。具體實現 如下 001 hgdiobj 002 winapi 003 selectobject hdc hdc,004 hgdiobj hgdiobj 005 016 獲取選擇dc的物件正確的控制代碼。017 hgdiobj gdifixu...