即使静态链接,C++也会请求MSVCP110D.dll

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,所以无法工作.一个不同的过程.因此,在加载时,将搜索游戏的安装目录以查找文件,而不是安装实用程序的目录.