VEH(向量化異常處理)

2021-10-19 12:21:50 字數 2181 閱讀 7120

當使用者異常產生後,核心函式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...