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

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

2012-1-6 15:10
8025
收藏
免费 6
支持
分享
最新回复 (68)
雪    币: 94
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
26
很不错,正在学习!
2012-1-29 11:50
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
感谢楼主分享
2012-1-29 12:52
0
雪    币: 748
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
很基础也很实在,适合新手。多谢lz分享学习经验。
2012-1-31 06:38
0
雪    币: 773
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
顶一个!!!
楼主的讲解很好,深入浅出,代码也简单易懂,很适合像我这样的菜鸟。
2012-1-31 09:34
0
雪    币: 166
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
楼主!在罗云彬的《Windows环境下32位汇编语言程序设计》一书中,有对PE的详细介绍!其中的例子就是你这个程序的Windows程序。
2012-1-31 10:35
0
雪    币: 357
活跃值: (27)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
31
锁匠,说实话,罗云彬那个讲PE那一章看得我好晕,后来干脆不看他的,在论坛里看帖子,在百度搜索,再回过头看,就理解了,我写这个主要是给我像我这样的菜鸟一个思路上的参考。
2012-1-31 19:27
0
雪    币: 357
活跃值: (27)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
32
锁匠,说实话,罗云彬那个讲PE那一章看得我好晕,后来干脆不看他的,在论坛里看帖子,在百度搜索,再回过头看,就理解了,我写这个主要是给我像我这样的菜鸟一个思路上的参考。
2012-1-31 19:37
0
雪    币: 1047
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
不错呀!学习下!
2012-1-31 20:01
0
雪    币: 15
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
34
记得在看雪以前的帖子里对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。”
2012-2-1 15:11
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
谢谢楼主分享、学习中……
2012-2-2 15:07
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
非常感谢楼主分享,致敬!
2012-2-2 18:35
0
雪    币: 908
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
感谢楼主分享!
2012-2-3 09:47
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
mark  一下学习
2012-2-3 10:27
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
我也想学习下。总是给自己找各种借口。弄到现在一事无成。
楼主我要向你学习。
2012-2-3 10:46
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
谢谢你的分享
2012-5-18 16:05
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
楼主代码有错误啊
编译通不过啊
2012-5-19 04:11
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
想你了谢谢学习
2012-5-19 14:50
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
好东西哇 顶了
2012-6-19 14:59
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
正在学习pe结构,看了楼主的代码,感觉恍然大悟,谢谢楼主分享
2012-6-30 14:36
0
雪    币: 1021
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zig
45
向楼主学习,偶还是太懒了
2012-7-1 09:33
0
雪    币: 136
活跃值: (107)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
46
  坐下来好好看看
2012-7-1 16:01
0
雪    币: 166
活跃值: (195)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
下来看看,楼主好人!
2012-7-1 20:44
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
这也混个精???早知道就把以前写的那几代码发出来了
2012-7-2 07:33
0
雪    币: 564
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
蒽 不错
2012-7-11 23:47
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
万分的感谢楼主
2012-7-30 06:59
0
游客
登录 | 注册 方可回帖
返回
//