【发布时间】:2019-07-24 08:34:11
【问题描述】:
我需要在我的 appdomain 中获取 已加载程序集 的内存地址。 当程序集加载到 .Net 应用程序时,它们将完全加载到主应用程序内存中。
如果我们在内存中搜索此字节模式:
byte[] pe_pattern = {
0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0xFF, 0xFF
};
我们找到他们在内存中放置的位置和地址。 但我需要在没有内存扫描的情况下执行此操作因为性能原因。
我尝试通过AppDomain.CurrentDomain.GetAssemblies() 获取加载的程序集,并通过垃圾收集器将它们的地址作为对象获取,其他一些方法可以在这里找到:Memory address of an object in C#
但是我得到的地址不是正确的地址,我没有错误。
在 c++ 中有一种方法可以通过 loadlibrary 获取加载的 dll,但在 C# 中我找不到任何东西。
如何在我的 C# 应用程序中获取已加载程序集的内存地址?
【问题讨论】:
-
你不能,因为 C# 没有公开这个功能。
-
@IanKemp 你确定吗?我看到有些人在 .Net 应用程序中这样做:(
标签: c# memory .net-assembly