異常分發 一 R3偵錯程式流程

2022-08-19 00:21:11 字數 1419 閱讀 6975

一 : r3偵錯程式流程

r3偵錯程式的一般流程

在寫r3除錯時,createprocess建立程序時,dwcreationflags引數使用

debug_only_this_process| debug_process除錯方式建立除錯程序, 這樣在除錯迴圈結構中通過

waitfordebugevent函式捕獲異常,根據需要對異常事件作處理(是已處理繼續執行還是未處理丟擲)。

1.0 createprocess              //建立除錯程序

引數creation flags 選擇debug型別 

2.0 除錯迴圈結構      

for(;;)  

case create_thread_debug_event: // 執行緒建立

case create_process_debug_event: //程序建立

case exit_thread_debug_event:

case exit_process_debug_event:

case load_dll_debug_event: //載入dll

case unload_dll_debug_event: //解除安裝dll

case output_debug_string_event:

} continuedebugevent(debugev.dwprocessid,

debugev.dwthreadid, dwcontinuestatus);

}

主要部分:

create_process_debug_event:建立程序時再異常位址下斷點,即oep處

load_dll_debug_event:在載入dll可以獲取模組位址資訊,以便解析函式

exception_access_violation: 記憶體斷點處理部分,根據異常異常型別位址判斷是否命中

exception_breakpoint:軟中斷(0xcc)處理部分,注意系統的int3即第一次不處理

exception_single_step: 最重要且複雜的部分,處理單步,恢復之前異常的有效性等。

大概的流程為:

那麼waitfordebugevent中獲取debug_event除錯事件資訊是從**獲取的?

備註:關於r3下除錯的實現,可以參考科銳學員發的相關帖子,這裡引用 "超然" 寫的偵錯程式供參考!

R3多執行緒

ncreatethread 是windows的api函式 sdk函式的標準形式,直截了當的建立方式,任何場合都可以使用 提供作業系統級別的建立執行緒的操作,且僅限於工作者執行緒。不呼叫mfc和rtl的函式時,可以用createthread,其它情況不要使用。因為 qcruntime中需要對多執行緒進...

R3的建立賦值刪除

1變數的建立刪除 1r語言中的變數可以儲存原子向量,原子向量組或許多robject的組合。2有效的變數名稱由字母,數字和點或下劃線字元組成。變數名以字母或不以數字後跟的點開頭。3賦值cat var.3 is var.3 列印 cat 函式將多個專案組合成連續列印輸出。4顯示現在可用用的所有變數 ls...

R3 《精力管理手冊》讀書筆記

作者張萌,時間效率管理專家,系 下班加油站 創始人 立德領導力 lead 創始人。早起或者飯後犯睏,無精打采,無法集中注意力,晚上無法快速入睡等,都是令我頭疼的事情。一直想找科學原因,以及解決方案。精力管理手冊 這本書雖然不夠深,文章的論述布局也不是那麼良好,大量的重複論述,但是很好的解答了很多問題...