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

loading 分享 2026-11-13 下载文档

Guid.NewGuid()方法:

切换到IL视图:

OK,有了该IL片段,要在mscorlib.dll.il的汪洋大海中查找该方法就很简单了(Ctrl-F)。 5,修改IL代码

在notepad++或UltraEdit中找到对应的方法。我们发现NewGuid()实际是调用其Guid(bool)方法,我们可以将其替换成默认构造函数(默认构造函数构造的guid为00000000-0000-0000-000000000000)这样一来调用NewGuid()方法时则始终返回0值了,也可以在调用Guid(bool)时传入true,我们采用后者:

.method public hidebysig static valuetype System.Guid NewGuid() cil managed {

// 代码大小 7 (0x7) .maxstack 8 IL_0000: ldc.i4.0

IL_0001: newobj instance void System.Guid::.ctor(bool) IL_0006: ret

} // end of method Guid::NewGuid

上面代码中的IL_0000: ldc.i4.0 表示将0(false)作为4字节整数入栈,我们将其中的0改成1:

.method public hidebysig static valuetype System.Guid NewGuid() cil managed {

// 代码大小 7 (0x7) .maxstack 8

IL_0000: ldc.i4.1

IL_0001: newobj instance void System.Guid::.ctor(bool) IL_0006: ret

} // end of method Guid::NewGuid

(注意,这里的操作很简单,所以很单纯地修改了,若对于比较复杂的操作请先学习IL相关知识)

然后保存你的修改。

6,编译IL代码,生成新的DLL

利用ms提供的ilasm可以将IL文件编译成dll:

(编译前别忘记关闭文本编辑器,比如ultraEdit会独占文件而导致无法访问) 7,将修改后的DLL放回到GAC

你可能会想到按照MSDN上提到的方法就如同安装自己普通的程序集一样将其安装到GAC,大概能猜想到这是不可行的,否则”不安全了“。 或者,我们刚才不是记录了mscorlib的路径的吗,直接复制粘贴进去覆盖不就行了,也许可以,也许不可以,只所以说不可以,原因有可能有二,一是根本不让访问页不让覆盖,二是程序.net程序运行时会检查程序集版本。那么就试试看吧:

直接访问指定的路径看来是不行的了,正如下图所示:

不过没关系,我们可以通过第三方工具访问到该目录,可以通过刚才的FileMon,双击条目可以打开相应的文件目录,还有一种更常用的方便的方式是用TotalCommander, 可以方便的访问windows的各种隐藏路径。

将文件拖放到对应目录便可以覆盖了。 8, 删除程序集的本机映像(native image)

回到刚才用FileMon监视mscorlib访问时,大家可能会发现我们的小程序直接访问的并非mscorlib.dll, 而是一个名为mscorlib.ni.dll的文件(在

C:\\WINDOWS\\assembly\\NativeImages_v2.0.50727_32\\mscorlib\\9adb89fa22f


如何通过ildasmilasm修改assembly的IL代码.doc 将本文的Word文档下载到电脑
搜索更多关于: 如何通过ildasmilasm修改assembly的IL代码 的文档
相关推荐
相关阅读