烈焰门户技术文章ASP.Net
阅读文章

.Net中枚举AppDomains功能详解

[日期: 2008-05-28 ] 来源:   作者: [字体: ]

.Net中枚举AppDomains功能详解

.Net 框架提供的基础类库中并没有枚举AppDomains的功能,只提供了获取当前执行代码所在的AppDomain功能。

国外一家提供.Net保护工具的,同时提供了一个AppDomain dump工具。用来证明其保护有效。

名称就不提了,简单介绍一下其保护原理:整体加密保护,支持嵌入程序集生成单一可执行文件。

也就是用native loader 包裹一下,仍然还是整体加密保护模式。

但是和其它工具有一点区别。程序集整体解密后不是放在默认AppDomain中执行的,它另外创建了一个AppDomain。

其提供的dump 工具的原理:

注入到选择的进程,然后获取当前AppDomain,枚举AppDomain中的 程序集,直接整体dump程序集。

这个工具可以对付大多数整体加密保护。却对付不了他们自家的。被其用来证明自己的保护效果。



程序集一般在默认AppDomain中执行的,其注入后,获取当前appdomain得到的使默认AppDomain,所以无法枚举被加密保护的程序集。

如果加上AppDomain的枚举功能,这个工具就可以用来对付他们自己的保护产品了。



基础类库中并没有枚举AppDomains的功能,那是否可以在C#中实现呢?

答案使肯定的。基础类库没有,但是其宿主接口提供了这个功能。

ICorRuntimeHost 接口中的两个方法

EnumDomains 和 NextDomain 。

具体详情可以参考 msdn。

在C#中怎么使用呢?

首先添加引用

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscoree.tlb

路径根据实际情况来定,版本号也不一定非得要2.0.50727 只要存在 mscoree.tlb就行。

这个接口在 1.0 中就提供了,更高的版本就不用说了。



IntPtr enumHandle = IntPtr.Zero;

CorRuntimeHostClass host = new mscoree.CorRuntimeHostClass();

host.EnumDomains(out enumHandle);

object domain = null;

while (true)

{

host.NextDomain(enumHandle, out domain);

if (domain == null) break;

AppDomain appDomain = (AppDomain)domain;

//********

}

host.CloseEnum(enumHandle);

Marshal.ReleaseComObject(host);

阅读:
录入: ☆我就‰喜欢☆ 打印 错误报告
上一篇: 使用VMware的.NET程序员应该注意的问题
下一篇: .NET Framework 新功能和增强的功能ASP.NET 移动控件
相关文章
本文评论(点击查看所有评论
发表评论
希望 寒冷 强悍 惊讶 开心 吃饭 恭喜 流泪 爱你 啊困 心碎
偷笑 咒骂 流汗 大哭 求爱 装酷 砖头 头晕 出气 呲牙 吸烟

点评:


  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规!
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任!
  • 本站管理人员有权保留或删除其管辖留言中的任意内容!
  • 本站有权在网站内转载或引用您的评论!
  • 参与本评论即表明您已经阅读并接受上述条款!
关于烈焰网 | 意见投诉 | 网站地图 | 联系方式 | Ajax技术
Copyright © 烈焰门户 www.Jvqq.Net.Cn All Rights Reserved 京ICP备07022601号