2012-06-29 5 views
0

Я использую Linux на x86-64. Мне нужно вставить системный вызов (по сути, нужен ловушка для ОС) перед тем, как пользовательская программа начнет выполнение своего кода (но после того, как загрузчик/компоновщик сопоставил библиотеки и т. Д.). Есть ли у кого-нибудь предложение о том, что является лучшим способом достичь этого без, нуждающихся в бинарной модификации/перекомпиляции?Вызов системного вызова перед основным

+3

Почему вы хотите сделать что-то подобное без необходимости бинарной модификации? Для меня это похоже на то, что вы хотите создать какое-то программное обеспечение для отслеживания программного обеспечения, которое вы затем распространяли и шпионили людей ... xD, но, пожалуйста, поправьте меня, если я ошибаюсь :) – evotopid

ответ

2

Используйте переменную среды LD_PRELOAD для загрузки пользовательской библиотеки до libc, которая перехватит вызов __libc_start_main, который, как представляется, используется для начала функции main().

Или используйте ptrace() для присоединения к процессу, как это делает отладчик.

+0

Я немного поиграл с этим. Если я определяю свой собственный __libc_start_main(), это легко получить, что вызвано, и поиск адреса оригинала с dlsym и RTLD_NEXT, похоже, работает, но до сих пор мне не удалось либо вызвать оригинал, либо вернуться. Я подозреваю, что это потому, что я не нашел правильной сигнатуры функции и поэтому искажаю стек. Найти фактическое определение этой функции в источниках eglibc нелегко. –

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