首页
社区
课程
招聘
[原创]加载内存当中的DLL(文件),支持64位和32位。直接加载内存或资源当中的dll,不落地
发表于: 2018-7-28 18:07 17107

[原创]加载内存当中的DLL(文件),支持64位和32位。直接加载内存或资源当中的dll,不落地

2018-7-28 18:07
17107

    MyFunc Func2 = (MyFunc)hDll->MemGetProcAddress("Func2");

由于某些目的,自己做了一个加载内存当中DLL文件的东西,原本网上的各种教程都挺多的,但是就是没有针对32、64位适配。
先说说功能和特性(BUG[S])吧:
1、支持直接加载内存当中的DLL映像,无磁盘占用
2、自动适应32/64位
3、支持寻找函数地址
4、支持卸载DLL, 重复利用实例
6、支持静态或者非静态编译

用VS2017编译通过,能正常加载内存当中的DLL文件。
自己的dll只是弹框,也测试过寻找地址,都是没问题的。
程序是x64的,也有x86版本,为什么要x64版本,是因为某些程序用32位不方便(某些新的游戏,你懂的)。
使用方法:
包含dllloader.h头文件
#include "dllloader.h"
引入库文件
#pragma comment(lib,"MemLoadLibLib.lib")
32位和64位的静态链接、非静态链接版本都提供了。
在全局创建一个容器,里面为MEM_LoadDllAPI的指针。喜欢可以用智能指针。使用完以后释放掉即可。

简单的例子:
// 实例化
    MEM_LoadDllAPI* hDll = GetMemLoadDllApp();

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2018-7-29 00:59 被lhxdiao编辑 ,原因: 内存释放
收藏
免费 2
支持
分享
最新回复 (18)
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
试问mfc资源能加载了吗
2018-7-28 18:14
0
雪    币: 12
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
萌克力 试问mfc资源能加载了吗
没试,但是猜99%不行
2018-7-28 18:17
0
雪    币: 1036
活跃值: (1311)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
4
还是看看别人写的吧! 另外blackbone里面也有,但依赖太大,想抠出来单独用贼麻烦。
原版 支持/x86 /64    https://github.com/fancycode/MemoryModule 
增加版 支持/x86 /64 + 异常    https://github.com/strivexjun/MemoryModulePP
最后于 2018-7-28 18:22 被StriveXjun编辑 ,原因:
2018-7-28 18:21
1
雪    币: 2089
活跃值: (3933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
萌克力 试问mfc资源能加载了吗
MFC的DLL,这样处理一下就行了,需要重定向一下入口函数

// export DllMain for the DLL
 
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
       if (dwReason == DLL_PROCESS_ATTACH)
       {
               BOOL bResult = FALSE;
 
#ifdef _AFXDLL
               // wire up resources from core DLL
               AfxCoreInitModule();
#endif
 
               _AFX_THREAD_STATE* pState = AfxGetThreadState();
               AFX_MODULE_STATE* pPrevModState = pState->m_pPrevModuleState;
 
               // Initialize DLL's instance(/module) not the app's
               if (!AfxWinInit(hInstance, NULL, _T(""), 0))
               {
                       AfxWinTerm();
                       goto Cleanup;       // Init Failed
               }
 
               // initialize the single instance DLL
               CWinApp* pApp; pApp = AfxGetApp();
               if (pApp != NULL && !pApp->InitInstance())
               {
                       pApp->ExitInstance();
                       AfxWinTerm();
                       goto Cleanup;       // Init Failed
               }
 
               pState->m_pPrevModuleState = pPrevModState;
#ifdef _AFXDLL
               // wire up this DLL into the resource chain
               VERIFY(AfxInitExtensionModule(controlDLL, hInstance));
               CDynLinkLibrary* pDLL; pDLL = new CDynLinkLibrary(controlDLL);
               ASSERT(pDLL != NULL);
#else
               AfxInitLocalData(hInstance);
#endif
 
               bResult = TRUE;
 
Cleanup:
               pState->m_pPrevModuleState = pPrevModState;
#ifdef _AFXDLL
               // restore previously-saved module state
               VERIFY(AfxSetModuleState(AfxGetThreadState()->m_pPrevModuleState) ==
                       &afxModuleState);
               DEBUG_ONLY(AfxGetThreadState()->m_pPrevModuleState = NULL);
#endif
               return bResult;
       }
       else if (dwReason == DLL_PROCESS_DETACH)
       {
#ifdef _AFXDLL
               // set module state for cleanup
               ASSERT(AfxGetThreadState()->m_pPrevModuleState == NULL);
               AfxGetThreadState()->m_pPrevModuleState =
                       AfxSetModuleState(&afxModuleState);
#endif
 
               CWinApp* pApp = AfxGetApp();
               if (pApp != NULL)
                       pApp->ExitInstance();
 
#ifdef _DEBUG
               // check for missing AfxLockTempMap calls
               if (AfxGetModuleThreadState()->m_nTempMapLock != 0)
               {
                       TRACE1("Warning: Temp map lock count non-zero (%ld).\n",
                               AfxGetModuleThreadState()->m_nTempMapLock);
               }
#endif
               AfxLockTempMaps();
               AfxUnlockTempMaps(-1);
 
               // terminate the library before destructors are called
               AfxWinTerm();
 
#ifdef _AFXDLL
               AfxTermExtensionModule(controlDLL, TRUE);
#else
               AfxTermLocalData(hInstance, TRUE);
#endif
       }
       else if (dwReason == DLL_THREAD_DETACH)
       {
               AFX_MANAGE_STATE(&afxModuleState);
 
#ifdef _DEBUG
               // check for missing AfxLockTempMap calls
               if (AfxGetModuleThreadState()->m_nTempMapLock != 0)
               {
                       TRACE1("Warning: Temp map lock count non-zero (%ld).\n",
                               AfxGetModuleThreadState()->m_nTempMapLock);
               }
#endif
               AfxLockTempMaps();
               AfxUnlockTempMaps(-1);
 
               AfxTermThread(hInstance);
       }
 
       return TRUE;
}
 
