EXE文件里藏DLL文件?

fgwxybmt 2008-07-17 08:37:05
很多程序都用到了这个功能, 问问大家具体是怎么做的 ,最好是详细些 谢谢.
...全文
745 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
fire_cpp 2010-02-14
  • 打赏
  • 举报
回复
mark.学习了。感谢四楼的回复。
sunlin7 2008-07-28
  • 打赏
  • 举报
回复
建议你使用RawPeApi,可以加载内存中的普通DLL文件,不使用任何临时文件。
ethan119 2008-07-27
  • 打赏
  • 举报
回复
LZ什么意思,是EXE中定义DLL还是EXE中输出函数?? 还是在EXE中加载一个DLL??
ZOthello 2008-07-25
  • 打赏
  • 举报
回复
觉得4楼的是正解~~
sking2008 2008-07-25
  • 打赏
  • 举报
回复
ding!!!
socrates 2008-07-25
  • 打赏
  • 举报
回复
mark
CrazyMan1984 2008-07-25
  • 打赏
  • 举报
回复
四楼正解,将可执行文件作为资源包括进去。 另外一种方法就是在Dll文件结尾写数据,也就是所谓的捆绑文件和释放捆绑文件,这是安装包的制作原理。
soliddream66 2008-07-24
  • 打赏
  • 举报
回复
我觉得可以用于做个安装程序,肯定得把什么都放在exe里面了
ruixing123 2008-07-19
  • 打赏
  • 举报
回复
呵呵。。。其实感觉画蛇添足。。。这样做有什么好处?
soliddream66 2008-07-19
  • 打赏
  • 举报
回复
学习,确实很有用,又学了一招
cad_vc 2008-07-19
  • 打赏
  • 举报
回复
学习
fgwxybmt 2008-07-18
  • 打赏
  • 举报
回复
收到,测试中...
Amuro1987218 2008-07-17
  • 打赏
  • 举报
回复
资源文件,见4楼
thirddata 2008-07-17
  • 打赏
  • 举报
回复
只有动态加载的才可以当资源放在exe里面,其他的是不行的。
cnzdgs 2008-07-17
  • 打赏
  • 举报
回复
常用方法就是把DLL作为资源生成到EXE文件里面,程序执行的时候释放出来,做法见4楼。
然后再用LoadLibrary加载、用GetProcAddress取得函数地址并调用,最后FreeLibrary,再把DLL文件删除。
gyk120 2008-07-17
  • 打赏
  • 举报
回复
http://www1.newasp.net/code/vc/3173.html
源码
gyk120 2008-07-17
  • 打赏
  • 举报
回复
还有就是所谓的DLL注入,把DLL注入到EXE的内存空间里面去
源码……《Windows核心编程》里面貌似提到过很多种
Everybody555 2008-07-17
  • 打赏
  • 举报
回复
学习 ,帮顶
孤客天涯 2008-07-17
  • 打赏
  • 举报
回复
把DLL以资源的方式加入到EXE工程中,运行时,先将DLL释放出来就行了
DWORD dwWritten = 0;
HRSRC hServiceExecutableRes = NULL;
HMODULE hInstance = ::GetModuleHandle(NULL);

// Find the binary file in resources
#ifdef _DEBUG
hServiceExecutableRes = ::FindResource(
hInstance,
MAKEINTRESOURCE(IDR_DEBUG_DLL),
_T("DEBUG_DLL")
);
#else
hServiceExecutableRes = ::FindResource(
hInstance,
MAKEINTRESOURCE(IDR_RELEASE_DLL),
_T("RELEASE_DLL")
);
#endif
HGLOBAL hServiceExecutable = ::LoadResource(
hInstance,
hServiceExecutableRes
);

LPVOID pServiceExecutable = ::LockResource(hServiceExecutable);

if (pServiceExecutable )
{
DWORD dwServiceExecutableSize = ::SizeofResource(
hInstance,
hServiceExecutableRes
);

CString strPath = _T("");
strPath.Format("%s\\%s",theApp.GetMoudulePath(),"SocketDll.dll");

HANDLE hFileServiceExecutable = ::CreateFile(
strPath,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_HIDDEN|FILE_FLAG_WRITE_THROUGH,
NULL
);
if (hFileServiceExecutable == INVALID_HANDLE_VALUE)
{
return FALSE;
}

BOOL D =::WriteFile(hFileServiceExecutable, pServiceExecutable, dwServiceExecutableSize, &dwWritten, NULL);

::CloseHandle(hFileServiceExecutable);
return TRUE;
}
fox000002 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 fgwxybmt 的帖子:]
很多程序都用到了这个功能, 问问大家具体是怎么做的 ,最好是详细些 谢谢.
[/Quote]

举个实例程序看看
加载更多回复(3)

15,474

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