Rez*_*dan 13 c++ windows winapi visual-c++
我在我的机器上用C++创建了一个dll注入方法,当我尝试将特定的dll注入到游戏中时,它非常有效.但是,当我在我朋友的计算机上运行该程序时(没有安装Visual Studio可再发行组件),我被警告我需要MSVCR等...(可再发行组件).
所以我在发布模式下使用Visual Studio 2012中的以下设置编译:运行时库:多线程/ MT.现在,当我在朋友的机器上运行它时,我被警告我只需要库MSVCP110D.dll (很奇怪,要求调试版本)(没有防病毒软件,UAC被禁用).我在发布路径中手动复制了所请求的库,但仍无法正常工作.
究竟是什么问题?
这是我制作的注塑代码:
int inject(string lpLibraryPath)
{
HANDLE hProc;
LPVOID paramAddr;
HINSTANCE hDll;
hDll = LoadLibrary(L"KERNEL32");
fpLoadLibrary LoadLibraryAddr = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA");
hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id);
paramAddr = VirtualAllocEx(hProc, 0, strlen(lpLibraryPath.c_str()) + 1, MEM_COMMIT, PAGE_READWRITE);
if(WriteProcessMemory(hProc, paramAddr, lpLibraryPath.c_str(), strlen(lpLibraryPath.c_str()) + 1, NULL) == NULL)
{
return 0;
}
CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddr, paramAddr, 0, 0);
CloseHandle(hProc);
return 1;
}
};
Run Code Online (Sandbox Code Playgroud)
这是主要功能 - 在这里我称之为方法
int inject(string lpLibraryPath)
{
HANDLE hProc;
LPVOID paramAddr;
HINSTANCE hDll;
hDll = LoadLibrary(L"KERNEL32");
fpLoadLibrary LoadLibraryAddr = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA");
hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id);
paramAddr = VirtualAllocEx(hProc, 0, strlen(lpLibraryPath.c_str()) + 1, MEM_COMMIT, PAGE_READWRITE);
if(WriteProcessMemory(hProc, paramAddr, lpLibraryPath.c_str(), strlen(lpLibraryPath.c_str()) + 1, NULL) == NULL)
{
return 0;
}
CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddr, paramAddr, 0, 0);
CloseHandle(hProc);
return 1;
}
};
Run Code Online (Sandbox Code Playgroud)
我在stackoverflow上找到了一些参考,但它们没有任何帮助.像 msvcp110.dll,我该如何解决它?或修复"计算机中缺少"MSVCP110D.dll"问题
Han*_*ant 10
很奇怪,要求调试版本
告诉你你做错了什么,你不小心复制了DLL的Debug版本而不是Release版本.由于您只更改了发布版本的设置,因此仍需要msvcp110d.dll.通常,更改所有配置和所有平台的设置是明智的.单调乏味,所以经常会被跳过.
我在发布路径中手动复制了所请求的库,但仍无法正常工作
是的,因为你注入了DLL,所以无法工作.一个不同的过程.因此,在加载时,将搜索游戏的安装目录以查找文件,而不是安装实用程序的目录.
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |