DLL EXE Гибрид C ++ Windows - PullRequest
       45

DLL EXE Гибрид C ++ Windows

1 голос
/ 19 января 2010

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

Ответы [ 4 ]

3 голосов
/ 19 января 2010

номер

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

1 голос
/ 23 января 2011

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

1 голос
/ 19 января 2010

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

0 голосов
/ 15 марта 2012

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

...