Подсчет системных вызовов программы и проверка правильности результатов с помощью strace

Я использую ptrace для подсчета системных вызовов программы.
Проблема в том, что для данной программы A моя программа распечатывает количество выполненных системных вызовов (открытие, закрытие, чтение, запись).

Результаты моей программы и strace (с параметром -c) с программой A в качестве аргумента были идентичны, за исключением открытых системных вызовов.
В моей программе напечатано 15 и проставлено 3 отпечатка.

Но я предполагаю, что поскольку strace печатает и некоторые другие системные вызовы, они могут составить до 15 открытых системных вызовов, которые подсчитала моя программа.

Я использую SYS_open для проверки результатов ptrace при просмотре регистра ORIG_EAX/RAX.

Системные вызовы, которые связывают отпечатки, здесь.

Обновить:
Я скомпилировал свою программу из терминала и запустил ее оттуда, и результаты были одинаковыми с strace.
Я развиваюсь в NetBeans.

Почему это случилось?

1 ответ

Похоже, NetBeans использует Ptrace для управления вещами. (В конце концов, как он может делать точки останова и шаги без него?) Таким образом, netbeans может посылать безопасные сигналы в вашу программу.

Вы можете запустить strace -o /tmp/foo (без -c), чтобы точно узнать, что происходит. (сравните выходные данные под netbeans и без netbeans, чтобы увидеть, что отличается.)

Вы также можете добавить "-e открыть, закрыть", если вы хотите фильтровать по определенным вызовам.

Другие вопросы по тегам