Я работаю над проектом по добавлению общей библиотеки в программу с LD_PRELOAD.
Моя внедренная библиотека создает новый поток, когда она внедряется в программу. Вся логика происходит в этом потоке (например, анализ сетевого трафика и т. Д.).
Сначала вы должны знать это о загружаемой программе. Это клиентское приложение, которое шифрует каждый пакет, записанный в статический буфер, и отправляет его на сервер. Я нашел функцию, которая шифрует и отправляет пакеты в клиенте, и я смог ее обойти. Так что теперь я могу просто изменить статический буфер и позволить функции «send» зашифровать буфер и отправить буфер на сервер.
Но теперь у меня есть проблема: что если я изменю содержимое статического буфера в потоке моей библиотеки (чтобы я мог отправить поддельный пакет), и в то же время поток программы тоже изменит статический буфер? Это может привести к сбою.
Мне нужна какая-то синхронизация.
Так что я думал о некоторых решениях:
- Найдите все функции в программе, которые изменяют буфер, обойдут их и добавьте мьютекс к этому вызову или что-то в этом роде. Хотелось бы, как целую вечность ...
- Найдите способ выполнить мой фрагмент кода, который изменяет буфер, в одном блоке. Так что мой кусок кода фактически выполняется сразу, без переключения потоков POSIX на другие потоки. Это вообще возможно?
- Сделайте мое приложение синхронным и плачьте.
Может кто-нибудь придумать лучшее решение? Или вы знаете, как сделать решение 2 возможным?
Заранее спасибо,
Гиллис