溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hook編程指的是什么

發(fā)布時(shí)間:2021-03-09 14:55:55 來源:億速云 閱讀:290 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹hook編程指的是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

  Hook是Windows下的一個(gè)機(jī)制,Hook的中文意思是鉤子的意思,顧名思義,鉤子就是用來鉤東西的,就好像釣魚一樣,你把魚鉤放入魚塘里,釣到了某條魚,即便我們不把魚釣上來,我們可以通過魚鉤知道魚在做什么,比如魚飛速游動(dòng),魚鉤上的魚線會(huì)做出反應(yīng),或者魚原地不動(dòng),我們都可以通過魚鉤知道魚在做什么!

  hook編程是什么

  Windows就像一個(gè)魚塘,而程序,就是魚塘里的魚,而用來監(jiān)視這些魚的魚鉤就是Hook!

  眾所周知,Windows平臺(tái)上的程序是以事件驅(qū)動(dòng)和消息為基礎(chǔ)工作的,事件與消息是關(guān)聯(lián)的,消息的觸發(fā)來響應(yīng)事件,比如我單擊了一個(gè)應(yīng)用程序上的按鈕,那么此時(shí)這個(gè)應(yīng)用程序會(huì)觸發(fā)一個(gè)消息即為MK_LBUTTON消息被發(fā)送到系統(tǒng)的消息隊(duì)列里(觸發(fā)過程是由操作系統(tǒng)根據(jù)鼠標(biāo)點(diǎn)擊某個(gè)窗口上某個(gè)控件來觸發(fā)的,原理上是由操作系統(tǒng)觸發(fā)的消息),這些消息都是以數(shù)據(jù)結(jié)構(gòu)形式存儲(chǔ)的,每個(gè)隊(duì)列里不僅存儲(chǔ)消息還有觸發(fā)的窗口句柄等參數(shù)信息,Windows會(huì)把這些消息在轉(zhuǎn)發(fā)給指定窗口進(jìn)程下的消息隊(duì)列,然后由消息隊(duì)列來處理或者由操作系統(tǒng)來默認(rèn)處理,學(xué)過Win32編程和MFC編程的應(yīng)該比較熟悉,這里的消息流程只是僅限于Windows提供的WindowsSDK庫下的API接口開發(fā)的程序!

  就好像控件一樣,控件其實(shí)就相當(dāng)于一個(gè)窗口,只是一個(gè)需要容器的窗口,也有自己的消息循環(huán),學(xué)過COM組件開發(fā)的都知道基于COM組件開發(fā)ActiveX控件里也有一套消息循環(huán)機(jī)制和對應(yīng)的響應(yīng)事件,比如按鈕的獲取焦點(diǎn)對應(yīng)的繪圖函數(shù)!

  其它框架不一定使用此方法,比如QT的信號(hào)和槽,但QT內(nèi)部封裝了Windows消息和事件驅(qū)動(dòng)模型,原理上來說,你單擊QT上的一個(gè)按鈕還是會(huì)產(chǎn)生MK_LBUTTON消息并返回給對應(yīng)的QT程序,還是會(huì)返回到程序的消息循環(huán)隊(duì)列里去,只是QT用了信號(hào)和槽的方式來代替消息與事件,比如你用第三方軟件給QT程序上的某個(gè)按鈕發(fā)送MK_LBUTTON消息還是會(huì)響應(yīng)對應(yīng)的事件,因?yàn)镼T上的控件都是基于Windows下的SDK接口來實(shí)現(xiàn)完成的,QT的核心還是:觸發(fā)消息>系統(tǒng)消息>應(yīng)用消息,和Windows一樣,只是內(nèi)部封裝起來了!

  hook編程運(yùn)行機(jī)制

  鉤子是Windows平臺(tái)下的一個(gè)用于截獲消息的程序段,Windows內(nèi)部也在用它,當(dāng)我們使用特定函數(shù)來安裝一個(gè)鉤子時(shí),操作系統(tǒng)會(huì)給這個(gè)鉤子分配一個(gè)鉤子鏈表,并且這個(gè)鉤子就相當(dāng)于一小段程序,稱為鉤子子程序,這段程序會(huì)根據(jù)鉤子類型的不同,來實(shí)現(xiàn)不同程度的消息截獲,并且這個(gè)鉤子鏈表里包含了這個(gè)鉤子程序的地址,類型,回調(diào)函數(shù)的地址!

以上是“hook編程指的是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI