1

我目前正在使用 DLL 注入,并且需要一个可以作为可执行文件和 DLL 的混合二进制文件。我想过可能编写一个 DllMain 和 WinMain 函数,然后将其编译为可执行文件,但我不知道如果我这样做会发生什么。我知道可以通过使用 thinstall 之类的东西或将 dll 提取到临时位置然后从那里开始来组合 dll 和 exe,但我不想弄乱这些东西。所以基本上,是否可以定义一个 WinMain 和 Dll Main 然后将生成的可执行文件用作两者,如果没有,这甚至可能吗?提前致谢!

4

4 回答 4

3

不。

DLL 和 EXE 都具有 PE​​(可移植可执行文件)标头。该标题有一个字段IMAGE_FILE_HEADER::Characteristics。该字段的第 14 位为 0(对于 EXE)或 1(对于 DLL)。

于 2010-01-19T11:18:31.533 回答
1

为什么不将所有通用代码放入静态库 (.lib) 中,并将 DLL 项目和 EXE 项目作为静态库的非常薄的包装器?

于 2010-01-19T02:26:15.157 回答
1

您可以创建可执行文件的临时副本,修补 PE 标头并注入此副本。另一种方法是将 DLL 作为二进制资源放入可执行文件。在运行时,您可以将此二进制资源写入临时文件并将其用于注入。

于 2011-01-23T15:12:29.570 回答
0

也可以从 exe 导出函数。所以你应该能够 LoadLibrary("foo.exe") 后跟 GetProcAddress(hFoo,"bar")

于 2012-03-15T11:33:12.383 回答