gpt4 book ai didi

c# - JIT 编译后如何(以及在​​哪里)加载 native 代码?

转载 作者:行者123 更新时间:2023-11-30 04:56:43 25 4
gpt4 key购买 nike

我有一个用 .net(C#,64 位)编写的应用程序,我还有一个 DLL(用 C++ 编写),我想在运行时加载它并从主应用程序(从 DLL 中)调用特定函数).为此,我必须找到此 .net 应用程序的 native 代码并声明指向该函数的函数指针。

现在,我已经遍历了 PE header 和元数据,找到了所需函数的 RVA,但是它让我进入了 IL(字节码)实现而不是 native 实现(在运行时调用)。经过一些调试后,我设法找到函数的 native (ASM) 代码,映射到 64 位地址空间,我可以从 DLL 调用它,但我不知道如何动态地找到这个函数(每次 IL 代码运行通过 JITC 后)。

有什么方法可以获取有关 JITC 如何/在内存中加载 native 代码的位置的信息?我在 PE header 中找不到与此相关的任何内容。

最佳答案

经过一些研究,我找到了 ICorDebugFunction::GetNativeCode这将返回 JIT 函数的地址(假定它已被编译)。设法让它通过管道服务器工作。

对于任何试图完成与我类似的事情的人,您可能想研究对象在内存中的处理方式(我想这可能会因编译器/.net 框架而异),它们似乎都有指针到包含 JIT(成员)函数地址及其 RID(也可以在 PE header 中找到)的表。

关于c# - JIT 编译后如何(以及在​​哪里)加载 native 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52377812/

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