- 浏览: 3052805 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
呃,CLR的反射也可以注入字符串……看来这里也有可玩的突破口 OTL
以下代码:
在生成的基类名字里放入[]*&+,\的任意字符,都会引发在创建派生类是出错:
OTL……那些字符是CLI的类型的一些特殊字符,例如+是nested class的完全限定名里分隔它自身的类名与enclosing class的类名的字符,[]是指定泛型参数用的,等等。反射的时候可能也没办法检查到底哪些是正常的特殊字符,哪些是人为注入进去的。既然如此,Emit的时候就不该允许这些特殊字符进去的。注入啊注入……
P.S. 测试环境是.NET Framework 3.5 SP1
以下代码:
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
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
发表评论
-
C#的任意类型转换
2010-09-22 19:37 0用之前的恶搞办法制造一个Func<T, U>委托来 ... -
timer与GC
2010-02-25 21:54 0CLR via C# 3rd的第21章讲解了GC相关的内容。其 ... -
CLR中值类型的实现,几个小测试
2009-12-07 17:35 0http://blogs.msdn.com/clrcodege ... -
Array.Copy()
2009-12-02 23:03 0using System; namespace Cons ... -
关于GC.KeepAlive()
2009-12-01 23:16 0调用GC.KeepAlive()确实跟调用自己写的NoInli ... -
native code一样的方法就是一样的么?
2009-10-10 11:42 0GC map EH SOS -
SRE里的Builder系列到Info系列的转换
2009-09-23 03:01 1706如果你试用(没错字,我就是说“试用”而不是“使用”)过Syst ... -
CLI中方法的局部变量声明
2009-09-15 10:36 0.locals init( int32 val ... -
要让CLR挂掉的话(第二弹)……
2009-09-04 03:26 12879(Disclaimer:如果需要转 ... -
要让CLR挂掉的话……
2009-09-02 16:53 4785(Disclaimer:如果需要转载请先与我联系。 作者:Re ... -
JIT与观察调用栈
2009-07-04 03:53 0Massimiliano Mantione在他的Chasing ... -
CLR上的接口调用也是在运行时检查的
2009-06-02 17:14 2704作者:RednaxelaFX 主页:http://rednax ... -
值类型上的实例方法
2009-05-29 22:15 0.NET里任何实例方法都有一个隐含的this作为第一个参数,无 ... -
call与callvirt、虚方法与非虚方法的组合
2009-05-29 21:31 0Chris Brumme: Virtual and non-v ... -
CLR 2.0的callsite caching
2009-05-29 01:52 0根据http://blogs.msdn.com/vancem/ ... -
.NET中各种黑历史般的名字
2009-05-24 04:29 0dotnetfx: .NET Frameworks COM+ ... -
.NET 4的新动向
2009-05-23 19:58 0http://weblog.ikvm.net/PermaLin ... -
.NET Framework 4 Beta 1与对应的IronPython 2.6的下载
2009-05-21 02:43 1818与先前报导的一致,微软在今天放出了.NET Framework ... -
自己关于VM的帖的目录
2009-04-07 14:02 69647JavaEye的blog系统只允许把帖放到单一类别下,而不能用 ... -
LINQ与DLR的Expression tree(5):用lambda表达式表示常见控制结构
2008-10-01 00:34 12231(Disclaimer:如果需要转载请先与我联系 作者:Red ...
相关推荐
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法的信息。通过反射,开发者可以动态地创建对象、调用方法、访问和修改字段,甚至执行私有成员的操作,极...
19 4.1 反射产生的原因与影响…………………………………………………19 4.2 如何减少反射……………………………………………………………21第五章 串扰:高速PCB设计中的挑战…………………………………………23 ...
第21课………………*反射和倒影 第22课………………*渐变色材质 第23课………………*使用摄像机 第24课………………*使用灯光 第25课………………*使用聚光灯 第26课………………*动画基础 第27课………………...
在MATLAB中,我们通常会按照以下步骤来计算反射阵单元的相位: 1. **定义天线参数**:首先,我们需要定义反射阵的参数,包括天线数量、元素间距、频率等。例如,我们可以创建一个向量来存储每个单元的相位偏移。 2...
在文档中,首先会介绍双面反射挂片式天花的设计理念,包括如何利用反射原理来提升空间的光环境,以及如何结合室内设计的整体风格进行创新。设计者可能会讨论不同的反射材质选择,如镜面不锈钢、镀膜玻璃等,每种材料...
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表达式可以提供一种更简洁、更高效的代码执行方式,尤其是在需要...
在Unity中,实现镜面反射的效果是通过Shader来完成的,Shader是一种编程语言,它可以控制场景中的物体如何在屏幕上显示。在本主题中,我们将深入探讨Unity3D中的镜面反射Shader及其实现。 镜面反射在图形学中是一个...
这篇博客“反序列化代码……备忘一下……”可能是作者分享关于反序列化技术的一些关键点和实践经验。虽然具体的内容没有给出,但从标题和标签我们可以推测出一些可能涉及的知识点。 1. **反序列化**:反序列化是将...
全局光源如Directional Light(平行光)会影响物体的阴影和反射,而环境贴图(通常为HDR格式)提供了场景的全局反射信息。 为了将镜面反射应用到游戏对象,你需要将带有自定义Shader的材质赋给物体。在描述中提到的...
3. **光栅长度(L)**:决定了反射谱的形状和强度,更长的光栅通常会给出更宽的反射带。 4. **入射光谱**:需要定义入射光的波长范围和分布,这将影响反射谱的观察结果。 MATLAB程序通常包括以下步骤: - 定义光栅...
C#易筋经——反射、反射加壳、反射脱壳、反射注册机
在测量过程中,得到的反射率数据还需用相关的物理模型进行分析。例如,使用菲涅耳方程(Fresnel equations)来计算理想条件下的理论反射率,然后与实验数据对比,找出差异原因。这些原因可能包括表面粗糙度、膜层间...
- 使用反射可能会导致安全漏洞,因为可以访问到私有成员。 - 在设计应用程序时应限制反射的使用范围,尤其是在涉及敏感数据的情况下。 ##### 2. **性能** - 反射通常比直接调用方法或访问字段慢得多。 - 在性能...
2. **物体表面交互**:当光线遇到物体表面时,程序会根据表面材质的属性(如镜面反射率、漫反射率和吸收率)来决定光线的行为。镜面反射遵循反射定律,即入射角等于反射角;漫反射则依据BRDF(双向反射分布函数)...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力...然而,过度使用反射可能会降低代码可读性和性能,因此应当权衡利弊,合理运用。
在讨论C++反射机制实现的过程中,我们首先需要明确反射机制的概念和分类。反射的定义源自人工智能领域,它主要涉及到两种反射结构:结构反射和计算反射。结构反射侧重于元类与类之间的关系,计算反射则关注于计算...
在IT领域,尤其是在电磁学和信号处理中,计算多层媒质的反射和透射系数是一项重要的任务。这个过程涉及到对电磁波在不同介质界面之间的交互进行数学建模,以便理解光、无线电波或其他电磁辐射如何在不同材料之间传播...
整个模拟过程不仅直观展示了光线的反射和折射现象,还演示了入射角变化对折射光和反射光路径的影响。通过这样的视觉效果,用户能够更深入地理解光的基本传播规律,加深对物理概念的理解和记忆。 MATLAB模拟光学现象...