静态分析:IDA逆向代码段说明 text、idata、rdata、data

一、定义:重定位就是把程序的 逻辑地址空间变换成内存中的实际 物理地址空间的过程,也就是说在装入时对 目标程序中指令和数据的修改过程。他是实现 多道程序在内存中同时运行的基础。重定位有两种,分别是 动态重定位静态重定位
二、分类
1、 静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。
2、 动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时 由 动态地址变换机构(硬件)自动进行把相对地址转换为 绝对地址动态重定位需要软件和硬件相互配合完成。
三、时机
逻辑地址空间重定位到物理地址空间的时机有三种:
1、 程序编译连接时。
2、程序装入内存时。
3、程序执行时。
四、扩展阅读:
重定位是由操作系统安排的。
装入程序前,系统会计算未使用的内存,然后将程序装入,并记下开始地址。在执行有 相对地址的指令时,会将所有的地址加个刚才记下的开始地址,就叫重定位。
重定位与EXE文件无关,它是程序装入时的一种方式。利用重定位可提高内存空间的使用率。


通常IDA对一个PE文件逆向出来的代码中,


存在四个最基本的段text、idata、rdata、data,


四个段为PE文件的结构中对应的段。


一、text段:


该段位程序代码段,在该段一开始就可以看到:


.text:00401000 ; Segment type: Pure code
.text:00401000 ; Segment permissions: Read/Execute


这里的段类型跟权限说明很清楚: 分别为代码段和可读可执行。需要注意的是,borland这里叫做code,而不是text 


二、idata、rdata、data段


从命名上可以看出,三个段全为存放特殊数据的段,但IDA根据PE文件的格式将数据段中不同类型的数据区分开来。


VC 开发工具将INC,LIB,RES放在数据段,DELPHI也类似,同时由于Delphi的窗体文件*.dfm在源代码中使用编译指令{$R *dfm}作为res资源放在数据段中,因此像delphi的反汇编工具dede就根据这些窗体资源数据,分析出相当清晰的源代码与窗体事件的对应地址, 当然实现代码还是汇编代码。


1) idata段:


该段在一开始一般有类似下面的说明:


.idata:0049B000 ; Section 2. (virtual address 0009B000)
.idata:0049B000 ; Virtual size : 0001717E ( 94590.)
.idata:0049B000 ; Section size in file : 00018000 ( 98304.)
.idata:0049B000 ; Offset to raw data for section: 0009B000
.idata:0049B000 ; Flags 40000040: Data Readable
.idata:0049B000 ; Alignment : default
.idata:0049B000 ;
.idata:0049B000 ; Imports from ADVAPI32.dll
.idata:0049B000 ;
.idata:0049B000 ; ===========================================================================
.idata:0049B000
.idata:0049B000 ; Segment type: Externs
.idata:0049B000 ; _idata


明显是一个Imports函数的代码段,这里集中所有外部函数地址,代码中会先跳到该地址后再执行,PE文件加载器在开始会获取真实的函数地址来修补idata段中的函数地址。


与之对应的exports是edata,


表面上看PE文件对该段的定位是特殊数据段。


2)rdata段


名字上看就是资源数据段,程序用到什么资源数据都在这里,资源包括你自己封包的,也包括开发工具自动封包的。


3)data段


这个段存放程序的全局数据、全局常量等。

4,reloc段是重定位段



  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值