如何通过ildasmilasm修改assembly的IL代码.docVIP

如何通过ildasmilasm修改assembly的IL代码.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何通过ildasmilasm修改assembly的IL代码

  这段时间为跟踪一个Bug而焦头烂额,最后发现是Framework的问题,这让人多少有些绝望。所以到微软论坛提了个帖子,希望能得到些帮助。虽然论坛智能到能够判断楼主是否是MSDN订阅用户,以便尽快解决(传说MSDN订阅用户的问题能在两天内得到回复的,当时还很得意公司为我们购买的MSDN订阅账号),但得到的回复是“Could you file a bug report for this issue through Connect?”,绝望之后的又一次寒心啊。   看过payeasy的广告之后,便有了以下的这些内容,如何修改.net framework:?   这里我们以修改Guid类为例,我们将修改这个类的内部构造,以便其始终构造值为0值0000-0000-000000000000)的对象   1,知道你要修改谁(dll的名称)   这很简单, 翻翻MSDN,你应该能找到你所调用的类库是哪一个,或者使用reflector可以得到更详尽的信息。 从MSDN得知,Guid类在mscorlib.dll中   2,找到你要修改的dll,并拷贝出来,以便修改   mscorlib.dll位于GAC中,很可惜,windows只允许按照“可远观不可亵玩的方式静静欣赏(尽管心急如焚)   我们现在需要将该dll在操作系统中的实际路径找出来。   2.1 下载FileMon,其用于监视文件的被访问情况,我们可以通过他,找到文件路径。   2.2 ?写一个小程序,让该程序去访问(引用)你需要查找路径的文件,这里也就是我们的mscorlib。 ?? ? ? ?static?void?Main(string[]?args) ????????{ ????????????Guid?guid = Guid.NewGuid(); ????????????Console.WriteLine(guid); ????????????Console.Read(); ????????}   代码中的Guid以及Console等都会访问mscorlib.dll。 ?? ? ?2.3 运行FileMon,让他去监视mscorlib的访问,由于我们不知道mscorlib的具体路径(废话),但我们至少知道它在C:\WINDOWS\assembly下(至少知道在系统盘下),那么我们就将这个文件夹及其所有文件一块监视吧:?   2.4,运行我们的小程序,FileMon将监视到所有到C:\WINDOWS\assembly下的访问,并将包含mscorlib的高亮,双击列表中的条目,其将自动打开文件所在的文件夹:   OK,现在找到该dll文件了,将其拷贝出来,以供我们修改,并将其路径记录下来以备将来使用(C:\WINDOWS\assembly\GAC_32\mscorlib\__b77a5c561934e089)。另外,建议备份一下拷出来的dll。   3,利用ildasm反编译该dll,生成中间语言(IL)文件,我们将修改该IL文件   ildasm是.net自带的一个反编译工具,可以在SDK(C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\)中找到,但通过VS的控制台便可以使用了(具体使用方式,参考MSDN)   然后可以得到该程序集的IL文件:   它其实是一个文本文件,所以可以直接打开进行编辑,但建议使用Notepad++或?UltraEdit 文本编辑器,但打开后似乎有些让人有些崩溃,汪洋大海啊,如何找到我们需要修改的代码所在的位置呢   4,利用reflector查看所要寻找的类或方法的定义   打开reflector,查找所要寻找的类或方法,并查看其定义,假设我们需要的是Guid.NewGuid()方法:   切换到IL视图: ?    OK,有了该IL片段,要在mscorlib.dll.il的汪洋大海中查找该方法就很简单了(Ctrl-F)。   5,修改IL代码   在notepad++或UltraEdit中找到对应的方法。我们发现NewGuid()实际是调用其Guid(bool)方法,我们可以将其替换成默认构造函数(默认构造函数构造的guid0000-0000-000000000000)这样一来调用NewGuid()方法时则始终返回0值了,也可以在调用Guid(bool)时传入true,我们采用后者: ??.method?public?hidebysig?static?valuetype?System.Guid? ??????????NewGuid()?cil?managed ??{ ????//?代码大小???????7?(0x7) ????.maxstac

文档评论(0)

hf916589 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档