Самостоятельное удаление общего объекта с помощью Linux

Поэтому я работал над внедрением общих объектов Linux в запущенные процессы, следуя информации из общей библиотеки Inject в процесс и https://github.com/gaffe23/linux-inject. Я получил это и работает довольно хорошо. Мой вопрос касается удаления общего объекта впоследствии. Я знаю, что могу использовать тот же метод, что и для внедрения, но мне нужно знать, могу ли я удалить общий объект, используя код внутри него.

Например, я вливаю.so, а затем удаляю инжектор. Теперь мне нужен способ удалить.so, используя функциональность, встроенную в саму.so. Я думал о том, чтобы поместить код для инъекций в.so, а затем через некоторое время создать процесс, чтобы проверить идею. Это возможно или есть что-то еще, что будет работать лучше?

0 ответов

Это нетривиально, но вы можете сделать следующее, когда решите выгрузить свой общий объект:

  • mmap() новое сопоставление с разрешениями EXECUTE
  • Напишите машинные инструкции для этого сопоставления, что dlclose(ваш-общий-объект)
  • напишите машинные инструкции, которые вызывают munmap(), при этом убедитесь, что адрес возврата этого вызова указывает на вызов завершения потока (возможно, pthread_exit()), в результате чего выполняющийся поток никогда не вернется
  • Создайте новый поток и вызовите адрес mmap()
Другие вопросы по тегам