gpt4 book ai didi

c# - 将托管 dll 注入(inject) native 进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:30 25 4
gpt4 key购买 nike

我正在尝试将托管的 c# dll 注入(inject) native 可执行文件。我将以下代码注入(inject)可执行文件以加载 CLR。​​

我知道注入(inject)有效,因为当我将代码注入(inject) cmd.exe 时它会正确输出。我知道 CLRCreateInstance、pMetaHost->GetRuntime、pRuntimeInfo->GetInterface 都返回 S_OK,但 pClrRuntimeHost->Start() 返回 E_FAIL。

只有当我将 dll 注入(inject)远程进程时才会发生这种情况。如果我在自己的进程上加载 dll 并从那里调用 Main,所有调用都会返回 S_OK,并且托管代码运行良好。

更新:我试过将代码注入(inject)其他进程,如 notepad.exe 和 explorer.exe。它在那些方面运行良好。我仍然很好奇为什么它不在 cmd.exe 中运行,但我只是将它用于测试目的,所以它不再是问题。

GetLastError 返回“试图引用不存在的标记”

#include "stdafx.h"
#include "Bootstrap.h"
#include <metahost.h>
#pragma comment(lib, "mscoree.lib")

using namespace std;

//Forward declarations
void StartTheDotNetRuntime();

DllExport HRESULT Main(_In_ LPCTSTR lpCommand)
{
cout << "Starting .NET runtime" << endl;
StartTheDotNetRuntime();
return 0;
}

void StartTheDotNetRuntime()
{
wprintf(L"Press enter to load the .net runtime...");

HRESULT hr;
ICLRMetaHost *pMetaHost = NULL;
ICLRRuntimeInfo *pRuntimeInfo = NULL;
ICLRRuntimeHost *pClrRuntimeHost = NULL;

// build runtime
hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_PPV_ARGS(&pMetaHost));
hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost,
IID_PPV_ARGS(&pClrRuntimeHost));

// start runtime
hr = pClrRuntimeHost->Start();
cout << "RESULT: " << hr << endl;

wprintf(L".Net runtime is loaded.");

// Okay, the CLR is up and running in this (previously native) process.
// Now call a method on our managed C# class library.
DWORD dwReturn = 0;
hr = pClrRuntimeHost->ExecuteInDefaultAppDomain(
L"F:\\Client.dll",
L"Client.Main", L"Start", L"MyParameter", &dwReturn);
cout << dwReturn << endl;
}

最佳答案

我找到了问题的答案,至少对我来说,注入(inject) Bootstrap 的进程需要有管理员权限。我花了很长时间才意识到,默认情况下所有程序都对我具有管理员权限,一旦我开始以管理员身份注入(inject)的过程,它就起作用了!

关于c# - 将托管 dll 注入(inject) native 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20023379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com