`
RednaxelaFX
  • 浏览: 3052805 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

反射还真会挂……

    博客分类:
  • .NET
阅读更多
呃,CLR的反射也可以注入字符串……看来这里也有可玩的突破口 OTL

以下代码:
using System;
using System.Reflection;
using System.Reflection.Emit;

static class Program {
    static void Main() {
        var assemblyName = new AssemblyName( "DemoAssembly" );
        var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess.Run );
        var moduleBuilder = assemblyBuilder.DefineDynamicModule( "DemoAssembly" );
        var baseTypeBuilder = moduleBuilder.DefineType(@"Base+My", TypeAttributes.Public);
        var baseType = baseTypeBuilder.CreateType();
        var derivedTypeBuilder = moduleBuilder.DefineType("Derived", TypeAttributes.Public, baseType);
        var derivedType = baseTypeBuilder.CreateType();
        var instance = Activator.CreateInstance(derivedType);
    }
}

在生成的基类名字里放入[]*&+,\的任意字符,都会引发在创建派生类是出错:
引用
Unhandled Exception: System.Runtime.InteropServices.COMException (0x80131130): Record not found on lookup. (Exception from HRESULT: 0x80131130)
   at System.Reflection.Module._InternalGetTypeToken(String strFullName, ModulerefedModule, String strRefedModuleFileName, Int32 tkResolution)
   at System.Reflection.Module.InternalGetTypeToken(String strFullName, Module refedModule, String strRefedModuleFileName, Int32 tkResolution)
   at System.Reflection.Emit.ModuleBuilder.GetTypeRefNested(Type type, Module refedModule, String strRefedModuleFileName)
   at System.Reflection.Emit.ModuleBuilder.GetTypeTokenWorkerNoLock(Type type, Boolean getGenericDefinition)
   at System.Reflection.Emit.ModuleBuilder.GetTypeTokenInternal(Type type, Boolean getGenericDefinition)
   at System.Reflection.Emit.TypeBuilder.Init(String fullname, TypeAttributes attr, Type parent, Type[] interfaces, Module module, PackingSize iPackingSize, Int32 iTypeSize, TypeBuilder enclosingType)
   at System.Reflection.Emit.ModuleBuilder.DefineTypeNoLock(String name, TypeAttributes attr, Type parent)
   at System.Reflection.Emit.ModuleBuilder.DefineType(String name, TypeAttributes attr, Type parent)
   at Program.Main() in d:\experiment\test\crash.cs:line 12


OTL……那些字符是CLI的类型的一些特殊字符,例如+是nested class的完全限定名里分隔它自身的类名与enclosing class的类名的字符,[]是指定泛型参数用的,等等。反射的时候可能也没办法检查到底哪些是正常的特殊字符,哪些是人为注入进去的。既然如此,Emit的时候就不该允许这些特殊字符进去的。注入啊注入……

P.S. 测试环境是.NET Framework 3.5 SP1
分享到:
评论

相关推荐

    关于反射最全的例子,这些你都懂了,反射就精了……

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法的信息。通过反射,开发者可以动态地创建对象、调用方法、访问和修改字段,甚至执行私有成员的操作,极...

    allegro_PCB_SI仿真.doc

    19 4.1 反射产生的原因与影响…………………………………………………19 4.2 如何减少反射……………………………………………………………21第五章 串扰:高速PCB设计中的挑战…………………………………………23 ...

    3d max入门教程

    第21课………………*反射和倒影 第22课………………*渐变色材质 第23课………………*使用摄像机 第24课………………*使用灯光 第25课………………*使用聚光灯 第26课………………*动画基础 第27课………………...

    matlab计算反射阵单元相位(460652)_matlab反射阵相位_matlab反射阵_反射阵matlab_反射阵

    在MATLAB中,我们通常会按照以下步骤来计算反射阵单元的相位: 1. **定义天线参数**:首先,我们需要定义反射阵的参数,包括天线数量、元素间距、频率等。例如,我们可以创建一个向量来存储每个单元的相位偏移。 2...

    行业文档-设计装置-具有双面反射效果的挂片式天花.zip

    在文档中,首先会介绍双面反射挂片式天花的设计理念,包括如何利用反射原理来提升空间的光环境,以及如何结合室内设计的整体风格进行创新。设计者可能会讨论不同的反射材质选择,如镜面不锈钢、镀膜玻璃等,每种材料...

    实验语音学概要

    2.3.1反射和衍射………………(20) 2.3.2吸收………………………(20) 2.3. 3混响………………………( 21) 2.3.4干涉、拍和驻波…………(21) 2.4声波在管道中的传播………(23) 2.4.1电一力一...

    提升反射的性能(有用,启发)

    "方法的直接调用,反射调用与……Lambda表达式调用"这一篇可能比较了不同调用方式的性能差异,包括直接调用、反射调用和使用Lambda表达式调用。Lambda表达式可以提供一种更简洁、更高效的代码执行方式,尤其是在需要...

    unity3D 镜面反射shader

    在Unity中,实现镜面反射的效果是通过Shader来完成的,Shader是一种编程语言,它可以控制场景中的物体如何在屏幕上显示。在本主题中,我们将深入探讨Unity3D中的镜面反射Shader及其实现。 镜面反射在图形学中是一个...

    反序列化代码……备忘一下……

    这篇博客“反序列化代码……备忘一下……”可能是作者分享关于反序列化技术的一些关键点和实践经验。虽然具体的内容没有给出,但从标题和标签我们可以推测出一些可能涉及的知识点。 1. **反序列化**:反序列化是将...

    Unity实现镜面反射

    全局光源如Directional Light(平行光)会影响物体的阴影和反射,而环境贴图(通常为HDR格式)提供了场景的全局反射信息。 为了将镜面反射应用到游戏对象,你需要将带有自定义Shader的材质赋给物体。在描述中提到的...

    光纤Bragg光栅反射谱

    3. **光栅长度(L)**:决定了反射谱的形状和强度,更长的光栅通常会给出更宽的反射带。 4. **入射光谱**:需要定义入射光的波长范围和分布,这将影响反射谱的观察结果。 MATLAB程序通常包括以下步骤: - 定义光栅...

    C#易筋经——反射、反射加壳、反射脱壳、反射注册机

    C#易筋经——反射、反射加壳、反射脱壳、反射注册机

    一种多层膜反射镜反射率的测量方法

    在测量过程中,得到的反射率数据还需用相关的物理模型进行分析。例如,使用菲涅耳方程(Fresnel equations)来计算理想条件下的理论反射率,然后与实验数据对比,找出差异原因。这些原因可能包括表面粗糙度、膜层间...

    java反射-英文版反射规范

    - 使用反射可能会导致安全漏洞,因为可以访问到私有成员。 - 在设计应用程序时应限制反射的使用范围,尤其是在涉及敏感数据的情况下。 ##### 2. **性能** - 反射通常比直接调用方法或访问字段慢得多。 - 在性能...

    goa3D.rar_3D蒙特卡洛_matlab光线追迹_光线反射_反射_蒙特卡洛反射

    2. **物体表面交互**:当光线遇到物体表面时,程序会根据表面材质的属性(如镜面反射率、漫反射率和吸收率)来决定光线的行为。镜面反射遵循反射定律,即入射角等于反射角;漫反射则依据BRDF(双向反射分布函数)...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力...然而,过度使用反射可能会降低代码可读性和性能,因此应当权衡利弊,合理运用。

    C++反射机制实现

    在讨论C++反射机制实现的过程中,我们首先需要明确反射机制的概念和分类。反射的定义源自人工智能领域,它主要涉及到两种反射结构:结构反射和计算反射。结构反射侧重于元类与类之间的关系,计算反射则关注于计算...

    计算多层媒质的反射和透射系数,多层介质膜的反射率,matlab

    在IT领域,尤其是在电磁学和信号处理中,计算多层媒质的反射和透射系数是一项重要的任务。这个过程涉及到对电磁波在不同介质界面之间的交互进行数学建模,以便理解光、无线电波或其他电磁辐射如何在不同材料之间传播...

    matlab模拟光的反射折射.pdf

    整个模拟过程不仅直观展示了光线的反射和折射现象,还演示了入射角变化对折射光和反射光路径的影响。通过这样的视觉效果,用户能够更深入地理解光的基本传播规律,加深对物理概念的理解和记忆。 MATLAB模拟光学现象...

Global site tag (gtag.js) - Google Analytics