導航:首頁 > 編程系統 > linuxftp鉤子函數

linuxftp鉤子函數

發布時間:2021-04-07 21:47:30

1. 驅動函數鉤子是什麼東西

Windows的鉤子函數分兩種,一種是全局的,一種是線程的。全局的鉤子函數可以捕獲任何應用程序的消息,但必須是標準的DLL才能實現,VB做不了。VB可以實現線程的,就是當前應用程序的消息,這對滑鼠消息的捕捉有影響。 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是鉤子類型,如WH_KEYBOARD捕捉鍵盤消息,而WH_MOUSE捕捉滑鼠消息。hmod用於全局鉤子,VB要實現鉤子,必須設為0。dwThreadId用於線程鉤子VB中可以設置為App.ThreadID。lpfn為鉤子函數,在VB中可以使用AddressOf獲得鉤子函數的地址。這個函數因為鉤子類型不同而有所不同。如鍵盤鉤子為: Public Function KeyboardProc(ByVal nCode As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long 如果Code不為0,鉤子函數必須調用CallNextHookEx,將消息傳遞給下面的鉤子。wParam和lParam不是按鍵。

2. 我初學linux 網路編程,在編寫鉤子函數時預處理的#include<linux/mole.h>提示找不到,為什麼

你是在哪裡編寫的?

3. 鉤子函數的鉤子函數

一共有兩種類型的鉤子:局部的和遠程的。
局部鉤子僅鉤掛您自己進程的事件。
遠程的鉤子還可以將鉤掛其它進程發生的事件。
遠程的鉤子又有兩種:
鉤子分兩種, 一種是系統級的全局鉤子; 一種是線程級的鉤子.全局鉤子函數需要定義在 DLL 中, 線程級的鉤子開始比較簡單.
其實鉤子函數就三個:
設置鉤子: SetWindowsHookEx
釋放鉤子: UnhookWindowsHookEx
繼續鉤子: CallNextHookEx
在線程級的鉤子中經常用到 GetCurrentThreadID 函數來獲取當前線程的 ID

4. 嵌入式實時操作系統中鉤子函數怎麼寫

個樓主一個實例:
uCOS:時鍾節拍代碼追蹤

uCos中的時鍾節拍可以基於軟中斷實現或者基於時鍾節拍任務(但是這個任務要給予很高的優先順序)
對於STM32(Cortex-M3)來說這個就是SysTick中斷0x0000003C
當中斷發生時調用OS_CPU_SysTickHandler函數,
這樣就提供了系統的時鍾節拍

uCos中擴展的應用都是在HOOK函數中實現的,
程序關於Time的調用,
首先都是基於OSTime的,

其次由於在OSTimeTick函數中預留了OSTimeTickHook()函數
這樣可以方便我們在OSTimeTickHook()函數中添加我們自己的代碼實現在系統中的調用
由於OSTimeTickHook()函數在OSTimeTick函數中,
所以每次Tick時都會調用這個函數,所以也就給了我們可以添加每次時鍾Tick都被系統
調用的機會。
由於OSTimeTickHook()函數中預留了App_TimeTickHook()函數提供給應用層的程序實現相應的擴充,
這樣就可以在應用層APP中,擴展一些我們想要的功能,例如Ctimer函數。
同時函數指針的應用更大程度的擴展了,我們可以擴展函數的功能的范圍。

在系統啟動多任務後
的第一個任務TaskStart中(即調用過OSStart()函數後)調用OS_CPU_SysTickInit()完成對系統Tick的設定。
在設置Tick的時候,是由OS_CPU_SysTickClkFreq函數來獲得硬體的時鍾頻率
通過除以OS_TICKS_PER_SEC得到一個定時中斷時間,以後每隔一定的時間中斷一次。

追蹤的過程
App_TimeTickHook()(app.c)--OSTimeTickHook()(os_cpu_c.c)--OSTimeTick()(cpu_core.c) \
--OS_CPU_SysTickHandler()(os_cpu_c.c)--DCD OS_CPU_SysTickHandler(vectors.s)

在追尋代碼路徑的過程中,
沿著最容易看到的代碼追蹤到它的上一級代碼,
直到它的最底層實現,
這樣就可以把與這個相關的系統上的東西都可以了解了。

5. linux內核源碼中如何載入自己的鉤子函數

(但不總是)位於 /usr/src/linux-。我們不會研究得過於詳細,因為 Linux 源代碼經常會發生變化,但是,我們將嘗試讓給出的信息足以找出特定驅動程序或函數的位置。

Makefile:這個文件是整個源代碼樹的頂層 makefile。它定義了很多實用的變數和規則,比如默認的 gcc 編譯標記。

Documentation/:這個目錄中包含很多關於配置內核、運行 ramdisk 等任務的實用信息(但通常是過時的)。不過,與不同配置選項相應的幫助條目並不在這里 —— 它們在每個源代碼目錄的 Kconfig 文件中。

arch/:所有與體系結構相關的代碼都在這個目錄以及 include/asm- 目錄中。在此目錄中,每種體系結構都有自己的目錄。例如,用於基於 PowerPC 的計算機的代碼位於 arch/ppc 目錄中。在這些目錄里,可以找到底層內存管理、中斷處理、早期初始化、匯編常式,等等。

crypto/:這是內核本身所用的加密 API。

drivers/:按照慣例,在此目錄的子目錄中可以找到運行外圍設備的代碼。包括視頻驅動程序、網卡驅動程序、底層 SCSI 驅動程序,以及其他類似的驅動程序。例如,在 drivers/net 中可以找到大部分網卡驅動程序。將一類驅動程序組合在一起的某些更高層代碼,可能會(也可能不會)像底層驅動程序本身那些包含在同一目錄中。

fs/:通用文件系統的代碼(稱做 VFS,即 Virtual File System)和各個不同文件系統的代碼都可以在這個目錄中找到。ext2 文件系統是在 Linux 中最常廣泛使用的文件系統之一;在 fs/ext2 中可以找到讀取 ext2 格式的代碼。並不是所有文件系統都會編譯或運行;對某些尋找內核項目的人而言,更生僻的文件系統永遠都是理想的候選者。

include/:在 .c 文件的開頭所包含的大部分頭文件都可以在這個目錄中找到。 asm- 目錄下是與體系結構相關的包含(include )文件。部分內核構建過程創建從 asm 指定 asm- 的符號鏈接。這樣,無需將其固定編碼到 .c 文件 #include 就可以獲得用於那個體系結構的正確文件。其他目錄中包含的是 非-體系結構-相關 的頭文件。如果在不只一個 .c 文件中使用了某個結構體、常量或者變數,那麼它可能應該放入其中一個頭文件中。

init/:這個目錄中的文件包括 main.c、創建 早期用戶空間(early userspace) 的代碼,以及其他初始化代碼。可以認為 main.c 是內核「粘合劑(glue)」。在下一部分將深入討論 main.c。早期用戶空間提供了 Linux 內核引導起來時所需要的功能,而這些功能並不需要在內核本身運行。

ipc/:IPC 的意思是 進程間通信(interprocess communication)。它包含了共享內存、信號量以及其他形式 IPC 的代碼。

kernel/:不適合放在任何其他位置的通用內核級代碼位於此處。這里有高層系統調用代碼,以及 printk() 代碼、調度程序、信號處理代碼,等等。文件名包含很多信息,所以可以使用 ls kernel/,並非能常准確地猜到每個文件的功能。

lib/:這里是對所有內核代碼都通用的實用常式。常見的字元串操作、調試常式,以及命令行解析代碼都位於此處。

mm/:這個目錄中是高層次內核管理代碼。聯合使用這些常式以及底層的與體系結構相關的常式(通常位於 arch//mm/ 目錄中)來實現虛擬內存(Virtual memory,VM)。在這里會完成早期內存管理(在內存子系統完全建立起來之前需要它),以及文件的內存映射、頁高速緩存管理、內存分配、RAM 中頁的清除(還有很多其他事情)。

net/:這里是高層網路代碼。底層網路驅動程序與此層次代碼交換數據包,這個層次的代碼可以根據數據包將數據傳遞給用戶層應用程序,或者丟棄數據,或者在內核中使用它。net/core 包含大部分不同的網路協議都可以使用的代碼,和某些位於 net/ 目錄本身中的文件一樣。特定的網路協議在 net/ 的子目錄下實現。例如,在 net/ipv4 目錄中可以找到 IP(版本 4)代碼。

scripts/:這個目錄中包含的腳本可用於內核的構建,但並不將任何代碼加入到內核本身之中。例如,各種配置工具可以將它們的文件放在這里。

security/:在這里可以找到不同 Linux 安全模型的代碼,比如 NSA Security-Enhanced Linux 以及套接字和網路安全鉤子函數(hooks),以及其他安全選項。

sound/:這里放置的是音效卡驅動程序和其他與聲音相關的代碼。

usr/:此目錄中的代碼用於構建包含 root 文件系統映像的 cpio-格式 的歸檔文件,用於早期用戶空間。

6. 鉤子函數的簡介

系統范圍的 將捕捉系統中所有進程將發生的事件消息。 當您創建一個鉤子時,WINDOWS會先在內存中創建一個數據結構,該數據結構包含了鉤子的相關信息,然後把該結構體加到已經存在的鉤子鏈表中去。新的鉤子將加到老的前面。當一個事件發生時,如果您安裝的是一個局部鉤子,您進程中的鉤子函數將被調用。如果是一個遠程鉤子,系統就必須把鉤子函數插入到其它進程的地址空間,要做到這一點要求鉤子函數必須在一個動態鏈接庫中,所以如果您想要使用遠程鉤子,就必須把該鉤子函數放到動態鏈接庫中去。 故解決的辦法是:把鉤子函數放到單個的線程中,譬如安裝鉤子的線程。
鉤子一共有14種,以下是它們被調用的時機:
WH_CALLWNDPROC 當調用SendMessage時
WH_CALLWNDPROCRET 當SendMessage的調用返回時
WH_GETMESSAGE 當調用GetMessage 或 PeekMessage時
WH_KEYBOARD 當調用GetMessage 或 PeekMessage 來從消息隊列中查詢WM_KEYUP 或 WM_KEYDOWN 消息時
WH_MOUSE 當調用GetMessage 或 PeekMessage 來從消息隊列中查詢滑鼠事件消息時
WH_HARDWARE 當調用GetMessage 或 PeekMessage 來從消息隊列種查詢非滑鼠、鍵盤消息時
WH_MSGFILTER 當對話框、菜單或滾動條要處理一個消息時。該鉤子是局部的。它是為那些有自己的消息處理過程的控制項對象設計的。
WH_SYSMSGFILTER 和WH_MSGFILTER一樣,只不過是系統范圍的
WH_JOURNALRECORD 當WINDOWS從硬體隊列中獲得消息時
WH_JOURNALPLAYBACK 當一個事件從系統的硬體輸入隊列中被請求時
WH_SHELL 當關於WINDOWS外殼事件發生時,譬如任務條需要重畫它的按鈕.
WH_CBT 當基於計算機的訓練(CBT)事件發生時
WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的應用程序很少使用
WH_DEBUG 用來給鉤子函數除錯
附:如何使用鉤子函數(接收到字母A按下時,窗體由最小化彈出的完整的代碼)
Public Declare Function CallNextHookEx Lib user32 _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib user32 _
(ByVal hHook As Long) As Long
Public 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
Public Const WH_KEYBOARD = 2
Public Const KEY_WINSTART = 91
Public Const KEY_WINMENU = 93
Global hHook As Long
Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If nCode >= 0 Then
If wParam = KEY_WINMENU Or wParam = KEY_WINSTART Then
If (lParam And &HC0000000) = 0 Then
MsgBox , ,
KeyboardProc = 1
Exit Function
End If
End If
End If
KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function
Option Explicit
Private Sub Command1_Click()
form2.Show 1
End Sub
Private Sub form_Load()
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID)
Me.Show
End Sub
Private Sub form_Unload(Cancel As Integer)
Call UnhookWindowsHookEx(hHook)
End Sub

7. 請教高手鉤子函數的用法和作用

Windows的鉤子函數分兩種,一種是全局的,一種是線程的。全局的鉤子函數可以捕獲任何應用程序的消息,但必須是標準的DLL才能實現,VB做不了。VB可以實現線程的,就是當前應用程序的消息,這對滑鼠消息的捕捉有影響。
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是鉤子類型,如WH_KEYBOARD捕捉鍵盤消息,而WH_MOUSE捕捉滑鼠消息。hmod用於全局鉤子,VB要實現鉤子,必須設為0。dwThreadId用於線程鉤子VB中可以設置為App.ThreadID。lpfn為鉤子函數,在VB中可以使用AddressOf獲得鉤子函數的地址。這個函數因為鉤子類型不同而有所不同。如鍵盤鉤子為:
Public Function KeyboardProc(ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
如果Code不為0,鉤子函數必須調用CallNextHookEx,將消息傳遞給下面的鉤子。wParam和lParam不是按鍵。

8. 什麼叫做鉤子函數(易語言)

鉤子函數是用來給系統回調的. 簡單的說就是你注冊一個鉤子以後.發生鉤子注冊的事件. 系統就調用你注冊的鉤子函數並傳遞參數給你. 比如你注冊了一個鍵盤鉤子, 當用戶按下XX鍵的時候系統就調用你注冊的鉤子函數. 並且把用戶按下了哪些鍵當作參數傳遞過來. XX小馬就是用這個來邪惡的

麻煩採納,謝謝!

9. 什麼是鉤子函數鉤子函數的使用。

Windows的鉤子函數分兩種,一種是全局的,一種是線程的。全局的鉤子函數可以捕獲任何應用程序的消息,但必須是標準的DLL才能實現,VB做不了。VB可以實現線程的,就是當前應用程序的消息,這對滑鼠消息的捕捉有影響。
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是鉤子類型,如WH_KEYBOARD捕捉鍵盤消息,而WH_MOUSE捕捉滑鼠消息。hmod用於全局鉤子,VB要實現鉤子,必須設為0。dwThreadId用於線程鉤子VB中可以設置為App.ThreadID。lpfn為鉤子函數,在VB中可以使用AddressOf獲得鉤子函數的地址。這個函數因為鉤子類型不同而有所不同。如鍵盤鉤子為:
Public Function KeyboardProc(ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
如果Code不為0,鉤子函數必須調用CallNextHookEx,將消息傳遞給下面的鉤子。wParam和lParam不是按鍵。

閱讀全文

與linuxftp鉤子函數相關的資料

熱點內容
網路中常用的傳輸介質 瀏覽:518
文件如何使用 瀏覽:322
同步推密碼找回 瀏覽:865
樂高怎麼才能用電腦編程序 瀏覽:65
本機qq文件為什麼找不到 瀏覽:264
安卓qq空間免升級 瀏覽:490
linux如何刪除模塊驅動程序 瀏覽:193
at89c51c程序 瀏覽:329
怎麼創建word大綱文件 瀏覽:622
裊裊朗誦文件生成器 瀏覽:626
1054件文件是多少gb 瀏覽:371
高州禁養區內能養豬多少頭的文件 瀏覽:927
win8ico文件 瀏覽:949
仁和數控怎麼編程 瀏覽:381
項目文件夾圖片 瀏覽:87
怎麼在東芝電視安裝app 瀏覽:954
plc顯示數字怎麼編程 瀏覽:439
如何辨別假網站 瀏覽:711
寬頻用別人的賬號密碼 瀏覽:556
新app如何佔有市場 瀏覽:42

友情鏈接