- 浏览: 3018375 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (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 1648如果你试用(没错字,我就是说“试用”而不是“使用”)过Syst ... -
CLI中方法的局部变量声明
2009-09-15 10:36 0.locals init( int32 val ... -
要让CLR挂掉的话(第二弹)……
2009-09-04 03:26 12771(Disclaimer:如果需要转 ... -
要让CLR挂掉的话……
2009-09-02 16:53 4702(Disclaimer:如果需要转载请先与我联系。 作者:Re ... -
JIT与观察调用栈
2009-07-04 03:53 0Massimiliano Mantione在他的Chasing ... -
CLR上的接口调用也是在运行时检查的
2009-06-02 17:14 2623作者: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 1764与先前报导的一致,微软在今天放出了.NET Framework ... -
自己关于VM的帖的目录
2009-04-07 14:02 68846JavaEye的blog系统只允许把帖放到单一类别下,而不能用 ... -
LINQ与DLR的Expression tree(5):用lambda表达式表示常见控制结构
2008-10-01 00:34 12130(Disclaimer:如果需要转载请先与我联系 作者:Red ...
相关推荐
二、终端开、短路的信号反射……………………………………………4 三、短串联传输线的反射 ………………………………………………… 6 四、短并联传输线的反射 ………………………………………………8 五、容性终端...
第六节 Java反射技术 ………………………………………22 第五章 J2EE架构中各层的数据表示方法 第一节 MVC三层体系结构中的数据表示要求 ………………23 第二节 J2EE系统中各层数据表示的设计 …………………24 ...
关于反射最全的例子,包括属性、方法、数组等的例子
前言………………………………………………………… 3 第一章 电路角度的分析…………………………………‥ 4 1.1均匀传输线方程…………………………………… …‥ 4 1.2 均匀传输线方程的解…………………………...
反射反射反射反射反射反射反射反射反射反射反射反射反射反射反射反射
第21课………………*反射和倒影 第22课………………*渐变色材质 第23课………………*使用摄像机 第24课………………*使用灯光 第25课………………*使用聚光灯 第26课………………*动画基础 第27课………………...
2.3.1反射和衍射………………(20) 2.3.2吸收………………………(20) 2.3. 3混响………………………( 21) 2.3.4干涉、拍和驻波…………(21) 2.4声波在管道中的传播………(23) 2.4.1电一力一...
java反射 java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射
C#易筋经——反射、反射加壳、反射脱壳、反射注册机
java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB
OpenGL 求反射光线 反射向量 OpenGL 求反射光线 反射向量 OpenGL 求反射光线 反射向量 OpenGL 求反射光线 反射向量 OpenGL 求反射光线 反射向量 OpenGL 求反射光线 反射向量 OpenGL 求反射光线 反射向量 OpenGL 求...
使用matlab计算反射阵天线单元的相位补偿
△3程 序 集 …¨… ¨ … …… … … … I31.41 私有程序集…………………△41,4.2 共享程序集…………………△41.4.3 反射……………∵……………141.4.4 并行编程……………………△5。NET FramewOrk类 ¨… ¨¨...
unity镜面反射脚本,包里4个文件 Mirror.cs :与shader互动的脚本,使用这组材质同时要把这个脚本拖给使用的物体才能生效 Mirror-BumpSpec.shader 实时镜面反射shader 可以配合法线贴图一起用 适用于平面物体 ...
计算P波入射时的反射P波、反射SV波的反射系数。
(通过反射获取无参构造方法并使用) (通过反射获取带参构造方法并使用) (通过反射获取私有构造方法并使用) (通过反射获取成员变量并使用) (通过反射获取无参无返回值成员方法并使用) (通过反射获取带参带返回值成员...
matlab模拟光的反射折射.pdfmatlab模拟光的反射折射.pdfmatlab模拟光的反射折射.pdfmatlab模拟光的反射折射.pdfmatlab模拟光的反射折射.pdfmatlab模拟光的反射折射.pdf
Mirror-BumpSpec.shader 实时镜面反射shader 可以配合法线贴图一起用 适用于平面物体 Mirror-AlphaBumpSpec.shader 实时镜面发射、透明材质,可以同时反射和透明效果,也可以配合法线贴图,适用于平面物体 Mirror-...
反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() 2.4 总结 3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取指定字段并赋值 3.3 获取...
报警电路 目 录 1 引言………………………………………………………………………… ……………………………1 1.1设计任务与要求………………………………………………………………… ………………..1 2 基础知识……...