當使用者異常產生後,核心函式kidispatchexception並不是像處理核心異常那樣在0環直接進行處理,而是修正3環eip為kiuserexceptiondispatcher函式後就結束了
這樣,當執行緒再次回到3環時,將會從kiuserexceptiondispatcher函式開始執行
呼叫rtdispatchexception查詢並執行異常處理函式
如果rtdispatchexception返回真,呼叫zwcontinue再次進入0環,但執行緒再次返回3環時,會從修正後的位置開始執行
如果rtdispatchexception返回假,呼叫zwraiseexception進行第二輪異常分發
回到3環後執行如上所述**,通過
這個函式找到異常處理函式,找到以後,如果處理成功,就通過
回到零環,這裡解釋一下為什麼還要回到0環?
當回到3環時,在0環通過trap_frame備份到context結構體,,然後修改trap_frame的eip值,但當處理完異常之後,還需要回到原來那個位址,也就是context裡面儲存的eip值,即eip的值需要再次修正,回零環的目的也就是把修正後的eip(即context結構體)重新寫到trap_frame裡,之後就會從修正後的位置從0環回到3環(也就是原來從3環進入0環的位置)
但是如果
這個找異常處理函式沒有找到的話,那麼往下執行就會呼叫在這裡插入描述
這個函式(它的作用就是對這個異常進行第二次分發)
首先來看第一次分發(kidispatchexception是乙個庫函式,在3環和0環**實現有區別,感覺就像是用了巨集定義)
在這個函式裡面先呼叫了如下這個函式:
上圖)這個函式作用就是找乙個全域性鍊錶,這個鍊錶裡面儲存了乙個乙個異常處理函式,如果在全域性鍊錶裡面找到了異常處理函式,那麼直接返回;如果找不到當前異常處理函式,那麼就往下找,去區域性鍊錶裡面找
查詢veh鍊錶(全域性鍊錶),如果有則呼叫(與執行緒無關)
查詢seh鍊錶(區域性鍊錶,在堆疊中),如果有則呼叫
注意:與核心呼叫時的區別
veh異常的處理流程
cpu捕獲異常資訊
通過kidispatchexception進行分發(eip==kiuserexceptiondispatcher)
kiuserexceptiondispatcher呼叫rtldispatchexception
rtldispatchexception查詢veh處理函式鍊錶,並呼叫為相關處理函式
**返回kiuserexceptiondispatcher
呼叫zwcontine再次進入0環(zwcontinue呼叫ntcontinue,主要作用就是恢復_trap_frame然後通過_kiserviceexit返回到3環)
執行緒再次返回3環後,從修正後的位置開始執行
#include
#include
using
namespace std;
typedef pvoid (ntapi *fnaddvectoredexceptionhandler)
(ulong, _exception_pointers*);
fnaddvectoredexceptionhandler myaddvectoredcontinuehandler;
//veh異常處理函式只能返回兩個值
//exception_continue_execution 已處理
//exception_continue_search 未處理
long ntapi vectexcephandler
(pexception_pointers pexcepinfo)
return exception_continue_search;
}int
main()
//4.產生異常,從這裡開始
printf
("異常開始了");
getchar()
;}
實現截圖:
windows XP下的向量化異常處理
windows xp下的向量化異常處理 vectored exception handling 原作 matt pietrek 翻譯改寫 hume 冷雨飄心 首先回顧一下 seh 結構化異常處理,結構化異常處理用exception retgistration結構鏈起來的異常處理系統,那麼當異常發生時...
文字向量化
table of contents概述 word2vec nnlm c wcbow and skip gram doc2vec str2vec 文字表示是自然語言處理中的基礎工作,文字表示的好壞直接影響到整個自然語言處理系統的效能。文字向量化就是將文字表示成一系列能夠表達文字語義的向量,是文字表示的...
文字向量化
文字向量化,就是把文字轉化為向量形式。這裡用兩種方式實現本文向量,一種是tf方式,一種是tf idf方式,且這裡向量的長度就是字典的長度。計算兩個向量余弦相似度import math defcount cos similarity vec 1,vec 2 if len vec 1 len vec 2...