Мой проект в семестре - это сетевой уровень Anti-Malware S/W. Основными компонентами являются Менеджер и Агент. Агент предоставляет Управляющему:Скрипт 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
Вместо использования команды Linux, как сверху, ifstat, TCPDUMP и т.д., мы нашли это лучший вариант. По сути, все, что нужно сделать, - это либо сценарий, либо исполняемый файл из программы Agent Java.
Все сценарии, используемые «systemtap», написаны на языке сценариев systemtap. Инструмент front-end (stap) преобразует этот скрипт в код C, а затем компилирует его в файл ядра.
НТКГ --tmpdir =/дома/испытания/nettop.stp
Используя вышеприведенную команду, мне удалось получить преобразованный файл кода C. Но файл не компилируется из-за проблем с зависимостями.
НКУ nettop.c nettop.c: 10: 29: фатальная ошибка: runtime_defines.h: Нет такого файла или каталога компиляция завершается.
НКУ -B/USR/доли/Systemtap/выполнения/-B /usr/src/kernels/3.3.1-3.fc16.x86_64/include/ nettop.c nettop.c: 10: 29 : fatal error: runtime_defines.h: Нет такого файла или каталога компиляция завершена.
НКУ --sysroot =/USR/nettop.c nettop.c: 10: 29: фатальная ошибка: runtime_defines.h: Нет такого файла или каталога компиляция не завершается.
Среда выполнения заголовков SystemTap все используют Linux/Header формат, означающий, что для SystemTap путь к классам установлен до /usr/../../../../include. Копирование всех заголовков в определенную папку легко, но редактировать их, чтобы отобразить правильные имена путей, не является возможным. Есть 106 заголовков времени выполнения, которые содержат более тысячи заголовков Linux.
a. Как сделать gcc использовать определенную папку в качестве библиотеки?
b. Есть ли лучшая альтернатива этой архитектуре агента?
PS: Надеюсь, вопрос не слишком расплывчатый. Спасибо за ответы заранее.