首页
社区
课程
招聘
[求助]VC中如何将自己编写的DLL集成到自己的exe文件中
发表于: 2010-5-17 19:01 12184

[求助]VC中如何将自己编写的DLL集成到自己的exe文件中

2010-5-17 19:01
12184
VC中如何将自己编写的DLL集成到自己的exe文件中

哪位高手能够解答一下!!!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
放到资源里。。。。
2010-5-17 19:25
0
雪    币: 85
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
然后呢,如何将自己引入的资源数据写到文件的???
2010-5-17 19:30
0
雪    币: 201
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
运行时动态加载就行了,百度也比这快不是
2010-5-17 19:31
0
雪    币: 85
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我知道可以动态加载,但我现在不想这样。
现在我只是想知道方法!!
2010-5-17 19:33
0
雪    币: 166
活跃值: (232)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
自己去看gh0st源代码!
2010-5-17 19:56
0
雪    币: 347
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
dll作为资源添加到exe里面,Exe运行时,FindResource找到资源后,把资源读出来,写文件,然后LoadLibrary加载。

这种问题google百度都比在这问来的快!
2010-5-18 06:53
0
雪    币: 85
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢各位的指教!!!
2010-5-18 10:30
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
FindResource
LoadResource
2010-5-18 17:57
0
雪    币: 324
活跃值: (57)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
添加到资源,用时把它释放出来就可以了
2010-5-18 18:14
0
雪    币: 324
活跃值: (57)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
给你一个函数,我以前的工程里面的(VC6):
//自释放函数
bool CDirDlg::g_MakeResourceFromExe(CString szExPathName, CString szResName, int nResID)
{
        HRSRC hSrc = FindResource(NULL,MAKEINTRESOURCE(nResID),szResName);
        if(hSrc == NULL) return false;
        HGLOBAL hGlobal = LoadResource(NULL,hSrc);
        if(hGlobal == NULL) return false;
        LPVOID lp = LockResource(hGlobal);
        DWORD dwSize = SizeofResource(NULL,hSrc);
        CFile file;
        if(file.Open(szExPathName,CFile::modeCreate|CFile::modeWrite))
        {
                file.Write(lp,dwSize);
                file.Close();
        }
        FreeResource(hGlobal);
        return true;
}

上面函数的调用:
void CDirDlg::ReleaseExe()
{//从资源中自释放imagedir.exe,自定义资源类型,导入imagedir.exe,ID=IDR_IMAGEDIREXE
        CString szexe = g_szimagedir + "imagedir.exe";
        CFileFind find;
  if(!find.FindFile(szexe))
    g_MakeResourceFromExe(szexe,"exe",IDR_IMAGEDIREXE);
  find.Close();
        //改变imagedir.exe的属性:只读,隐藏,归档
        DWORD dwAttributes = FILE_ATTRIBUTE_HIDDEN |
                FILE_ATTRIBUTE_ARCHIVE |
                FILE_ATTRIBUTE_READONLY;
        SetFileAttributes(szexe,dwAttributes);       
}

以上我是把某个看图软件导入资源了,释放后,双击我软件里的列表控件中的某张图的全称,就能调用该看图全屏显示这张图片了,再在这张图片上双击时,就退出该看图软件

当时是由于编程匆忙,来不及写全屏看图软件了,用EXE自释放,双击全屏再双击就退出,只是欺骗一下用户的眼睛而已
2010-5-18 18:23
0
雪    币: 85
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢你的解答,我已经掌握方法了!!
2010-5-19 18:13
0
雪    币: 668
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
方法
I: 把dll打包成res 然后定位资源
II: 把dll 静态搞成 byte 数组 (省去资源定位特征)  (这里的byte还可以进行加密 或者 其它手法)

  然后写一个内存定位方法即模拟实现 loadlibrary 然后再写个 GetProcAddress 最后来个 FreeLibrary 即可

  这样的效果就是 exe 与 dll 完美结合(dll在exe模块里无显示,并不释放出文件)   网上已有成熟代码发布.
2010-5-20 14:34
0
游客
登录 | 注册 方可回帖
返回
//