请教mono.cecil 对系统dll做代码插入后无效的问题

问题描述

大家好:最近在使用mono.cecil做代码注入,在System.Data.dll中的SqlConnection类的Open方法最前面插入Console,WriteLine("runOpen");但是启动测试代码去运行Open方法是并没有在控制台显示“runOpen”,又用mono.cecil对Open方法做改动,都没效果。AssemblyDefinitionasm=AssemblyDefinition.ReadAssembly("F:\System.Data.dll");foreach(TypeDefinitiontypeinasm.MainModule.Types){//if(type.Name.Equals("MySqlConnection")){foreach(MethodDefinitionmethodintype.Methods){//if(method.Name=="Open"){varilProcessor=method.Body.GetILProcessor();varfirstInstruction=ilProcessor.Body.Instructions[0];InstructioninsStr=ilProcessor.Create(OpCodes.Ldstr,"runOpen");ilProcessor.InsertBefore(firstInstruction,insStr);MethodReferencerefernce=asm.MainModule.ImportReference(typeof(Console).GetMethod("WriteLine",newType[]{typeof(string)}));InstructioninsCall=ilProcessor.Create(OpCodes.Call,refernce);ilProcessor.InsertAfter(insStr,insCall);}}//endforMethodDefinition}}//endforTypeDefinitionasm.Write("F:\System.Data.dll");用ILSpy查看System.Data.dll,确实有插入的代码,再调试时,运行到Console,WriteLine("runOpen");却并没效果。希望能指点一二。谢谢

解决方案

时间: 2024-12-02 06:13:40

请教mono.cecil 对系统dll做代码插入后无效的问题的相关文章

教你怎么用Mono Cecil - 动态注入 (注意代码的注释)

原文 教你怎么用Mono Cecil - 动态注入 (注意代码的注释) 使用 Mono Cecil 进行反编译:using Mono.Cecil; using Mono.Cecil.Cil; //...... AssemblyDefinition asm = AssemblyFactory.GetAssembly("MyLibrary.dll"); foreach (TypeDefinition type in asm.MainModule.Types) { if (type.Name

Win7系统桌面右下方时间修改后无效怎么办

  电脑上显示的时间,需要我们在右下角来设置.有时我们发现,想要更改时间,却更改不了,这到底是怎么回事呢?在ghost win7系统中,如果要修改桌面右下角的时间,挺长的方法就是直接点击修改,不过如果发现点击没反应修改不了,这那么该怎么办呢?下面介绍几种方法. 1.修改后一段时间却自动复原,这样的问题一般都是因为主板电池没电了造成的,需要先更换电池,然后再修改时间; 2.如果win7纯净版系统中修改不了,那么可以试着开机的时候点击DEL键进入到BIOS设置,然后对时间进行修改并保存; 3.系统中

请教一个排课系统的问题,代码已有。

问题描述 请教一个排课系统,有关数据库和设计已完成,但是还有不足,请高手指点,有意请加QQ361477664.//循环该班级教师信息:foreach(DataRowdtrow1inds1.Tables["jsinfo"].Rows){floatjc=Convert.ToSingle(dtrow1["jcCount"]);floatjc1=jc/6;intjc2=Convert.ToInt32(jc1);joint=joint+1;if(jc1<jc2)//如果

利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)

原文:利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)      Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还可以修改已有的程序集,并且它支持多个运行时框架上例如:.net2.0/3.5/4.0,以及silverlight程序 官方地址:http://www.mono-project.com/Cecil      首先,我先假想有一个这样的商业组件,该组件满足了以下条件: 1. 该程序集的代码被混

编译时MSIL注入--实践Mono Cecil(1)

   紧接上两篇浅谈.NET编译时注入(C#-->IL)和浅谈VS编译自定义编译任务-MSBuild Task(csproject),在第一篇中我们简单研究了c#语法糖和PostSharp的MSIl注入,紧接第二篇中我们介绍了自定义MSBuild编译任务(记得有位老兄发链接用 MSBuild自动发布Silverlight xap ,我想说的我做的是自定义编译任务,不是什么发布,MSBuild本就是一个发布工具).之所以在此前介绍编译Task是因为我讲介绍的就是利用MSBuild和MSILInje

Mono.Cecil - 0.6

原文:Mono.Cecil - 0.6项目地址:Mono.Cecil 项目描述:In simple English, with Cecil, you can load existing managed assemblies, browse all the contained types, modify them on the fly and save back to the disk the modified assembly. 类似项目:Microsoft CCICommon Compiler

Windows7系统蓝屏代码和含义

在使用Windows7过程中,有时会遇到蓝屏,蓝屏代码让人看了一头雾水,下面为大家整理了一些Windows7系统蓝屏代码和含义,希望对大家有所帮助. 00x0000作业完成. 10x0001不正确的函数. 20x0002系统找不到指定的档案. 30x0003系统找不到指定的路径. 40x0004系统无法开启档案. 50x0005拒绝存取. 60x0006无效的代码. 70x0007储存体控制区块已毁. 80x0008储存体空间不足,无法处理这个指令. 90x0009储存体控制区块位址无效. 10

DNF发现系统DLL有改动怎么解决

  先来了解下dll文件的主要功能.DLL文件(Dynamic Linkable Library 即动态链接库文件),是一种不能单独运行的文件,它允许程序共享执行特殊任务所必需的代码和其他资源.所以当你出现系统文件dll有改动的话,是会导致dnf打不开,运行错误的情况. 解决方法:首先是提示你重启即可解决故障,用户先尝试将你的计算机重启下查看能不能修复故障.之后在如果无法修复的话,查看是提示哪个dll文件被改动或者丢失,可以直接在网上下载该dll文件,在将文件拷贝到C:WINDOWSsystem

如何一键搞定系统DLL错误修复?

  有时安装了个别软件后,会导致DLL错乱,另外无所不在的病毒也有可能破坏DLL,从而导致出现出现一些软件无法安装,或在运行一些软件时,提示DLL缺少错误等问题!让人不胜其烦,手动修复起来麻烦,而且菜鸟朋友无从下手. 何不使用"系统DLL错误修复小工具,一键搞定DLL错误扫描修复呢?该工具在每次扫修复DLL错误前,都会为我们做一个系统动态链接库文件信息备份,如果修复后,发现有些问题时,可点击左侧的"救援",切换到备份列表,选择相应的备份后,点击"恢复"按钮