0x00 異常處理結構
__try
__except (filter-expression)
filter-expression為以下值
exception_execute_handler
exception_continue_search
exception_continue_execution
0x01 文件
0x02 實驗
實驗1_try
__except
(exception_execute_handler)
結果: 列印2
結論: filter-expression 為
exception_execute_handler時,
執行exception-handler block實驗2
__try
__except
(exception_continue_search)
結果: 系統報錯 結論
: exception_continue_search
不能單獨使用 實驗
3: __try
__except
(exception_continue_execution)
結果: 列印1
結論: filter-expression 為
exception_continue_execution時,
不執行exception-handler block,而是回到異常觸發點繼續執行 實驗
4 __try
__except
(exception_continue_search)
}__except
(exception_execute_handler)
結果: 列印3
結論: filter-expression 為 exception_continue_search 時,當前的 exception-handler block不執行,然後將異常交給外部的異常處理,由外部的異常處理判斷.
實驗5__try
__except
(exception_continue_search)
}__except
(exception_continue_search)
}__except
(exception_execute_handler)
結果: 列印4
結論: 進一步驗證實驗4
實驗6__try
__except
(exception_continue_search)
}__except
(exception_continue_search)
}__except
(exception_continue_search)
結果: 報錯
結論: 當前程式如果通過exception_continue_search將異常繼續丟擲,則程式會終止
實驗7__try
__except
(getexceptioncode
() == 0 ?
exception_execute_handler
: exception_continue_search)
結果: 列印4
結論: filter-expression可以為表示式,從而決定如何處理異常(例如:我們關心的則處理,不關心的可以繼續向外丟擲)實驗8
dword
filterfunction()
void
main(
void)
__except
(filterfunction())
} 結果:
列印1 3 結論
: filter-expression可以為函式,必須返回特定的值.且執行filterfunction()在執行exception-handler block
實驗9dword
filterfunction()
void
main(
void)
__finally
} __except
(filterfunction())
} 結果:
列印1 2 3 結論
: 執行順序 filter-expression> termination-handler block> exception-handler block
Windows系統異常處理
在c 中使用try catch不能捕捉作業系統丟擲的異常,如非法位址訪問 浮點異常等,而使用vc中的擴充套件特性 try except和 try finally可以捕捉這類異常.如 int func int i except exception execute handler return i vo...
Windows異常處理學習
一 處理過程 ntdll中的kidispatchexception函式會按兩次處理機會進行分發,過程 如果程式正在被除錯,那麼將異常交給使用者偵錯程式處理,如果沒有則跳過這一步 如果沒有偵錯程式或者偵錯程式沒有處理,將控制權返回到kiuserexceptiondispatcher函式,由它呼叫rtl...
windows核心基礎與異常處理
前兩日碰到了用異常處理來做加密的re題目 所以系統學習一下windows核心相關 核心層 r0 零環 核心態工作區域 大多數驅動程式 應用層 r3 使用者態工作區域 只能使用win32 api與系統互動 當使用者呼叫乙個有關i o的api時 該api封裝在乙個使用者層的dll檔案中 如kernel3...