首页
社区
课程
招聘
[原创]我自己的PE文件RVA-VA-Offset心得……
发表于: 2008-3-22 22:06 17033

[原创]我自己的PE文件RVA-VA-Offset心得……

2008-3-22 22:06
17033

VA    |   Memory    |           Offset  | Disk Files  |

         |             |                   |             |
00400000 +-------------+<---------00000000 +-------------+
         | DOS Header  |                   | DOS Header  |
         +-------------+                   +-------------+
         |  DOS stub   |                   |  DOS stub   |
         +-------------+                   +-------------+
         |  PE header  |                   |  PE header  |
         +-------------+                   +-------------+
         |Section Table|                   |Section Table|
         +-------------+  /-------00000600 +-------------+
         |000 Full 0000|  |                |   .text     |
         |000 Zero 0000|  |  /----0000D400 +-------------+
00401000 +-------------+<-/  |             |   .data  -A-| 0000D450
         |   .text     |     |  /-00010000 +-------------+
         +-------------+     |  |          |   .rsrc     |
         |000 Full 0000|     |  |          +-------------+
         |000 Zero 0000|     |  |
0040E000 +-------------+<----/  |
0040E050 |-A .data     |        |
         +-------------+        |
         |000 Full 0000|        |
         |000 Zero 0000|        |
00413000 +-------------+<-------/
         |   .rsrc     |
         +-------------+                 

#   Name     Virt Size   RVA       Phys Size  Phys Off   Flags  
--  -------- ---------  ---------  ---------  ---------  ---------
01  .text     0000CCC0   00001000   0000CE00   00000600   60000020 []
02  .data     00004628   0000E000   00002C00   0000D400   C0000040 []
03  .rsrc     000003C8   00013000   00000400   00010000   40000040 []

对于变量A来说:

File_Offset   就是磁盘文件中A的位置。
              File_Offset = VA - ImageBase - VRk = RVA - VRk

ImageBase     就是文件加载到内存的起始位置。
              ImageBase = VA - RVA
              多为:0x00400000,0x01000000

EntryPoint    就是.text的VA地址。

VA    就是内存映像中A的位置,即A的地址。
      VA = ImageBase + FileOffset + VRk = ImageBase + RVA

RVA   就是内存映像中A的位置与文件映射基址的差。
      RVA = VA - ImageBase = File_Offset + VRk

  PS: VA  就好比是“某一时刻”,例如:九点到校上课。
      RVA 就好比是“某一时间段”,例如:七点起床后,过两个小时到校上课。
      VA  是绝对的,一旦确定便不可更改。九点到校迟一秒钟也不行。
      RVA 是系相对的,虽然说过两个小时到校上课,但是如果我七点起床,便是九点上课。
         而如果我八点起床,便是十点上课了。

VRk  就是文件映射到内存后,每一节之间填充的00的个数。
         由于要进行对齐,所以文件加载到内存后每一节之间要填充大量00
         因此文件中A的位置会变化。由于各个文件头与各个节大小不变,所以:
         VRk = RVA - File_Offset = <填充的00的个数>

最终,我们计算:

由FileOffset到RVA/VA:

     ImageBase    = 00400000
     A FileOffset = 00000450

     RVA = FileOffset(A) + ( RVA(.data) - FileOffset(.data) )
         = FileOffset(A) +  VRk
         = 0000D450 + ( 0000E000 - 0000D400 )
         = 0000D450 + C00
         = 0000E050

     VA  = RVA + ImageBase = 0000E050 + 00400000 = 0040E050

由RVA/VA到FileOffset:

     RVA = 0000E050   /   VA = 0040E050   /   ImageBase = 00400000

     FileOffset = RVA(A) - RVk
                = RVA(A) - ( RVA(.data) - FileOffset(.data) )
                = 0000E050 - ( 0000E000 - 0000D400 )
                = 0000E050 - C00
                = 0000D450


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
思路很清晰!丁^
2008-4-2 11:24
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
例子举的很贴切也很正确 。

思路与peid的工作原理很像。

顶一下。
2008-4-2 12:47
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
A 要设置什么值才是importrec 的RAV
2010-4-13 13:49
0
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
好文章,顶上去.思路清晰,细节流畅,让人一看就明白.
2011-1-30 17:58
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好文章,顶上去.思路清晰,细节流畅,让人一看就明白.能不能提供一个pdf版的,便于查阅.
2011-1-31 07:44
0
雪    币: 286
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
写得很好!

          "A FileOffset = 00000450"应为A FileOffset = 0000D450
2011-2-11 09:52
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
8
好文章,学习了,必须的顶
2011-7-17 10:02
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个必须要顶
顺便说下 楼主要是不去教书 简直浪费
2011-12-5 13:32
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark..!~
2011-12-13 17:49
0
雪    币: 243
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
迷惑了很久《逆向工程核心原理》书中的表述,此文真正整理和验证了迷惑。
2019-10-7 16:19
0
雪    币: 1041
活跃值: (733)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
唉,还是看不到能不能来点实例
2020-12-22 08:16
0
游客
登录 | 注册 方可回帖
返回
//