當前位置:首頁 » 編程軟體 » STL高效編程

STL高效編程

發布時間: 2022-12-31 20:47:01

『壹』 請問學c++一定要學stl么到底有什麼用處如果要學的話推薦本書,謝啦

一定要學!!!
這是Bjarne Stroustrup(C++的實現者)說的。
1. 學c++一定要學c++的標准庫,STL是標准庫的最重要的組成部分。
2. STL是前輩的智慧結晶,也是泛型編程的重要實例,學泛型編程,肯定要從STL入手了。
3. STL已經滲入了c++的每一個角落,你不必刻意區分,也不必刻意學,任何一本c++教程肯定有STL,不然一定不是C++
4. STL可以讓你在更高的抽象層次上享受編程的樂趣,而不是像c那樣貼近底層。
推薦書籍:
1. 基礎:任意一本C++教程。(C++primer 4 ; Programming Principles and Practise Using C++)
2. 專攻:(其實沒有必要,知道大概,查手冊就行了,當然,如果你好好學泛型,可以看看源碼
Effective STL。。。名字什麼的我記不住,搜一下STL pdf,一個世界的書都在那等你。

『貳』 NOI比賽中使用STL速度慢嗎

不會。只要你用對了。排序神馬的是不會TLE的。
容器提高編程速度,在ACM NOI 上是很重要的。
但如果你亂用stack你就要小心了,它不如你用數組來模擬快。
還有,隊列也可能會在擴容方面花時間。
反正用對了而且盡量在壓堆棧時壓指針就一般不會TLE。

『叄』 什麼是HOOK技術

HOOK技術是Windows消息處理機制的一個平台,應用程序可以在上面設置子程序以監視指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的。當消息到達後,在目標窗口處理函數之前處理它。鉤子機制允許應用程序截獲處理window消息或特定事件。

鉤子實際上是一個處理消息的程序段,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數先得到控制權。這時鉤子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。

/iknow-pic.cdn.bcebos.com/6f061d950a7b0208cd8255a36fd9f2d3572cc82d"target="_blank"title="點擊查看大圖"class="illustration_alink">/iknow-pic.cdn.bcebos.com/6f061d950a7b0208cd8255a36fd9f2d3572cc82d?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="https://iknow-pic.cdn.bcebos.com/6f061d950a7b0208cd8255a36fd9f2d3572cc82d"/>

(3)STL高效編程擴展閱讀:

Hook原理

Hook技術無論對安全軟體還是惡意軟體都是十分關鍵的一項技術,其本質就是劫持函數調用。但是由於處於Linux用戶態,每個進程都有自己獨立的進程空間,所以必須先注入到所要Hook的進程空間,修改其內存中的進程代碼,替換其過程表的符號地址。在Android中一般是通過ptrace函數附加進程,然後向遠程進程注入so庫,從而達到監控以及遠程進程關鍵函數掛鉤。

Hook技術的難點,並不在於Hook技術,初學者藉助於資料「照葫蘆畫瓢」能夠很容易就掌握Hook的基本使用方法。如何找到函數的入口點、替換函數,這就涉及了理解函數的連接與載入機制。

從Android的開發來說,Android系統本身就提供給了我們兩種開發模式,基於AndroidSDK的Java語言開發,基於AndroidNDK的NativeC/C++語言開發。所以,我們在討論Hook的時候就必須在兩個層面上來討論。

對於Native層來說Hook的難點其實是在理解ELF文件與學習ELF文件上,特別是對ELF文件不太了解的讀者來說;對於Java層來說,Hook就需要了解虛擬機的特性與Java上反射的使用。

『肆』 誰比較了解HOOK技術幫一下

Hook解釋
Hook是Windows中提供的一種用以替換DOS下「中斷」的系統機制,中文譯為「掛鉤」或「鉤子」。在對特定的系統事件進行hook後,一旦發生已hook事件,對該事件進行hook的程序就會受到系統的通知,這時程序就能在第一時間對該事件做出響應。
另一解釋:
鉤子(Hook),是Windows消息處理機制的一個平台,應用程序可以在上面設置子程以監視指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的。當消息到達後,在目標窗口處理函數之前處理它。鉤子機制允許應用程序截獲處理window消息或特定事件。
鉤子實際上是一個處理消息的程序段,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數先得到控制權。這時鉤子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。
Hook原理
每一個Hook都有一個與之相關聯的指針列表,稱之為鉤子鏈表,由系統來維護。這個列表的指針指向指定的,應用程序定義的,被Hook子程調用的回調函數,也就是該鉤子的各個處理子程。當與指定的Hook類型關聯的消息發生時,系統就把這個消息傳遞到Hook子程。一些Hook子程可以只監視消息,或者修改消息,或者停止消息的前進,避免這些消息傳遞到下一個Hook子程或者目的窗口。最近安裝的鉤子放在鏈的開始,而最早安裝的鉤子放在最後,也就是後加入的先獲得控制權。
Windows 並不要求鉤子子程的卸載順序一定得和安裝順序相反。每當有一個鉤子被卸載,Windows 便釋放其佔用的內存,並更新整個Hook鏈表。如果程序安裝了鉤子,但是在尚未卸載鉤子之前就結束了,那麼系統會自動為它做卸載鉤子的操作。
鉤子子程是一個應用程序定義的回調函數(CALLBACK Function),不能定義成某個類的成員函數,只能定義為普通的C函數。用以監視系統或某一特定類型的事件,這些事件可以是與某一特定線程關聯的,也可以是系統中所有線程的事件。
系統鉤子與線程鉤子
SetWindowsHookEx()函數的最後一個參數決定了此鉤子是系統鉤子還是線程鉤子。
線程勾子用於監視指定線程的事件消息。線程勾子一般在當前線程或者當前線程派生的線程內。
系統勾子監視系統中的所有線程的事件消息。因為系統勾子會影響系統中所有的應用程序,所以勾子函數必須放在獨立的動態鏈接庫(DLL) 中。系統自動將包含「鉤子回調函數」的DLL映射到受鉤子函數影響的所有進程的地址空間中,即將這個DLL注入了那些進程。
幾點說明:
(1)如果對於同一事件(如滑鼠消息)既安裝了線程勾子又安裝了系統勾子,那麼系統會自動先調用線程勾子,然後調用系統勾子。
(2)對同一事件消息可安裝多個勾子處理過程,這些勾子處理過程形成了勾子鏈。當前勾子處理結束後應把勾子信息傳遞給下一個勾子函數。
(3)勾子特別是系統勾子會消耗消息處理時間,降低系統性能。只有在必要的時候才安裝勾子,在使用完畢後要及時卸載。
Hook的應用模式
觀察模式
最為常用,像Windows提供的SetWindowHook就是典型地為這類應用准備的。而且這也是最普遍的用法。
這個模式的特點是,在事情發生的時候,發出一個通知信息。觀察者只可以查看過程中的信息,根據自己關心的內容處理自己的業務,但是不可以更改原來的流程。
如全局鉤子中,經常使用的滑鼠消息、鍵盤消息的監視等應用。金山詞霸屏幕取詞的功能是一個典型的應用(具體技術可以參考此類文章)。
注入模式
這個模式和觀察模式最大的不一樣的地方在於,注入的代碼是為了擴展原始代碼的功能業務。插件模式是此類模式的典型案例。
不管瘦核心的插件系統(如Eclipse)還是胖核心的插件系統(如Delphi、Visual Studio等IDE環境),其對外提供的插件介面都是為了擴展本身系統的功能的。
這種擴展的應用方式的典型特點,就是新的擴展代碼和原來的代碼會協調處理同類業務。
替換模式
如果針對應用目的不同,可以叫修復模式或破解模式。前者是為了修改系統中的BUG,後者是為了破解原有系統的限制。
很多黑客使用此種模式,將訪問加密鎖的DLL中的導出表,替換成自己的函數,這樣跳過對軟體的控制代碼。這類應用的難點是,找出函數的參數。
這類模式的特點是,原有的代碼會被新的代碼所替換。
前面三個是基本模式,還有很多和實際應用相關的模式。
集權模式
此類模式的出現,大都是為了在全部系統中,統一處理某類事情。它的特點不在於注入的方式,而在於處理的模式。
這個模式,大都應用到某類服務上,比如鍵盤服務,滑鼠服務,列印機服務等等特定服務上。通過統一接管此類服務的訪問,限制或者協調對服務的訪問。
比如鍵盤鎖功能的實現,就是暫時關閉鍵盤的所有應用。
這類模式的特點主要會和特點服務有關聯。
修復模式
替換模式的一種,這里強調的是其應用的目的是為了修復或擴展原有系統的功能。
破解模式
替換模式的一種,這里強調的是其應用的目的是為了跳過原有系統的一部分代碼。如加密檢測代碼,網路檢測代碼等等。
插件模式
注入模式的一種,在系統的內部直接依靠HOOK機制進行擴展業務功能。
共享模式
這類應用中,經常是為了獲取對方的數據。必然我希望獲取對方系統中,所有字元串的值。可以通過替換對方的內存管理器,導出所有字元串。
這個應用比較特殊。不過其特點在於,目的是達到系統之間的數據共享。
其實現,可能是觀察模式,也可能是替換模式。
VB中的Hook技術應用
一、Hook簡介
Hook這個東西有時令人又愛又怕,Hook是用來攔截系統某些訊息之用,例如說,我們想
讓系統不管在什麼地方只要按個Ctl-B便執行NotePad,或許您會使用Form的KeyPreview
,設定為True,但在其他Process中按Ctl-B呢?那就沒有用,這是就得設一個Keyboard
Hook來攔截所有Key in的鍵;再如:MouseMove的Event只在該Form或Control上有效,如果希望在Form的外面也能得知Mouse Move的訊息,那隻好使用Mouse Hook來欄截Mouse
的訊息。再如:您想記錄方才使用者的所有鍵盤動作或Mosue動作,以便錄巨集,那就
使用JournalRecordHook,如果想停止所有Mosue鍵盤的動作,而放(執行)巨集,那就
使用JournalPlayBack Hook;Hook呢,可以是整個系統為范圍(Remote Hook),即其他
Process的動作您也可以攔截,也可以是LocalHook,它的攔截范圍只有Process本身。
Remote Hook的Hook Function要在.Dll之中,Local Hook則在.Bas中。
在VB如何設定Hook呢?使用SetWindowsHookEx()
Declare Function SetWindowsHookEx Lib 'user32' Alias 'SetWindowsHookExA' _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
idHook代表是何種Hook,有以下幾種
Public Const WH_CALLWNDPROC = 4
Public Const WH_CALLWNDPROCRET = 12
Public Const WH_CBT = 5
Public Const WH_DEBUG = 9
Public Const WH_FOREGROUNDIDLE = 11
Public Const WH_GETMESSAGE = 3
Public Const WH_HARDWARE = 8
Public Const WH_JOURNALPLAYBACK = 1
Public Const WH_JOURNALRECORD = 0
Public Const WH_KEYBOARD = 2
Public Const WH_MOUSE = 7
Public Const WH_MSGFILTER = (-1)
Public Const WH_SHELL = 10
Public Const WH_SYSMSGFILTER = 6
lpfn代表Hook Function所在的Address,這是一個CallBack Fucnction,當掛上某個
Hook時,我們便得定義一個Function來當作某個訊息產生時,來處理它的Function
,這個Hook Function有一定的叄數格式
Private Function HookFunc(ByVal ncode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
nCode 代表是什麼請況之下所產生的Hook,隨Hook的不同而有不同組的可能值
wParam lParam 傳回值則隨Hook的種類和nCode的值之不同而不同。
因這個叄數是一個 Function的Address所以我們固定將Hook Function放在.Bas中,
並以AddressOf HookFunc傳入。至於Hook Function的名稱我們可以任意給定,不一
定叫 HookFunc
hmod 代表.DLL的hInstance,如果是Local Hook,該值可以是Null(VB中可傳0進去),
而如果是Remote Hook,則可以使用GetMoleHandle('.dll名稱')來傳入。
dwThreadId 代表執行這個Hook的ThreadId,如果不設定是那個Thread來做,則傳0(所以
一般來說,Remote Hook傳0進去),而VB的Local Hook一般可傳App.ThreadId進去
值回值如果SetWindowsHookEx()成功,它會傳回一個值,代表目前的Hook的Handle,
這個值要記錄下來。
因為A程式可以有一個System Hook(Remote Hook),如KeyBoard Hook,而B程式也來設一
個Remote的KeyBoard Hook,那麼到底KeyBoard的訊息誰所攔截?答案是,最後的那一個
所攔截,也就是說A先做keyboard Hook,而後B才做,那訊息被B攔截,那A呢?就看B的
Hook Function如何做。如果B想讓A的Hook Function也得這個訊息,那B就得呼叫
CallNextHookEx()將這訊息Pass給A,於是產生Hook的一個連線。如果B中不想Pass這訊息
給A,那就不要呼叫CallNextHookEx()。
Declare Function CallNextHookEx Lib 'user32' _
(ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
hHook值是SetWindowsHookEx()的傳回值,nCode, wParam, lParam則是Hook Procere
中的三個叄數。
最後是將這Hook去除掉,請呼叫UnHookWindowHookEx()
Declare Function UnhookWindowsHookEx Lib 'user32' (ByVal hHook As Long) As Long
hHook便是SetWindowsHookEx()的傳回值。此時,以上例來說,B程式結束Hook,則換A可
以直接攔截訊息。
KeyBoard Hook的範例
Hook Function的三個叄數
nCode wParam lParam 傳回值
HC_ACTION 表按鍵Virtual Key 與WM_KEYDOWN同 若訊息要被處理傳0
或 反之傳1
HC_NOREMOVE
Public hHook As Long
Public Sub UnHookKBD()
If hnexthookproc <;>; 0 Then
UnhookWindowsHookEx hHook
hHook = 0
End If
End Sub
Public Function EnableKBDHook()
If hHook <;>; 0 Then
Exit Function
End If
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, App.ThreadID)
End Function
Public Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
MyKBHFunc = 0 '表示要處理這個訊息
If wParam = vbKeySnapshot Then '偵測 有沒有按到PrintScreen鍵
MyKBHFunc = 1 '在這個Hook便吃掉這個訊息
End If
Call CallNextHookEx(hHook, iCode, wParam, lParam) '傳給下一個Hook
End Function
只要將上面代碼放在VB的模塊中,用標准VB程序就可以了,當運行該程序後,就能攔截所有鍵盤操作。

『伍』 C++的STL入門教程推薦哪本

其實,一開始我也想通過一本書將STL弄通,但是漸漸發現應用才是王道。所以,建議不要太著急,先通過《C++ prime》等參考書了解STL里有什麼東西,大概是做什麼的;其次,從網上搜索vector的用法,了解了它,STL就見了「冰山一角」了,當感覺遇到的問題可以用STL里的某種存儲結構更方便的解決掉,再到網上搜這種存儲結構的用法(還有一些應用技巧也會有的);最後,如果想寫更高效的編寫代碼,建議可以考慮深讀一本介紹STL底層的書(eg:《C++程序設計語言》裘宗燕譯)(很耗時間的,在比較不錯的了解和運用STL後再看,否則令人頭疼)。
祝學習愉快!
——僅個人建議,僅供參考,選擇適合自己學習方式

『陸』 c++ stl里的向量vector非常好用,那麼它是怎麼實現的呢

這個要去翻源碼了,STL里的代碼說實話,真的看不太懂。

如果不是太糾結於具體細節,可以簡單講講基本的實現思路,大致如下:

  1. vector從功能上來講,屬於順序存儲容器,所以底層實現一般基於數組。

  2. vector使用模板元編程技術實現,具體一點就是編譯器根據使用時指定的實際類型在編譯時執行模板特化,編譯出對應的代碼。也就是說vector<int> v1; vector<double>v2;它們各對應一個特化版本的代碼。這提高了代碼的抽象級別,但是對帶來了代碼膨脹的問題。

  3. vector的重要特性之一就是實現了數組的動態遞增。簡單來說就是容器內部記錄當前的足最大容量和使用量。當添加元素的時候,如果容器類發現當前的容量已耗盡,容器類會自動地重新分配一個更大容量的數組,把當前的所有元素過去,然後釋放掉舊的數組,從而實現動態自增,這一切對使用者來說完全透明。

  4. vector提供迭代器來提供統一的遍歷訪問介面,方便與STL中的其它組件進行交互。



這其中會有很多的細節,比如:

1. 是否允許vector在必要時縮小自身容量?

2. vector容量耗盡後的遞增量是多少?

3. 是否應該提供線程安全容器?

有些東西可能真的需要去翻源碼去看才能搞明白。或者可以參考侯捷的《STL源碼剖析》。其實vector本身的實現並不會太復雜,它的實現思路也很簡單,但是設計層面的一些取捨就需要經過仔細考量了。一般來說,STL是一個足夠堅實的後盾,我們會頻繁地使用它,以構建健壯高效的軟體。能夠理解STL里的一些設計思想和實現方式,對提高我們的編程思維和編程能力會所幫助。

『柒』 誰來解釋下c++中的STL用來做什麼的,推薦點學習資料

關於STL網上資料還是很多的,以下是對初學者較為好理解的:

STL(Standard Template Library),即標准模板庫,是一個具有工業強度的,高效的C++程序庫。它被容納於C++標准程序庫(C++ Standard Library)中,是ANSI/ISO C++標准中最新的也是極具革命性的一部分。該庫包含了諸多在計算機科學領域里所常用的基本數據結構和基本演算法。為廣大C++程序員們提供了一個可擴展的 應用框架,高度體現了軟體的可復用性。這種現象有些類似於Microsoft Visual C++中的MFC(Microsoft Foundation Class Library),或者是Borland C++ Builder中的VCL(Visual Component Library)

從邏輯層次來看,在STL中體現了泛型化程序設計的思想(generic programming),引入了諸多新的名詞,比如像需求(requirements),概念(concept),模型(model),容器 (container),演算法(algorithmn),迭代子(iterator)等。與OOP(object-oriented programming)中的多態(polymorphism)一樣,泛型也是一種軟體的復用技術。

從實現層次看,整個STL是以一種類型參數化(type parameterized)的方式實現的,這種方式基於一個在早先C++標准中沒有出現的語言特性--模板(template)。如果查閱任何一個版本 的STL源代碼,你就會發現,模板作為構成整個STL的基石是一件千真萬確的事情。除此之外,還有許多C++的新特性為STL的實現提供了方便。

沒有C++語言就沒有STL,這么說毫不為過。一般而言,STL作為一個泛 型化的數據結構和演算法庫,並不牽涉具體語言(當然,在C++里,它被稱為STL)。也就是說,如果條件允許,用其他語言也可以實現之。這里所說的條件,主 要是指類似於"模板"這樣的語法機制。如果你沒有略過前一節內容的話,應該可以看到,Alexander Stepanov在選擇C++語言作為實現工具之前,早以採用過多種程序設計語言。但是,為什麼最終還是C++幸運的承擔了這個歷史性任務呢?原因不僅在 於前述那個條件,還在於C++在某些方面所表現出來的優越特性,比如:高效而靈活的指針。但是如果把C++作為一種OOP(Object- Oriented Programming,面向對象程序設計)語言來看待的話(事實上我們一般都是這么認為的,不是嗎?),其功能強大的繼承機制卻沒有給STL的實現幫上 多大的忙。在STL的源代碼里,並沒有太多太復雜的繼承關系。繼承的思想,甚而面向對象的思想,還不足以實現類似STL這樣的泛型庫。C++只有在引入了 "模板"之後,才直接導致了STL的誕生。這也正是為什麼,用其他比C++更純的面向對象語言無法實現泛型思想的一個重要原因。當然,事情總是在變化之 中,像Java在這方面,就是一個很好的例子,jdk1.4中已經加入了泛型的特性。

此外,STL對於C++的發展,尤其是模板機制,也起到了促進作用。比如: 模板函數的偏特化(template function partial specialization),它被用於在特定應用場合,為一般模板函數提供一系列特殊化版本。這一特性是繼STL被ANSI/ISO C++標准委員會通過之後,在Bjarne和Stepanov共同商討之下並由Bjarne向委員會提出建議的,最終該項建議被通過。這使得STL中的一 些演算法在處理特殊情形時可以選擇非一般化的方式,從而保證了執行的效率。STL是最新的C++標准函數庫中的一個子集,這個龐大的子集占據了整個庫 的大約80%的分量。而作為在實現STL過程中扮演關鍵角色的模板則充斥了幾乎整個C++標准函數庫.

在STL還沒有降生的"黑暗時代",C++程序員要完成前面所提到的那些功能,需要做很多事情(不過這比起C程序來,似乎好一點),程序大致是如下這個樣子的:

#include <stdlib.h>
#include <iostream.h>

int compare(const void *arg1, const void *arg2);

void main(void)
{
const int max_size = 10; // 數組允許元素的最大個數
int num[max_size]; // 整型數組

// 從標准輸入設備讀入整數,同時累計輸入個數,
// 直到輸入的是非整型數據為止
int n;
for (n = 0; cin >> num[n]; n ++);

// C標准庫中的快速排序(quick-sort)函數
qsort(num, n, sizeof(int), compare);

// 將排序結果輸出到標准輸出設備
for (int i = 0; i < n; i ++)
cout << num[i] << "\n";
}

// 比較兩個數的大小,
// 如果*(int *)arg1比*(int *)arg2小,則返回-1
// 如果*(int *)arg1比*(int *)arg2大,則返回1
// 如果*(int *)arg1等於*(int *)arg2,則返回0
int compare(const void *arg1, const void *arg2)
{
return (*(int *)arg1 < *(int *)arg2) ? -1 :
(*(int *)arg1 > *(int *)arg2) ? 1 : 0;
}

試著使用一下STL,看看效果如何。
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void main(void)
{
vector<int> num; // STL中的vector容器
int element;

// 從標准輸入設備讀入整數,
// 直到輸入的是非整型數據為止
while (cin >> element)
num.push_back(element);

// STL中的排序演算法
sort(num.begin(), num.end());

// 將排序結果輸出到標准輸出設備
for (int i = 0; i < num.size(); i ++)
cout << num[i] << "\n";
}

這個程序的主要部分改用了STL的部件,看起來要比第一個程序簡潔一 點,你已經找不到那個討厭的compare函數了。這個程序是足夠健壯的。

下面我們來看看這個絕版的C++程序。
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

void main(void)
{
typedef vector<int> int_vector;
typedef istream_iterator<int> istream_itr;
typedef ostream_iterator<int> ostream_itr;
typedef back_insert_iterator< int_vector > back_ins_itr;

// STL中的vector容器
int_vector num;

// 從標准輸入設備讀入整數,
// 直到輸入的是非整型數據為止
(istream_itr(cin), istream_itr(), back_ins_itr(num));

// STL中的排序演算法
sort(num.begin(), num.end());

// 將排序結果輸出到標准輸出設備
(num.begin(), num.end(), ostream_itr(cout, "\n"));
}

在這個程序里幾乎每行代碼都是和STL有關的(除了main和那對花 括弧,當然還有注釋),並且它包含了STL中幾乎所有的各大部件(容器container,迭代器iterator, 演算法algorithm, 適配器adaptor)

推薦資料 <<C++ Templates 中文版>>
《泛型編程與-STL中文版》
《C++ STL 中文版》
《Effective.STL中文版》

『捌』 什麼是泛型編程

我們編程時,總是先由抽象入手,抽象就是忽略他們的各自獨有的特點,找到他們共有的,能用於各種類型的思維方法。泛型無非是一種抽象的模板罷了,很好理解的一種抽象上的概念,不要怕他。

『玖』 軟體hook是什麼

軟體HOOK即鉤子函數,鉤子函數是Windows消息處理機制的一部分,通過設置「鉤子」,應用程序可以在系統級對所有消息、事件進行過濾,訪問在正常情況下無法訪問的消息。

鉤子的本質是一段用以處理系統消息的程序,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數先得到控制權。這時鉤子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。

HOOK技術在windows系統下編程,應該會接觸到api函數的使用,常用的api函數大概有2000個左右。今天隨著控制項,stl等高效編程技術的出現,api的使用概率在普通的用戶程序上就變得越來越小了。當諸如控制項這些現成的手段不能實現的功能時,我們還需要藉助api。

熱點內容
rmijava 發布:2025-09-18 08:38:26 瀏覽:18
sql軟體和伺服器怎麼連接 發布:2025-09-18 08:27:47 瀏覽:937
手機java模擬器 發布:2025-09-18 07:13:29 瀏覽:418
linux線程的棧大小 發布:2025-09-18 07:09:42 瀏覽:635
廢舊電腦做linux伺服器 發布:2025-09-18 07:06:50 瀏覽:265
終端配置怎麼寫 發布:2025-09-18 06:44:42 瀏覽:804
ftp手機登陸 發布:2025-09-18 06:43:04 瀏覽:767
emc存儲800電話 發布:2025-09-18 06:32:49 瀏覽:964
c語言編程與設計 發布:2025-09-18 06:09:15 瀏覽:724
2016年預演算法 發布:2025-09-18 06:07:05 瀏覽:625