【发布时间】:2013-08-13 12:21:03
【问题描述】:
是否可以编写将任何类型(值和引用)的实例转换为 System.String 的通用 CIL 指令? 特别是,我对将这些指令注入方法的 Mono.Cecil 代码感兴趣。
分析一个通用方法我想出了这些 Mono.Cecil 调用: (它应该将第i个方法参数转换为字符串)
System.Reflection.MethodInfo to_string_method_info = typeof( System.Object ).GetMethod( "ToString" );
Mono.Cecil.MethodReference to_string_reference = injectible_assembly.MainModule.Import( to_string_method_info );
Mono.Cecil.TypeReference argument_type = method_definition.Parameters[ i ].ParameterType;
method_definition.Body.Instructions.Add( processor.Create( Mono.Cecil.Cil.OpCodes.Constrained, argument_type ) );
method_definition.Body.Instructions.Add( processor.Create( Mono.Cecil.Cil.OpCodes.Callvirt, to_string_reference ) );
但是,在调试时,我从注入的方法中得到一个异常,即“JIT 编译器遇到内部限制”。
【问题讨论】:
-
在这种情况下,PEVerify 非常有用,因为它可以告诉您代码有哪些具体错误。
标签: .net cil il mono.cecil