Can you summarize the following document?
        
  

  在應用程式執行之前,物理修改可執行程式,這典型通過找到函式呼叫入口點,修改入口點使之在函式被執行前先執行其他的程式碼。另一種掛鉤的方法是修改可執行程式的輸入表(import table)。還有一種掛鉤方法是採用包裝庫,使得應用程式不需修改即可呼叫該包裝庫完成其功能,而在包裝庫中插入鉤子然後再呼叫原有的庫。

  作業系統與軟體可提供方法,在執行時插入事件鉤子。Microsoft Windows允許插入鉤子以處理或修改對話方塊、滾動條、選單等的系統事件、應用程式事件;插入、刪除、處理或修改鍵盤滑鼠事件。Linux允許類似的鉤子通過NetFilter以處理網路事件。  如果沒有上述機制或許可權,也可攔截程序的庫函式呼叫,在函式呼叫開始處注入程式碼。這可通過修改記憶體中的程序的中斷向量表或輸入表(import table)實現。

  

  C++使用虛擬函式,因此可在執行時直接修改虛擬函式表的內容來掛鉤。 Window上很多軟體庫以COM方式提供的(如DirectX), 所以有需求攔截COM呼叫的COM Hook。COM裡的介面是C++虛表的形式提供的,所以COM的Hook其實就是虛表(vtable)的Hook。ATL就是用介面替代的方式來除錯和記錄COM介面引用計數的次數

  下述例子使用JMP指令,修改windows API中的MessageBoxW函式的前6個位元組執行其他程式碼。這段程式碼編譯為DLL檔案,採用DLL注入技術讓應用程式使用。微軟提供了封裝好的Detours庫用於此目的。

  使用Netfilter鉤子修改Linux核心的網路交通。

  下例展示通過修改可執行程式的輸入地址表(IAT),把鉤子函式替代原函式。
鉤子程式設計(hooking),也稱作“掛鉤”,是計算機程式設計術語,指通過攔截軟體模組間的函式呼叫、訊息傳遞、事件傳遞來修改或擴充套件作業系統、應用程式或其他軟體元件的行為的各種技術。處理被攔截的函式呼叫、事件、訊息的程式碼,被稱為鉤子(hook)。