2012-04-10 2 views
1

Мой проект в семестре - это сетевой уровень 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: Надеюсь, вопрос не слишком расплывчатый. Спасибо за ответы заранее.

ответ

0

Не пытайтесь скомпилировать промежуточный код кода Systemtap. Вместо этого запустите сценарии через stap (или скомпилированный .ko через staprun), и используйте их вывод через stdout.

Смежные вопросы