最近學習驅動開發,在寫繞過inline hook的**時,有個問題困擾了我一天,最後發現原來是在內嵌彙編時,沒有使用_declspec(naked)導致的,看來是偶的基礎知識掌握的不牢固啊(得補一下了,磨刀不誤砍柴功),在此給記錄一下,給自己乙個警示。
對於jmp型別的hook, 如果自己的過程沒有使用_declspec(naked),那麼系統會自動給新增一些額外的**,控制堆疊平衡,但是這些額外的**會破壞被hook函式的堆疊。
對於call型別的hook,如果使用_declspec(naked)修飾的話,要注意自己恢復堆疊平衡。
_declspec(naked)修飾可以生成乙個「裸」函式, 使用後c編譯器將生成不含函式框架的純彙編**,裸函式中什麼都沒有,所以也不能使用區域性變數,只能全部用內嵌彙編實現。
下面是網上對_declspec(naked) 的介紹:
_declspec(naked)
就是告訴編譯器,在編譯的時候,不要優化**,通俗的說就是
沒**,完全要自己寫 比如
#define naked
__declspec(naked)
void naked code(void)
} 使用__declspec(naked)關鍵字定義函式:
1,使用 naked 關鍵字必須自己構建 ebp 指標 (如果用到了的話);
2,必須自己使用 ret 或 ret n 指令返回 (除非你不返回);
_delcspec(naked)用在驅動編寫,c語言內嵌彙編完成一些特定功能。
使用GraphEdit使用
1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....
MySQL使用學習使用 mysql學習使用
1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...
學習使用CSDN markdown使用
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...