之前寫過雙機除錯環境的搭建,一般用來除錯驅動這樣核心態的東西,今天遇到乙個問題,就是在核心態的情況下怎麼給使用者態的程式下斷點?也就是在核心態怎麼除錯使用者態的程式,比如想要給createprocessw這個api下斷點怎麼整?因為createprocessw這個api是位於kernel32.dll這個模組裡邊的,但是這個模組是屬於使用者態的模組,核心會話不會載入這個模組。
使用的示例:自己寫的demo,用od附加之後,給createprocessw下斷點(其實沒必要使用od附加)
接下來開始展示:
1、搭建雙機除錯環境
2、執行!process 0 0 目標程序名 命令(!process命令可以列印出活動程序的資訊。第乙個引數是要列印的eprocess的位址,如果指定為0則表示列印所有的程序。第二個引數用於說明列印程序資訊的詳細級別。指定0則表示列印最簡單的資訊。)
3、獲取到目標程序的詳細資訊之後,執行.process /p +eprocess資訊(上邊獲取到的)執行該命令的作用是切換到目標應用程式的位址空間
.reload /f /user
15、檢視此時載入的模組(kernel32.dll模組是否被成功載入)
6、下目標斷點
需要注意 這個時候,下了目標斷點之後,開始執行新的程序之後,並不會斷下來,也就是命不中斷點,需要再新增一條命令
.process /i /p 目標程序的eprocess
1之後,正常下斷點,執行g命令就可以正常命中斷點了
侵入式除錯和非侵入式除錯
侵入式:在採用侵入式的方式進行除錯使用者態的程序的時候,預設使用windows的函式:debugactiveprocess 在偵錯程式和被除錯程式之間建立乙個連線,使得可以檢視修改程序的記憶體,設定斷點,或者實現其他的一些除錯功能。同時,使用侵入式的除錯方式,可以在不殺死目標程序的情況下退出除錯狀態,只需要退出偵錯程式,中斷連線就好。
非侵入式:使用這種方式的時候,偵錯程式只是採用簡單的openprocess函式來開啟程序,來達到檢查或者修改記憶體的目的,但是需要注意的是,使用這種方式來進行除錯的時候,不能實現偵錯程式下斷點的功能。
參考:
用windbg核心模式除錯使用者態程式
很激動。解決我乙個除錯驅動非常頭痛的問題。在這個過程中拜讀了 znsoft的文章和高階除錯的 文章,的確很牛。但是裡面還有很多沒有說到的地方,這裡在補充下 1.pdb檔案要和原始碼還有程式是乙個版本。在windbg中設定好pdb檔案和原始碼的目錄。2.bp hello add 下斷點 3.在要除錯的...
使用者態 核心態
前戲 我們知道計算機主要分為三部分,硬體,作業系統和應用程式,然後硬體的頭腦cpu才是控制核心態和使用者態的大佬 作業系統 作業系統是直接和硬體打交道的,作業系統在核心態下執行,從而可以訪問整個硬體 應用程式 應用程式直接和使用者互動,但是應用程式不能直接操作硬體,應用程式在使用者態下執行,但是有時...
核心態與使用者態
核心態與使用者態是作業系統的兩種執行級別,intel cpu提供ring0 ring3三種級別的執行模式。ring0級別最高,ring3最低。其中特權級0 ring0 是留給作業系統 裝置驅動程式 使用的,它們工作於系統核心態 而特權極3 ring3 則給普通的使用者程式使用,它們工作在使用者態。執...