首页
社区
课程
招聘
求一份内存加载DLL的源码
发表于: 2015-9-26 02:03 9037

求一份内存加载DLL的源码

2015-9-26 02:03
9037
如题,求一份把DLL放进MFC资源,不释放,内存中加载DLL的源码。开发工具VS2010,宽字节。
有的大神QQ3799 05426

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 35
活跃值: (642)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个论坛好多的。随便搜一大票!

http://bbs.pediy.com/showthread.php?t=203910

这个类源代码 就是这里:https://github.com/fancycode/MemoryModule

两个地址都可以下到这个类

这个类就可以搞定 DLL 但要WIN32的DLL 不支持MFC DLL  

但可以 MFC.exe  内存加载调用win32的DLL(非MFC DLL文件)

把那类下了 然后添加你工程 你建立个MFC.exe工程 然后把win32.dll加入资源

就是不支持MFC DLL  要是楼主搞定支持MFC DLL 请告诉我啊!

typedef int (WINAPI *PFN_POPMSGBOX)(void);
void LoadDllFromMemAndCallEX()
{
        HRSRC hResInfo;
        HGLOBAL hResData;
        DWORD dwSize;
        PVOID DllResourceModule=NULL;
        HMEMORYMODULE hDll;
        PFN_POPMSGBOX pfn;
        hResInfo = FindResource(NULL,MAKEINTRESOURCE(IDR_MYDLL), "MYDLL"); //资源文件夹和资源名称
        if (hResInfo == NULL)
        {
                printf("无法找到指定的资源!\n");
                return ;
        }
        dwSize = SizeofResource(NULL, hResInfo);
        // 装载资源
        hResData = LoadResource(NULL, hResInfo);
        if (hResData == NULL)
        {
                printf("无法加载指定的资源!\n");
                return ;
        }
        //锁定资源,并获取指向资源的指针
        DllResourceModule=LockResource(hResData);
        // 加载
         
         hDll=MemoryLoadLibrary(DllResourceModule);  //内存加载
        if (hDll==NULL)
        {
                printf("从内存直接加载Dll失败!\n");
                return ;
        }
        //获取导出的函数的地址
        pfn=MemoryGetProcAddress(hDll,"PopCurrentProcPath"); //获取函数地址
        if (pfn==NULL)
        {
                printf("无法获取指定的函数地址!\n");
                MemoryFreeLibrary(hDll);
                return;
        }
        //调用导出的函数
        pfn();
        //printf("调用结束!\n");
        if (hDll!=NULL)
        {
                MemoryFreeLibrary(hDll);
                hDll=NULL;
        }
}
2015-9-26 02:45
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
给分分转正呀
2015-10-10 16:25
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我是来转正的
2015-10-11 00:16
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
5
支持MFC DLL的也有,只是大家都觉得,撸起来很蛋痛
2015-10-11 00:17
0
雪    币: 35
活跃值: (642)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
求传送门! 一直找不到!
2015-10-16 02:14
0
雪    币: 65
活跃值: (545)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
这个可能是你需要的
https://github.com/fancycode/MemoryModule/
2015-10-21 14:12
0
雪    币: 65
活跃值: (545)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
MemoryModule不支持加载MFC DLL

原因概括下大概是:
mfc dll有些函数用到了文件名,然而你直接从内存中加载的,没有文件名,然后就不开心了。
http://read.pudn.com/downloads93/sourcecode/windows/control/368102/Inc/RawPeApi.h__.htm

上传的附件:
2015-10-21 20:51
0
雪    币: 250
活跃值: (81)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
inline HMODULE ModuleHandleByAddr(const void* ptrAddr)
{
        MEMORY_BASIC_INFORMATION info;
        ::VirtualQuery(ptrAddr, &info, sizeof(info));
        return (HMODULE)info.AllocationBase;
}

inline HMODULE ThisModuleHandle()
{
        HMODULE sInstance = ModuleHandleByAddr((void*)&ThisModuleHandle);
        return sInstance;
}

HMODULE hInst= ThisModuleHandle();
        HRSRC hrsc =  FindResource(hInst, MAKEINTRESOURCE(nResID), szFileType);
        if (hrsc == NULL)
        {
                CloseHandle(hFile);
                return FALSE;
        }
        HGLOBAL hG = LoadResource(hInst, hrsc);   
        DWORD dwSize = SizeofResource(hInst,  hrsc);   
        WriteFile(hFile, hG, dwSize, &dwWrite, NULL);    //WriteFile(hFile,LockResource(hG),dwSize,&dwWrite,NULL);   
        FreeResource(hG);
2015-11-9 20:38
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
还在做梦幻辅助啊! 梦幻有行为检测  看过你之前帖子 应该还没破解 梦幻的保护吧。。。
2015-12-8 21:13
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
小菜鸟,学习中,有分赚吗?
2015-12-31 21:54
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
LOAD的方法,动态加载DLL.
2016-1-9 19:10
0
游客
登录 | 注册 方可回帖
返回
//