问题标签 [clr-hosting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
442 浏览

c# - 当本机进程托管 .NET Core 运行时时,在 C# 和 C++ 之间传递 C# 托管实例

我正在使用 HostWitHostFxr 示例进行原型设计,该示例允许本机进程使用 nethost 和 hostfxr 库托管 .NET Core。 https://github.com/dotnet/samples/tree/master/core/hosting/HostWithHostFxr

我正在尝试将托管对象的实例从 C# 返回到 C++。然后 C++ 调用另一个 C# 方法对托管对象执行某些操作并释放它。

现在我在第二步失败了: 未处理的异常。System.NullReferenceException:对象引用未设置为对象的实例。

根据我所做的研究,我的理解是,要返回对 C++ 的托管 C# 对象引用,我需要使用 GCHandle.Alloc() 和 GCHandleType.Pinned 来固定对象。

我修改了 C# 示例 Lib.cs 以添加一个新的 Foobar 类:

我添加了一个返回 Foobar 实例的方法:

我添加了一个方法来处理 Foobar 的实例并释放它:

在 C++ 端,我修改了 nativehost.cpp 以添加此代码以获取 Foobar 实例:

这与 Foobar 实例做一些事情:

为了让这个工作,我缺少什么?

0 投票
1 回答
226 浏览

c# - 击败从内存中擦除 PE

我怎样才能打败从内存中擦除 PE?

第一:我正在处理的可执行文件是 C++ 中的 CLR 主机,因此后面的程序是 C# 第二:C# 程序使用 Virtual Protect 功能擦除 PE 标头(反倾销的非常常见的保护)

在所有情况下,我都使用 x64dbg 转储了 C# 程序,然后由于擦除 PE 标头,我无法真正实现我的目标。我发现修补此问题的唯一方法是在程序启动时用 NOP 替换 VirutalProtect 调用,然后程序将无法擦除 PE 标头,也许?

PS:我无法通过原始文件修补转储文件,因为没有原始文件,我拥有的唯一可执行文件是 C++ 中的 CLR 主机和 C# 中的转储可执行文件。

我将不胜感激任何帮助,对不起我的英语不好。

0 投票
0 回答
66 浏览

c# - CLR Host - 如何使用任意方法签名执行函数

我有一个托管 C# 测试 DLL,我想从我的非托管 C++ 代码中调用它的函数。

问题是我找不到一个示例来说明如何从我的 c++ 代码中调用任意函数,我只能得到ICLRRuntimeHost::ExecuteInDefaultAppDomain工作,但这个函数确实使用了预定义的方法签名。

问题

我能够ShowMsg从我的 C# DLL 中执行该函数,但我不知道如何调用具有其他签名的方法而不是int(int). 有人可以帮我吗?

C++ 代码

C# 代码

0 投票
0 回答
43 浏览

c++ - 在 .net 和 c++ 之间传输字典参数

我使用 clrhost 调用一个托管 dll,该 dll 是在 vb.net 中编写的,主要功能是返回一个 Dictionary(Of String, Tuple(Of String, String, String, String))。因为编译了.net dll,所以无法更改函数的返回值

现在主机已成功调用 dll,并返回一个有效值,我怎样才能从结果中获取正确的值。

在此处输入图像描述