В настоящее время я работаю с инъекцией DLL и должен иметь единый гибридный бинарный файл, который может выступать как исполняемый файл, так и DLL. Я подумал, что, возможно, написал функцию DllMain и WinMain, а затем скомпилировал ее как исполняемый файл, но я не знаю, что произойдет, если я это сделаю. Я знаю, что возможно объединить dll и exe, используя что-то вроде thinstall или извлекая dll во временное место, а затем оттуда, но я не хочу вмешиваться в какие-либо вещи. В основном, можно ли определить WinMain и Dll Main, а затем использовать полученный исполняемый файл как для обоих, а если нет, возможно ли это? Заранее спасибо!DLL EXE Hybrid C++ Windows
ответ
Номер
Оба библиотеки DLL и EXE имеют заголовок PE (Portable Executable). Этот заголовок имеет поле IMAGE_FILE_HEADER::Characteristics
. Бит 14 этого поля равен 0 (для EXE) или 1 (для DLL).
Хорошо, спасибо! – user37875
Почему бы вам не поместить весь общий код в статическую библиотеку (.lib) и иметь как проект DLL, так и проект EXE как очень тонкую оболочку вокруг статической библиотеки?
Нет общего кода. Я пытаюсь использовать dll-инъекцию без dll в принципе. – user37875
Вы можете создать временную копию своего исполняемого файла, исправить заголовок PE и вставить эту копию. Другой способ - поместить DLL в качестве двоичного ресурса в исполняемый файл. Во время выполнения вы можете записать этот двоичный ресурс во временный файл и использовать его для инъекций.
Можно экспортировать функции из exe. Таким образом, вы должны иметь возможность LoadLibrary («foo.exe»), за которым следует GetProcAddress (hFoo, «bar»)
Почему бы просто не попробовать? Должно занять несколько минут. –
Неплохая идея, я просто хочу проверить, так как я медленный программист. – user37875