我的学期项目是一个网络级反恶意软件软件软件,它的主要组成部分是管理员和代理。
代理人向经理提供:
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
我们发现这是一个更好的选择,而不是利用像top、ifstat、tcpdump等linux命令。实际上,所要做的就是从代理java程序中调用脚本或可执行文件。
“systemtap”使用的所有脚本都是用systemtap脚本语言编写的。前端工具(stap)将此脚本转换为c代码,然后将其编译为内核文件。
stap--tmpdir=/home/test/nettop.stp
通过使用上面的命令,我成功地获得了转换后的c代码文件。但由于依赖关系问题,无法编译该文件。
GCC净额结算
nettop.c:10:29:致命错误:runtime_defines.h:没有这样的文件或目录
编译终止。
gcc-b/usr/share/systemtap/runtime/-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/header格式,表示systemtap的类路径设置为/usr/../../../../include。将所有标题复制到特定文件夹很容易,但是编辑它们以反映正确的路径名是不可能的。有106个运行时头引用了超过1000个Linux头。
a.如何使gcc使用特定文件夹作为库?
B.有没有比这种代理架构更好的替代方案?
附言:希望问题不要太含糊。谢谢你提前回复。
最佳答案
不要试图手工编译SystemTap的中间C代码。相反,通过stap运行脚本(或者通过stap run运行compiled.ko),并通过stdout使用它们的输出。
关于linux - Systemtap脚本到C代码的转换和编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10094468/