注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

勇敢的劳尤条

 
 
 

日志

 
 

.lib和.dll文件、.a和.so文件 以及 反汇编 科普  

2013-12-25 15:48:26|  分类: 软件安全以及传输 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

.lib和.dll是windows下的库文件,而.a和.so是linux下的库文件。下面先简单介绍。

lib文件和dll文件

    .lib是一种文件名后缀,该文件为Windows操作系统中的库文件,相当于Linux中的.a或.o、.so文件。lib有静态lib和动态lib之分。静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序。动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,运行时候需要相应的dll文件支持。
     DLL是Dynamic Link Library的缩写,意为动态链接库。与lib主要区别:
   (1)lib是编译时需要的,dll是运行时需要的。

如果要完成源代码的编译,有lib就够了。

如果也使动态连接的程序运行起来,有dll就够了。

在开发和调试阶段,当然最好都有。

(2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。

(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL文件必须随应用程序一起发行,否则应用程序将会产生错误。

linux下的.a和.so文件与上面类似。

 

反汇编

首先讲讲编译系统的过程,大概有四个步骤。

 .lib和.dll文件、.a和.so文件 以及 反汇编 科普 - yuanshuilee - 勇敢的劳尤条

 预处理器:根据程序中以#开头的命令,对源代码进行修改,得到另一个C程序,以.i为扩展名。

编译器:ccl将hello.i翻译成文本文件hello.s,这是一个汇编指令程序。

汇编器:as将hello.s翻译成机器码,并将这些指令打包,打包成可重定位目标程序,也就是obj文件。

链接器:负责合并obj文件,得到可执行目标文件hello。比如hello用到了printf函数,那么链接器就将printf.o和hello.o合并最后的可执行程序中。

 

知道了上面的过程之后,我们要知道一个lib文件是obj文件的集合。当然,其中还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件。也就是所有.lib和.dll文件、.a和.so文件都是二进制文件。如果想通过这些二进制文件(比如obj文件、exe文件)获取源代码,这是很困难的,没有直接方法。间接的方法就是通过反汇编。

反汇编:把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思,常用于软件破解(例如找到它是如何注册的,从而解出它的注册码或者编写注册机)、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、OS的内核原理及理解高级语言代码都有相当大的帮助,在此过程中我们可以领悟到软件作者的编程思想。总之一句话:软件一切神秘的运行机制全在反汇编代码里面。

反汇编即是指将这些执行文件反编译还原成汇编语言或其他高级语言。但通常反编译出来的程序与原程序会存在些许不同,虽然执行效果相同,但程序代码会发生很大的变化,要读懂反汇编需要有扎实的高级语言编写功底和汇编功底。

windows下一些常用的反汇编工具:W32DASM HIEW和OD。

推荐使用OD(OllyDebug),本人使用过,相对容易入手,也有简易教程!看雪学院上面有专业人士,可以去学习。


推荐阅读:
  评论这张
 
阅读(2700)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017