91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 275KB
    文件類型: .rar
    金幣: 2
    下載: 1 次
    發布日期: 2021-06-04
  • 語言: C/C++
  • 標簽:

資源簡介

從網絡下載了CMemLoadDll源碼,整理并增加了對64位dll的加載,并增加了調用實例代碼(含32位、64位dll的調用)。以上代碼全部基于vs2008,當然CMemLoadDll源碼在vc6下也可用。

資源截圖

代碼片段和文件信息

//?MemLoadDll.cpp:?implementation?of?the?CMemLoadDll?class.
//
//////////////////////////////////////////////////////////////////////
#include?“StdAfx.h“
#include?“MemLoadDll.h“

#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMemLoadDll::CMemLoadDll()
{
m_bIsLoadOk?=?FALSE;
m_pImagebase?=?NULL;
m_pDllMain?=?NULL;
}

CMemLoadDll::~CMemLoadDll()
{
if(m_bIsLoadOk)
{
// ASSERT(m_pImagebase?!=?NULL);
// ASSERT(m_pDllMain???!=?NULL);
//脫鉤,準備卸載dll
m_pDllMain((HINSTANCE)m_pImagebase?DLL_PROCESS_DETACH?0);
VirtualFree(m_pImagebase?0?MEM_RELEASE);
}
}

//MemLoadLibrary函數從內存緩沖區數據中加載一個dll到當前進程的地址空間,缺省位置0x10000000
//返回值:?成功返回TRUE??失敗返回FALSE
//lpFileData:?存放dll文件數據的緩沖區
//nDataLength:?緩沖區中數據的總長度
BOOL?CMemLoadDll::MemLoadLibrary(void*?lpFileData?int?nDataLength)
{
if?(m_pImagebase?!=?NULL)
{
return?FALSE;??//已經加載一個dll,還沒有釋放,不能加載新的dll
}
//檢查數據有效性,并初始化
if?(!CheckDataValide(lpFileData?nDataLength))
{
return?FALSE;
}
//計算所需的加載空間
int?nImageSize?=?CalcTotalImageSize();

if?(nImageSize?==?0)
{
return?FALSE;
}
//?分配虛擬內存
void?*pMemoryAddress?=?VirtualAlloc(NULL?nImageSize?MEM_COMMIT|MEM_RESERVE?PAGE_EXECUTE_READWRITE);

if?(pMemoryAddress?==?NULL)
{
return?FALSE;
}
else
{
CopyDllDatas(pMemoryAddress?lpFileData);?//復制dll數據,并對齊每個段
//重定位信息
if?(m_pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_baseRELOC].VirtualAddress?>?0
&&?m_pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_baseRELOC].Size?>?0)
{
DoRelocation(pMemoryAddress);
}
//填充引入地址表
if?(!FillRavAddress(pMemoryAddress))?//修正引入地址表失敗
{
VirtualFree(pMemoryAddress?0?MEM_RELEASE);
return?FALSE;
}
//修改頁屬性。應該根據每個頁的屬性單獨設置其對應內存頁的屬性。這里簡化一下。
//統一設置成一個屬性PAGE_EXECUTE_READWRITE
unsigned?long?unOld;

VirtualProtect(pMemoryAddress?nImageSize?PAGE_EXECUTE_READWRITE?&unOld);
}
//修正基地址
#ifdef?WIN32
m_pNTHeader->OptionalHeader.Imagebase?=?(DWORD)pMemoryAddress;
#else
m_pNTHeader->OptionalHeader.Imagebase?=?(ULONGULONG)pMemoryAddress;
#endif
//接下來要調用一下dll的入口函數,做初始化工作。
m_pDllMain?=?(ProcDllMain)(m_pNTHeader->OptionalHeader.AddressOfEntryPoint?+?(PBYTE)pMemoryAddress);

BOOL?InitResult?=?m_pDllMain((HINSTANCE)pMemoryAddress?DLL_PROCESS_ATTACH?0);

if?(!InitResult)?//初始化失敗
{
m_pDllMain((HINSTANCE)pMemoryAddress?DLL_PROCESS_DETACH?0);
VirtualFree(pMemoryAddress?0?MEM_RELEASE);
m_pDllMain?=?NULL;
return?FALSE;
}

m_bIsLoadOk?=?TRUE;
m_pImagebase?=?pMemoryAddress;
return?TRUE;
}

BOOL?CMemLoadDll::IsLoadOk()
{
return?m_bIsLoadOk;
}

//MemGetProcAddress函數從dll中獲取指定函數的地址
//返回值:?成功返回函數地址??失敗返回NULL
//lpProcName:?要查找函數的名字或者序號
FARPROC?CMemLoadDll::MemGetProcAddress(LPCSTR?lp

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????1230??2010-11-10?14:49??MemLoadDll.h

?????文件????????418??2010-11-09?14:33??CalcModule\CalcModule.cpp

?????文件???????4450??2010-11-09?14:31??CalcModule\CalcModule.dsp

?????文件????????543??2010-11-09?14:12??CalcModule\CalcModule.dsw

?????文件????????320??2010-11-09?14:32??CalcModule\CalcModule.h

?????文件??????48640??2010-11-09?19:25??CalcModule\CalcModule.opt

?????文件???????1727??2010-11-09?14:33??CalcModule\CalcModule.plg

?????文件???????1239??2010-11-10?14:15??CalcModule\CalcModule.sln

????..A..H.??????9728??2010-11-10?14:54??CalcModule\CalcModule.suo

?????文件??????11863??2010-11-10?14:15??CalcModule\CalcModule.vcproj

?????文件???????1637??2010-11-09?14:12??CalcModule\ReadMe.txt

?????文件????????297??2010-11-09?14:12??CalcModule\StdAfx.cpp

?????文件????????802??2010-11-09?14:12??CalcModule\StdAfx.h

?????文件?????452096??2010-11-10?14:10??Demo\CalcModule32.dll

?????文件?????548352??2010-11-10?14:15??Demo\CalcModule64.dll

?????文件??????35716??2010-11-10?14:28??Demo\memdll.aps

?????文件???????1047??2010-11-09?15:20??Demo\memdll.clw

?????文件???????1890??2010-11-09?15:25??Demo\memdll.cpp

?????文件???????4291??2010-11-03?16:22??Demo\memdll.dsp

?????文件????????535??2010-11-03?16:21??Demo\memdll.dsw

?????文件???????1324??2010-11-03?16:21??Demo\memdll.h

?????文件??????49664??2010-11-09?15:20??Demo\memdll.opt

?????文件???????1614??2010-11-09?15:20??Demo\memdll.plg

?????文件???????5204??2010-11-10?14:28??Demo\memdll.rc

?????文件???????1231??2010-11-09?15:27??Demo\memdll.sln

????..A..H.?????16384??2010-11-10?14:58??Demo\memdll.suo

?????文件??????14280??2010-11-10?14:29??Demo\memdll.vcproj

?????文件???????5944??2010-11-10?14:57??Demo\memdllDlg.cpp

?????文件???????1434??2010-11-10?14:29??Demo\memdllDlg.h

?????文件??????14209??2010-11-10?14:49??Demo\MemLoadDll.cpp

............此處省略14個文件信息

評論

共有 條評論

相關資源