2012-04-10 98 views
1

我的學期項目是一個網絡級防惡意軟件S/W。它的主要組件是Manager和Agent。 代理提供經理:Systemtap腳本到C代碼轉換和編譯

1. CPU usage, Memory usage and B/W usage information 

2. Network related Information - 

    Network Profiling 
    Function calls from Network Sockets 
    TCP packets related information 

3. Disk Related Information - 

    I/O monitoring 
    File Read/Writes 
    File Attribute changes 

4. General Profiling 

    Function calls 
    Call Graph 
    Frequently used system calls 
    call volume per process 

這四個功能的實現爲主題。我們的平臺是Linux。我們發現了一個名爲SystemTap的工具...

http://sourceware.org/systemtap/SystemTap_Beginners_Guide/useful-systemtap-scripts.html

而不是像利用頂部,ifstat,和tcpdump等Linux命令,我們發現這是一個更好的選擇。實際上,所有要完成的操作都是從Agent Java程序調用腳本或可執行文件。

「systemtap」使用的所有腳本都是用systemtap腳本語言編寫的。前端工具(stap)將此腳本轉換爲C代碼,然後將其編譯爲內核文件。

STAP --tmpdir = /家庭/測試/ nettop.stp

通過使用上述命令,我已成功地獲得轉換的C代碼文件。但由於依賴性問題,文件沒有得到編譯。

GCC nettop.c nettop.c:10:29:致命錯誤:runtime_defines.h:沒有這樣的文件或目錄 編譯終止。

GCC -B的/ usr /共享/的systemtap /運行/ -B /usr/src/kernels/3.3.1-3.fc16.x86_64/include/ nettop.c nettop.c:10:29 :致命錯誤:runtime_defines.h:沒有這樣的文件或目錄 編譯終止。

GCC --sysroot =的/ usr/nettop.c nettop.c:10:29:致命錯誤:runtime_defines.h:沒有這樣的文件或目錄 彙編終止。

的SystemTap的運行時頭都使用LINUX /頭格式,這標誌着爲SystemTap的類路徑設置,直到/usr/../../../../include。將所有標題複製到特定文件夾很容易,但編輯它們以反映正確的路徑名稱不是一種可能性。有超過一千個linux頭文件的106個運行時頭文件。

a。 如何讓gcc使用特定的文件夾作爲庫?

b。 這個代理架構有更好的選擇嗎?

PS:希望這個問題不是太模糊。感謝您提前回復。

回答

0

不要嘗試手動編譯systemtap的中間C代碼。相反,通過stap(或通過staprun編譯的.ko's)運行腳本,並通過stdout消耗它們的輸出。