//---释放EXE文件----------------------------------------------
char *hmem;
DWORD size2;
//查找资源
HRSRC hRes = FindResource(NULL,MAKEINTRESOURCE(IDR_RC_EXE1),"RC_EXE");
//导入资源
HGLOBAL hgRes = LoadResource(NULL,hRes);
//锁定资源
void *pRes = LockResource(hgRes);
//得到资源大小
DWORD size = SizeofResource(NULL,hRes); //申请内存空间
hmem = (char*)malloc(size+1);
//把资源文件写入新申请的内存空间
WriteProcessMemory(GetCurrentProcess(),hmem,pRes,size,&size2);
//创建文件
HANDLE hFile = CreateFile(m_StartFile,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
DWORD dwWrite;
//把内存中的数据写入文件
WriteFile(hFile,(void*)hmem,size,&dwWrite,0);
//关闭文件句柄
CloseHandle(hFile);
//释放资源句柄
GlobalFree(hgRes);//---把DLL文件写到EXE文件后面 //--释放DLL文件
HRSRC dRes = FindResource(NULL,MAKEINTRESOURCE(IDR_RC_DLL1),"RC_DLL");
//导入资源
HGLOBAL dgRes = LoadResource(NULL,dRes);
//锁定资源
void *dlRes = LockResource(dgRes);
//得到资源大小
DWORD dllSize = SizeofResource(NULL,dRes);
//申请内存空间
hmem = (char*)malloc(dllSize+1);
//把DLL资源文件写入新申请的内存空间
WriteProcessMemory(GetCurrentProcess(),hmem,dRes,dllSize,&size2); //创建文件
//以只写方式打开EXE文件
HANDLE shFile = CreateFile(m_StartFile,GENERIC_WRITE,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(shFile == INVALID_HANDLE_VALUE)
{
MessageBox("打开EXE文件失败");
return;
}
//把Exe文件的指针移动到文件末尾
if(SetFilePointer(shFile,0,NULL,FILE_END)==-1)
{
MessageBox("移动文件指针失败");
return;
}
WriteFile(shFile,(void*)hmem,dllSize,&dwWrite,0);
//
CloseHandle(shFile);
GlobalFree(dRes);问题:上面一段代码是将一个dll文件写在一个exe文件的末尾,捆绑成一个文件,用WriteProcessMemory函数先将数据写入内 存,然后再将内存中的数据写入文件,为什么运行后有固定的垃圾数据写在了exe后面,然后才是DLL文件。但是把释放DLL文件注视掉 释放exe文件是正常的
我是把exe文件和dll文件当作资源包含在程序里面的 当释放的时候就出现了上述的问题
求教各位这是个怎么个状况?
char *hmem;
DWORD size2;
//查找资源
HRSRC hRes = FindResource(NULL,MAKEINTRESOURCE(IDR_RC_EXE1),"RC_EXE");
//导入资源
HGLOBAL hgRes = LoadResource(NULL,hRes);
//锁定资源
void *pRes = LockResource(hgRes);
//得到资源大小
DWORD size = SizeofResource(NULL,hRes); //申请内存空间
hmem = (char*)malloc(size+1);
//把资源文件写入新申请的内存空间
WriteProcessMemory(GetCurrentProcess(),hmem,pRes,size,&size2);
//创建文件
HANDLE hFile = CreateFile(m_StartFile,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
DWORD dwWrite;
//把内存中的数据写入文件
WriteFile(hFile,(void*)hmem,size,&dwWrite,0);
//关闭文件句柄
CloseHandle(hFile);
//释放资源句柄
GlobalFree(hgRes);//---把DLL文件写到EXE文件后面 //--释放DLL文件
HRSRC dRes = FindResource(NULL,MAKEINTRESOURCE(IDR_RC_DLL1),"RC_DLL");
//导入资源
HGLOBAL dgRes = LoadResource(NULL,dRes);
//锁定资源
void *dlRes = LockResource(dgRes);
//得到资源大小
DWORD dllSize = SizeofResource(NULL,dRes);
//申请内存空间
hmem = (char*)malloc(dllSize+1);
//把DLL资源文件写入新申请的内存空间
WriteProcessMemory(GetCurrentProcess(),hmem,dRes,dllSize,&size2); //创建文件
//以只写方式打开EXE文件
HANDLE shFile = CreateFile(m_StartFile,GENERIC_WRITE,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(shFile == INVALID_HANDLE_VALUE)
{
MessageBox("打开EXE文件失败");
return;
}
//把Exe文件的指针移动到文件末尾
if(SetFilePointer(shFile,0,NULL,FILE_END)==-1)
{
MessageBox("移动文件指针失败");
return;
}
WriteFile(shFile,(void*)hmem,dllSize,&dwWrite,0);
//
CloseHandle(shFile);
GlobalFree(dRes);问题:上面一段代码是将一个dll文件写在一个exe文件的末尾,捆绑成一个文件,用WriteProcessMemory函数先将数据写入内 存,然后再将内存中的数据写入文件,为什么运行后有固定的垃圾数据写在了exe后面,然后才是DLL文件。但是把释放DLL文件注视掉 释放exe文件是正常的
我是把exe文件和dll文件当作资源包含在程序里面的 当释放的时候就出现了上述的问题
求教各位这是个怎么个状况?
2 不用你说的函数, 先写个程序用CFile把DLL写到EXE结尾
在EXE启动的时候,用CFILE把DLL读出,放临时目录,
这样就不会有任何问题,如何?
单独写DLL也是正确完整的
用第二个WriteProcessWrite的时候就出现了垃圾数据