libnids執行機制 函式呼叫流程

2021-07-02 06:45:22 字數 1584 閱讀 3623

libnids函式呼叫流程:

(1)系統呼叫 int nids_init() 初始化程式

(2)int nids_init() 呼叫函式 init_procs();

以下是該函式的實現**:

1

static

void

init_procs()

2

程第四行指定了ip_frag_procs的處理函式(這是僅僅是指定,沒有實際的處理)。

(3)呼叫函式int nids_run()。

函式nids_run的實現**如下:

1

intnids_run()27

start_cap_queue_process_thread();

/*threading... */8

pcap_loop(desc, -1

, (pcap_handler) nids_pcap_handler, 0);

9/*fixme: will this code ever be called? don't think so - mcree

*/10

stop_cap_queue_process_thread();

11nids_exit();

12return0;

13}

(4)程式第7行呼叫start_cap_queue_process_thread開啟了乙個新的執行緒,該執行緒正是我們的組包處理程式。該巨集定義展開如下:

1

#define

start_cap_queue_process_thread() \2if

(nids_params.multiproc) ; \ 8

}

可以看到建立的新執行緒為cap_queue_process_thread,其函式實現**如下:

1

static

void

cap_queue_process_thread()212

g_thread_exit(null);

13}

函式第8行呼叫call_ip_frag_procs,其實現**如下:

1

static

void

call_ip_frag_procs(

void

*data,bpf_u_int32 caplen)

2

函式第4行呼叫了我們的ip_frag_procs,這樣我們又看到步驟(2)中的這個處理函式鍊錶鍊錶。回過頭來看看這個預設的處理函式的結構:

1

static

void

gen_p_frag_proc(u_char

*data,

intlen)

2

程式4行呼叫了ip_procs在步驟(2)中的預設值為gen_ip_proc ,這個函式就是我們最終的處理函式了,在這裡我們終於看到了我們的tcp ,udp,icmp的處理,**如下:

1

static

void

gen_ip_proc(u_char

*data,

intskblen)217

}

JS 函式執行機制

形成乙個私有的作用域 形參賦值 變數提公升,函式宣告 執行 棧記憶體釋放與否 1 像普通函式一樣形成乙個私有作用域 棧記憶體 2 建構函式執行獨有 在js 自上而下執行之前,首先在當前形成的私有棧中建立乙個物件 建立乙個堆記憶體,暫時不儲存任何東西 並且讓函式中的執行主體 this 指向這個新的堆記...

虛函式的執行機制

每個含有虛函式的類都含有乙個虛函式表,該虛函式表被所有類物件所共享。類的每個虛成員佔據虛函式表中的一行。如果類中有n個虛函式,那麼其虛函式表將有n 4位元組的大小。虛函式 virtual function 是通過乙個虛函式表 virtual table 來實現的,虛函式表裡儲存的是每個虛函式的位址。...

session執行機制

session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表 的結構 也可能就是使用 雜湊表 來儲存資訊。當程式需要為某個客戶端的請求建立乙個session的時候,伺服器首先檢查這個客戶端的請求裡是否已包含了乙個session標識 稱為sessionid,如果已包含乙個sessionid則說明...