2010-01-19 8 views
1

В настоящее время я работаю с инъекцией DLL и должен иметь единый гибридный бинарный файл, который может выступать как исполняемый файл, так и DLL. Я подумал, что, возможно, написал функцию DllMain и WinMain, а затем скомпилировал ее как исполняемый файл, но я не знаю, что произойдет, если я это сделаю. Я знаю, что возможно объединить dll и exe, используя что-то вроде thinstall или извлекая dll во временное место, а затем оттуда, но я не хочу вмешиваться в какие-либо вещи. В основном, можно ли определить WinMain и Dll Main, а затем использовать полученный исполняемый файл как для обоих, а если нет, возможно ли это? Заранее спасибо!DLL EXE Hybrid C++ Windows

+1

Почему бы просто не попробовать? Должно занять несколько минут. –

+0

Неплохая идея, я просто хочу проверить, так как я медленный программист. – user37875

ответ

3

Номер

Оба библиотеки DLL и EXE имеют заголовок PE (Portable Executable). Этот заголовок имеет поле IMAGE_FILE_HEADER::Characteristics. Бит 14 этого поля равен 0 (для EXE) или 1 (для DLL).

+0

Хорошо, спасибо! – user37875

1

Почему бы вам не поместить весь общий код в статическую библиотеку (.lib) и иметь как проект DLL, так и проект EXE как очень тонкую оболочку вокруг статической библиотеки?

+0

Нет общего кода. Я пытаюсь использовать dll-инъекцию без dll в принципе. – user37875

1

Вы можете создать временную копию своего исполняемого файла, исправить заголовок PE и вставить эту копию. Другой способ - поместить DLL в качестве двоичного ресурса в исполняемый файл. Во время выполнения вы можете записать этот двоичный ресурс во временный файл и использовать его для инъекций.

0

Можно экспортировать функции из exe. Таким образом, вы должны иметь возможность LoadLibrary («foo.exe»), за которым следует GetProcAddress (hFoo, «bar»)