В моей программе я хочу перехватить каждый системный вызов на уровне пользователя в рамках одного и того же процесса (я не хочу использовать отдельный процесс, например ptrace
, или такой инструмент, как strace
). Я также не хочу использовать LD_PRELOAD. Как я могу это сделать?Перехват системных вызовов на уровне пользователя без LD_PRELOAD
ответ
Использовать макросы. Он работает следующим образом:
Создать файл заголовка, который определяет макрос для каждого системного вызова, который вы хотите отслеживать. Пример:
open()
#define open(path,flags,mode) mySpecialOpen(path,flags,mode)
Создать библиотеку, которая содержит
mySpecial*()
функции, пересылать вызовы к системному вызову. Скомпилируйте библиотеку без файла заголовка.Скомпилируйте свой код (и все библиотеки, которые вы используете), с указанным выше заголовком. Связь с библиотекой.
Но это не вызовет системные вызовы с ручной кодировкой (т. Е. Встроенные сборки), которые инструмент «strace' * делает». Кроме того, если вы не перекомпилируете 'libc', все системные вызовы, выполняемые через стандартные библиотечные функции, также не пойманы. – Job
@Job: Как я уже сказал, «и все библиотеки, которые вы используете». Вы знаете лучшее решение? OP не хочет использовать какие-либо официальные инструменты; они выполняют надлежащую работу. Все остальное должно иметь некоторые недостатки. –
Да, я знаю, но я просто указывал на два из этих недостатков вашего решения. Что касается лучшего решения, очевидно, у меня его нет, поскольку я бы разместил его тогда :-) Я думал использовать какой-то трюк, чтобы использовать 'ptrace' для отслеживания собственного процесса, а не для ребенка, но я предполагаю, что выиграл возможно. – Job
- 1. Перехват системных вызовов (где переданы аргументы)
- 2. Проблема с заменой системных вызовов Linux с использованием LD_PRELOAD
- 3. Замена символов без LD_PRELOAD
- 4. PHP асинхронного без системных вызовов
- 5. Создание системных вызовов на Linux без стека
- 6. Печатать символ без системных вызовов
- 7. Перехват вызовов на контроллеры
- 8. Перехват входящих вызовов на Android
- 9. Запрос на Выбор системных вызовов
- 10. Перехват вызовов на действия Mailer
- 11. Минимальный накладной способ перехвата системных вызовов без изменения ядра
- 12. перехватывание системных вызовов файловой системы
- 13. Python очистить терминал без использования системных вызовов
- 14. Чтение и запись системных вызовов без буфера
- 15. LS без использования системных вызовов в PHP
- 16. Перехват конструктора класса C++ с LD_PRELOAD
- 17. системных вызовов переменных неопределенными
- 18. Библиотека системных вызовов
- 19. Перехват входящих вызовов
- 20. Перехват вызовов модуля?
- 21. Перехват вызовов конструктору
- 22. Анализ системных вызовов
- 23. Ведение журнала системных вызовов
- 24. Выполнение системных вызовов
- 25. Сколько системных вызовов выполняется?
- 26. Перехват вызовов по свойствам
- 27. Dojo - перехват вызовов XHR
- 28. Ни л.д. обертка ни LD_PRELOAD работает на перехват системного вызова
- 29. Работает ли ptrace на уровне пользователя или на уровне ядра?
- 30. Перехват вызовов сна в C++
Я не думаю, что 'LD_PRELOAD' может использоваться для перехвата системных вызовов в любом случае. – Job