#ifdef _AFXDLL
2018-7-28 18:55
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
lhxdiao MFC的DLL,这样处理一下就行了,需要重定向一下入口函数 // export DllMain for the DLL extern "C" BOOL WINAPI ...
666
2018-7-29 03:20
0
雪    币: 36
活跃值: (1061)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
mark
2018-7-29 11:02
0
雪    币: 573
活跃值: (222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢 大佬分享
2018-7-30 00:21
0
雪    币: 171
活跃值: (519)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
又有新病毒要更新了,操。
2018-7-30 10:31
0
雪    币: 25
活跃值: (506)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
下载下来看看
2018-7-30 16:24
0
雪    币: 6552
活跃值: (4346)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
11
支持异常处理吗?无模块这个最重要了。
2018-7-31 22:14
0
雪    币: 345
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
我去年也写了一个,不过是32位的,没测试过支不支持异常
2018-8-1 11:48
0
雪    币: 35
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这是内存加载 不是内存注入? 意思得自己在写一个 load? 
2018-8-4 14:45
0
雪    币: 35
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不是源码啊 。。分享的静态库?老铁去玩E语言论坛合适, 谁胆肥就用吧 白下 
2018-8-5 09:23
0
雪    币: 12348
活跃值: (5118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15

多谢楼主分享哟
2018-8-5 10:43
0
雪    币: 10
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
库的源码有吗?
2018-8-11 20:47
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
多谢楼主分享,最近刚好在学习有关的技术。
2019-6-3 21:07
0
雪    币: 22
活跃值: (453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
Mark
2019-6-23 13:08
0
游客
登录 | 注册 方可回帖
返回
//