我有一个aspx网页,它使用了一个装配我的(它进行了自定义验证)。 我想修改程序集的MSIL代码(只需使用ILDASM / ILASM工具),以便在文件中记录内容。
我试图在我的程序集的身份验证方法结束时添加它:
IL_0034: ldstr "C:\\path_to_my_website\\log.txt"
IL_0039: newobj instance void [mscorlib]System.IO.StreamWriter::.ctor(string)
IL_003e: stloc.1
IL_003f: ldloc.1
IL_0040: ldstr "test"
IL_0045: callvirt instance void [mscorlib]System.IO.TextWriter::Write(string)
IL_004a: nop
IL_004b: ldloc.1
IL_004c: callvirt instance void [mscorlib]System.IO.TextWriter::Close()
IL_0051: nop
ILASM没有发现任何错误,CLR在运行时不会抛出任何异常,但是文件没有被创建或修改! :(
有什么想法吗?
答案 0 :(得分:2)
结帐Mono.Cecil。它用于将程序集作为文件加载,与其内容混合,并保存结果。具体来说,this example会将调试跟踪添加到现有程序集的方法中。
答案 1 :(得分:1)
一些想法:
ret
指令(或其他无法到达的位置)之后,因此不会发生任何事情(并且IL可能不会有效的)。您是否尝试在装配体上运行peverify以确保其有效?