C/C++

Инжект статической библиотеки в процесс

Я не умею писать dll инжекторы, а загружать dll через сторонние инжекторы я тоже не хочу. Я хочу один раз сделать инжект статической библиотеки, что бы мне не приходилось каждый раз инжектить динамическую библиотеку. Как это сделать, и возможно ли это?
Юра Петров
Юра Петров
17
Инжект статической библиотеки в процесс не является стандартным подходом, поскольку статические библиотеки обычно связываются с исполняемым файлом во время компиляции. Они статически включаются в исполняемый файл, и во время выполнения они не загружаются динамически.

Однако, если вы все же хотите достичь подобного эффекта, можно рассмотреть альтернативные подходы:

1. Статическая компоновка: Вы можете статически скомпоновать вашу статическую библиотеку с исполняемым файлом, чтобы она была включена в него. Это требует перекомпиляции и пересборки исходного кода вашего приложения.

2. Встроенные ресурсы: Вы можете встроить код из статической библиотеки в виде ресурса в исполняемый файл и извлечь его при запуске программы. Затем можно загрузить и выполнить извлеченный код во время выполнения программы. Это требует изменений в исходном коде вашей программы.

3. Динамическая загрузка статической библиотеки: Вместо инжекта статической библиотеки в процесс можно загрузить ее динамически во время выполнения программы. Вы можете использовать механизмы динамической загрузки библиотек, такие как `LoadLibrary` (Windows) или `dlopen` (Linux), чтобы загрузить и использовать статическую библиотеку по требованию. Это позволяет избежать необходимости инжектировать библиотеку при каждом запуске программы, но требует изменений в исходном коде вашей программы для динамической загрузки и использования функций из библиотеки.

Обратите внимание, что подходы, описанные выше, требуют изменений в исходном коде вашей программы и ее перекомпиляции.
СД
Сергей Дубровский
884
Лучший ответ
Инжектирование статической библиотеки напрямую в процесс не является возможным, так как статические библиотеки компилируются в исполняемый файл и не могут быть загружены в процесс динамически. Однако, вы можете использовать так называемый "static linking" для статической библиотеки, тогда код из библиотеки будет скопирован непосредственно в исполняемый файл, и вам не нужно будет инжектировать библиотеку отдельно.

Если же вы все-таки хотите использовать статические библиотеки, но не хотите включать их в исполняемый файл, вы можете создать отдельный загрузчик, который будет загружать статическую библиотеку в память процесса и запускать нужную функцию из нее. Этот загрузчик можно запускать каждый раз, когда вам нужно использовать функции из статической библиотеки в процессе, вместо того, чтобы инжектировать динамическую библиотеку.

Для создания такого загрузчика вы можете использовать различные инструменты, например, написать свой собственный загрузчик на языке C/C++ или использовать готовые инструменты, такие как RunPE или PE Loader. Эти инструменты позволяют загрузить исполняемый файл или библиотеку в память процесса и запустить нужную функцию из нее.

Однако, стоит учитывать, что инжектирование статической библиотеки может быть менее удобным и гибким решением, чем использование динамической библиотеки. Динамические библиотеки позволяют изменять и обновлять код без необходимости перекомпиляции всего приложения, что может быть полезным в некоторых случаях.