首页
社区
课程
招聘
[旧帖] [分享]pe结构学习心得系列 0.00雪花
2012-1-6 15:10 7766

[旧帖] [分享]pe结构学习心得系列 0.00雪花

2012-1-6 15:10
7766
收藏
点赞5
打赏
分享
最新回复 (68)
雪    币: 94
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
Tilics 1 2012-1-29 11:50
26
0
很不错,正在学习!
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
antigame 2012-1-29 12:52
27
0
感谢楼主分享
雪    币: 748
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
RayZh 2012-1-31 06:38
28
0
很基础也很实在,适合新手。多谢lz分享学习经验。
雪    币: 773
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hothot 2012-1-31 09:34
29
0
顶一个!!!
楼主的讲解很好,深入浅出,代码也简单易懂,很适合像我这样的菜鸟。
雪    币: 166
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
地精锁匠 2012-1-31 10:35
30
0
楼主!在罗云彬的《Windows环境下32位汇编语言程序设计》一书中,有对PE的详细介绍!其中的例子就是你这个程序的Windows程序。
雪    币: 357
活跃值: (27)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
陈卫华 1 2012-1-31 19:27
31
0
锁匠,说实话,罗云彬那个讲PE那一章看得我好晕,后来干脆不看他的,在论坛里看帖子,在百度搜索,再回过头看,就理解了,我写这个主要是给我像我这样的菜鸟一个思路上的参考。
雪    币: 357
活跃值: (27)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
陈卫华 1 2012-1-31 19:37
32
0
锁匠,说实话,罗云彬那个讲PE那一章看得我好晕,后来干脆不看他的,在论坛里看帖子,在百度搜索,再回过头看,就理解了,我写这个主要是给我像我这样的菜鸟一个思路上的参考。
雪    币: 1047
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
我来也龙 2012-1-31 20:01
33
0
不错呀!学习下!
雪    币: 15
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wybx 2012-2-1 15:11
34
0
记得在看雪以前的帖子里对PE的解释很好的,下面引用一段原帖的话:

Windows和现代操作系统类似,使用可重定位的文件格式,使程序在运行时可以动态加载共享函数库。Linux里的共享函数库是以.so文件的形式出现的,在Windows里是DLL。和ELF文件格式的.so类似,DLL是PE-COFF文件格式(也称为PE-portable executable)中的一种。PE-COFF来自Unix COFF格式,是一种可移植的文件格式,可以加载到所有的32位Windows平台上。
PE文件在文件开始部分包括导入表和输出表,导入表指示PE文件需要用到哪些(DLL)文件,以及这些文件中的哪些函数。输出表则指示此DLL可以提供哪些函数,也指明这些函数在DLL文件中的地址。DLL载入内存后,程序可以根据这些地址找到需要的函数。导入表列出PE文件要用到的、但在DLL里的函数,也会列出这些函数所在的DLL的文件名。

学习PE-COFF,首先要理解Relative Virtual Address(RVA)。RVA用于减少PE加载器的工作量,通过使用RVA,函数可以被重定位在虚拟地址空间的任何地方;如果不使用RVA,PE加载器需要确认每个可重定位的条目,从而浪费大量的系统资源。在学习Win32的过程中,你可能注意到Microsoft喜欢使用简称(RVA,AV[Access Violation,访问违例],AD[Active Directory,活动目录]),而不是像Unix那样使用术语的省略形式(tmp,etc,vi,segfault)。令人头痛的是,Microsoft每次发布新文档时,总会引入成百上千个术语和相关的简称。

RVA只是“各个DLL载入内存空间时,系统会为其分配一个基址,根据基址加上RVA的结果就可以找到需要的数据(函数)”的一种描述。以msvcrt.dll的malloc()函数为例,msvcrt.dll的文件头中包括了msvcrt.dll可以提供哪些函数的输出表,这个输出表中包含函数“malloc”和它的RVA(例如,2000);系统把msvcrt.dll载入内存时,会为其指定基址,这里假定是0x80000000,这样一来,你就可以通过0x80002000(基址加上RVA)找到malloc函数。在默认情况下,Windows NT加载.exe的基址是0x40000000,当然,这根据语言包或编译器的选项不同会有所改变,但一般都是0x40000000。”
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
开心南瓜 2012-2-2 15:07
35
0
谢谢楼主分享、学习中……
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fvck 2012-2-2 18:35
36
0
非常感谢楼主分享,致敬!
雪    币: 908
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LanY超 2012-2-3 09:47
37
0
感谢楼主分享!
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
heiketian 2012-2-3 10:27
38
0
mark  一下学习
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
路拉路拉 2012-2-3 10:46
39
0
我也想学习下。总是给自己找各种借口。弄到现在一事无成。
楼主我要向你学习。
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mingpen 2012-5-18 16:05
40
0
谢谢你的分享
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zslhello 2012-5-19 04:11
41
0
楼主代码有错误啊
编译通不过啊
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风洞圣士 2012-5-19 14:50
42
0
想你了谢谢学习
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ThreadIce 2012-6-19 14:59
43
0
好东西哇 顶了
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
snowLo 2012-6-30 14:36
44
0
正在学习pe结构,看了楼主的代码,感觉恍然大悟,谢谢楼主分享
雪    币: 1021
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zig 2012-7-1 09:33
45
0
向楼主学习,偶还是太懒了
雪    币: 136
活跃值: (107)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
xiaoweime 1 2012-7-1 16:01
46
0
  坐下来好好看看
雪    币: 176
活跃值: (145)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
三草儿 2012-7-1 20:44
47
0
下来看看,楼主好人!
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xixifusi 2012-7-2 07:33
48
0
这也混个精???早知道就把以前写的那几代码发出来了
雪    币: 564
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Hoiker 2012-7-11 23:47
49
0
蒽 不错
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tutula 2012-7-30 06:59
50
0
万分的感谢楼主
游客
登录 | 注册 方可回帖
返回