使用C#将dll注入当前进程

Inject dll into current process with C#

所以我的问题与本网站上发布的其他问题有点不同,理论上,我要找的东西应该比将 DLL 注入 'any' 进程的注入器简单得多。

我有一个我们可以称为 game.exe 的进程,它在启动时加载一系列 dll。这些 dll 是用 C# 编写的,基本上是 'scripts',我可以毫无问题地进行编辑。我用 C++ 编写了一个 DLL,当它使用任何通用注入器 'nop(s)' 注入到 game.exe 进程时,会出现一系列地址。我已确认 c++ dll 按预期工作。

现在回到我的问题,我希望用 c# 代码编写自动将 c++ dll 注入 game.exe 进程而不是 'any' 进程的代码。我说这应该更容易的原因是 c# dll 已经 运行 基本上与 game.exe 相同 'space' 所以它应该更容易做?

提前致谢。如果这里需要 c++ 代码,它是:

constexpr AddrDescriptor addresses[] = { {0x1001bbea, 2}, {0x1001bc4d, 2}, {0x1001bc61, 7} };

DWORD WINAPI EntryPoint(LPVOID _arguments)
{
    for (size_t i = 0; i < (sizeof(addresses) / sizeof(AddrDescriptor)); i++)
    {
        addresses[i].nop_address();
    }
    return 0x1337;
}

BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        ::CreateThread(0, 0, static_cast<LPTHREAD_START_ROUTINE>(EntryPoint), 0, 0, 0);
        [[fallthrough]];
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;

编辑 1: 一位好心的用户向我指出了该网站上的另一个问题。这很有帮助,但如果我可以要求澄清。在c++中使用dll导出:(参考上面代码)

extern "C"
{
    __declspec(dllexport) DWORD WINAPI EntryPoint(LPVOID _arguments)
    {
        for (size_t i = 0; i < (sizeof(addresses) / sizeof(AddrDescriptor)); i++)
        {
            addresses[i].nop_address();
        }
        return 0x1337;
    }
}

现在是否可以导入此函数并在 C# 中调用它 DWORD WINAPI(LPVOID...) 数据类型如何?我不确定在 C# 中如何完成这样的事情

这解决了我的答案:C++ 代码

extern "C" 
{
    __declspec(dllexport) int NopTheFrickOut() 
    {
        for (size_t i = 0; i < (sizeof(addresses) / sizeof(AddrDescriptor)); i++)
        {
            addresses[i].nop_address();
        }
        return 0x1337;
    }
}

C#代码:

public class ExtensionScript : BaseScript
{
        [DllImport("RemoveTeknoChecks.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int NopTheFrickOut(); 
...
}
Calling NopTheFrickOut() in the main function of the C# DLl correctly nops the addresses.