Я использую Linux на x86-64. Мне нужно вставить системный вызов (по сути, нужен ловушка для ОС) перед тем, как пользовательская программа начнет выполнение своего кода (но после того, как загрузчик/компоновщик сопоставил библиотеки и т. Д.). Есть ли у кого-нибудь предложение о том, что является лучшим способом достичь этого без, нуждающихся в бинарной модификации/перекомпиляции?Вызов системного вызова перед основным
ответ
Используйте переменную среды LD_PRELOAD для загрузки пользовательской библиотеки до libc, которая перехватит вызов __libc_start_main, который, как представляется, используется для начала функции main().
Или используйте ptrace() для присоединения к процессу, как это делает отладчик.
Я немного поиграл с этим. Если я определяю свой собственный __libc_start_main(), это легко получить, что вызвано, и поиск адреса оригинала с dlsym и RTLD_NEXT, похоже, работает, но до сих пор мне не удалось либо вызвать оригинал, либо вернуться. Я подозреваю, что это потому, что я не нашел правильной сигнатуры функции и поэтому искажаю стек. Найти фактическое определение этой функции в источниках eglibc нелегко. –
- 1. Вызов некоторых функций перед основным в C
- 2. системного вызова() для вызова tkill()
- 3. вызов ioctl системного вызова с использованием jna
- 4. Игнорирование системного вызова
- 5. Код без системного вызова?
- 6. Изменение системного вызова Fork()
- 7. Выполнение системного вызова
- 8. Убить выхода из системного вызова перед запуском pcntl_signal
- 9. измерение скорости системного вызова
- 10. Стоимость системного вызова
- 11. Ожидание завершения системного вызова
- 12. System.Net.Sockets.SocketException: сбой системного вызова
- 13. Написание нового системного вызова
- 14. Различные способы системного вызова вызывает
- 15. Последовательность потока системного вызова Linux
- 16. Ошибка сегментации перед основным
- 17. Определить переменную перед основным
- 18. Определить функцию перед основным?
- 19. Получение последнего вызванного системного вызова
- 20. Что означает «блокировка системного вызова»?
- 21. Тестирование системного вызова в qemu
- 22. Отслеживание системного вызова C блокировки
- 23. Создание системного вызова в Linux
- 24. сборка системного вызова неэффективная
- 25. Проблема системного вызова Sigsuspend
- 26. понимание системного вызова dup()?
- 27. Использование системного вызова open()
- 28. Объяснение системного вызова dup()
- 29. Получение значения системного вызова
- 30. Чтение системного вызова Posix
Почему вы хотите сделать что-то подобное без необходимости бинарной модификации? Для меня это похоже на то, что вы хотите создать какое-то программное обеспечение для отслеживания программного обеспечения, которое вы затем распространяли и шпионили людей ... xD, но, пожалуйста, поправьте меня, если я ошибаюсь :) – evotopid