DLL 是一个包含可由多个程序同时使用的代码和数据的库。 例如,在 Windows 操做系统中,Comdlg32 DLL 执行与对话框有关的常见函数。所以,每一个程序均可以使用该Dll中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。
经过使用 DLL,程序能够实现模块化,由相对独立的组件组成。
通俗来说,一个项目由多个模块组成。能够在运行时将各个模块加载到主程序中(若是安装了相应模块)。由于模块是彼此独立的,因此程序的加载速度更快,并且模块只在相应的功能被请求时才加载,而更新的话,就只需替换掉当前的DLL就好了.
在以.net的开发为例,在当前编译环境下,只须要对当前想要制做成dll的项目右键从新生成下,而后在该项目对应的文件夹下面找到debug文件夹,里面就会有一个与当前项目名称同样的后缀为dll的文件。
Dll怎么用?
首先先在项目中引用该dll,而后在用到dll的地方using一下,便可调用其中的类与方法。由于是dll,因此你F12进去通常都是这样的:
能够看到该类既不是抽象类也没有继承任何接口和类,可是方法体却没有实现,而最上面 有写xx程序集之类。
你能够经过vs的对象浏览器看看里面都是啥结构,可是你是看不到方法里面的代码的,也没法调试。
你想了解这些dll中的代码实现,可是你看不到。可是,你想到的,前人早想到了。那么咱们换个说法,之因此你看不到被编译好的dll中的代码,那是由于vs编译器自己不带这个功能。
那么,咱们找一款工具来辅助咱们来看看这个dll中的代码。
这个实现过程,叫 反编译。
那么,天然,咱们要用的就是 反编译软件。
当下知名的反编译软件有 Il spy,.NET Reflector
这两个软件我比较喜欢用IL SPY,由于网上有中文版的。
放图:
若是你想查看特定的dll的话,能够点击文件选项卡,而后点击打开,而后找到dll路径就能够了(.NET Reflector也同样)。
工具很方便,有不少功能,具体教程,你们自行百度。
若是光是看看源码可不够,还想在项目中实际调试怎么办?那么我告诉你,只有一个工具能够知足。
那就是 .NET Reflector的vs插件。
.NET Reflector是个反编译的软件,但若是你想即时调试dll的代码的话,还需再用其vs的插件。
.NET Reflector和.NET Reflector的vs插件是两个概念,不懂的话请自行百度 什么是vs插件。
接下来我教你们怎样安装并使用这个插件。
首先,点击工具,点击扩展和更新
而后点击 联机,并在最右侧的搜索框中 搜索 Reflector
最后,选中第一个,点击安装便可。
目前最新版本9.2
安装完成,vs中就会多了个选项卡。
给你们介绍下,.NET Reflector Object Browser是 .net反射对象浏览器,这个是用来控制.net反射对象浏览器 显示及隐藏的。
.net反射对象浏览器长这样:
这个.net反射对象浏览器 你能够浏览当前.net框架默认的程序集, 你能够一层一层点开,最终点到你想要看的类里面。
可是,这样作只能看到源码,并不能调试。html
还须要在该dll右键,点击选中Enable Debugging,意思就是将该dll启动到可调试的状态。当你点击该选项的时候,这个插件会把这个dll的代码给转成本地的文件,.NET Reflector首先会尝试定位本机上的PDB文件,若是没有则会本身建立PDB文件,这才能进行调试。算法
点击后会出现一个界面,这个界面就是当前状态改变的过程。浏览器
成功后是这样的:框架
直接点Done关闭掉就能够。模块化
接下来咱们就能够打断点调试了!函数
选中断点,而后按照你喜欢的方式去调试!F5或者附加进程均可以。工具
有的时候,你即使打了断点,可发现怎么也调试不进去。优化
缘由有不少可能,包括条件编译、编译器优化结果、目标体系结构等不一样,总之,你不能调试。网站
接下来我要放一张.Net Reflector反编译的代码,和一张IL SPY反编译的代码。加密
能够发现,一样的dll,两个软件有着不一样的反编译结果。
因此,要对编译与反编译有个最基础的概念,并非很神奇的就能把真正的源码给你给反编译出来,而是对编译的算法进行推测,而后逆推的结果再进行软件的一些处理来达到100%接近源码的这样一个程度。
有反编译,那么就有防破解加密。
有些代码,通过加壳混淆,反编译出来的东西很尴尬。
那么,关于对dll加密这方面的东西,你们若是有兴趣,能够自行百度了解下。
而关于反编译,除了il spy,.Net Reflector 还有JetBrains dotPeek、Telerik JustDecompile等等,区别就是算法不一样反编译出来的代码不一样、收费、功能等
我刚演示的.Net Reflector,还有不少功能,这里只作最简单的入门教程,有兴趣请自行了解, 这是人家的网站,http://www.red-gate.com/products/dotnet-development/reflector/
做者:小曾
出处:http://www.cnblogs.com/1996V/p/7396913.html 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文连接。如您有任何疑问或者受权方面的协商,请给我留言
.Net交流群, QQ群:166843154 欲望与挣扎