Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Александр Байрак
Наверняка вы не раз задумывались о том, как именно работает та или иная используемая вами программа. Разобраться помогут исходные текcты программы. Но что делать, если они недоступны? Как всегда быть в курсе того, что происходит у вас в системе?
Systrace – инструмент для ограничения и контроля системных вызовов. Изначально systrace был написан для NetBSD, позже был портирован под OpenBSD, а в настоящий момент ведутся работы по переносу на Linux, FreeBSD и OpenDarwin.
Любая программа в процессе свой работы использует системные вызовы. Что такое системный вызов? Его можно определить как некую функцию, которая позволяет вашей программе обращаться к ядру ОС для выполнения некого действия. В современных версиях UNIX-систем реализовано около 300 различных системных вызовов. И если такие инструменты, как ktrace (kernel process tracing) и truss (tracing system call), позволяют нам выступать лишь в качестве наблюдателей, systrace позволяет нам вмешиваться в происходящее.
Пример использования
Перейдем к практике. В качестве примера напишем простую программу:
#include <stdio.h>
void proc1();
int main()
{
printf("just a message ");
mkdir(«test»);
proc1();
}
void proc1()
{
printf("just a dumb procedure ");
}
Как ясно из исходного текста, наша подопытная программа выполняет следующие действия:
n Выводит на экран сообщение.
n Создает каталог «test».
n Передает управление процедуре «proc1».
n Процедура proc1 выводит на экран сообщение.
Скомпилируем программу:
#gcc -o proga proga.c
На первый взгляд при выполнении нашей программы используются два системных вызова: mkdir и write. Хотя логично предположить, что, перед тем как «что-то» «куда-то» записать с помощью write, это самое «куда-то» нужно сначала открыть, а после записи закрыть, а значит, задействованы системные вызовы open и close . Также не лишено смысла предположение, что используется еще один системный вызов – exit. Итого пять вызовов. Посмотрим, как обстоят дела на самом деле:
#systrace -A /path/to/program/proga
Ключ -A указывает systrace автоматически создать политику для указанного исполняемого файла.
Автоматический режим предполагает создание правил в режиме «разрешить все».
После выполнения команды в домашнем каталоге пользователя появится подкаталог .systrace, в который будет помещен файл c правилами. Рассмотрим его:
Policy: /home/01mer/labs/systr/proga, Emulation: netbsd
netbsd-mmap: permit