我认识的PE文件之基地址

原创 2015年07月10日 20:02:55

什么是PE文件?摆个连接吧,人家比我专业呢

PE文件:http://baike.baidu.com/view/1087038.htm

------------------------------------------------------------------------------------------------------------------------------------------------

EXE和DLL文件之间的区别完全是语义上的,英文他们使用完全伤痛的PE文件格式,而唯一的区别是就是用一个字段标识出这个文件是EXE还是DLL,

有必要知道:

64位Windows中只是度PE文件格式做了一些简单的修改,新的格式叫做PE32+。并没有任何新的结构加进去,改变的只是简单的将32位字段扩展成64位。


PE格式定义的主要地方位于我们的头文件: winnt.h 。这个头文件中几乎能找到关于PE文件的所有定义。 

这个是一款名为:everything的搜索神器搜索出的结果:


========================================================================================

先看看PE结构图吧


PE文件的概念

PE文件使用的是一个平面地址控件,所有的代码和数据被合并在一起,组成一个很大的结构。

文件的内容被分割为不同的区块,块中包含代码和数据,各个区块按页边界来对齐,区块段没有大小限制,是一个连续的结构。

认识PE文件不是作为单一内存映射文件被装如内存是很重要的。

Windows加载器(俗语PE装载器)遍历PE文件并决定文件的哪一部分被映射,这种映射方式是将文件较高的偏移位置映射到较高的内存地址中。

当磁盘文件一旦被装入内存中,磁盘上的数据结构布局和内存中的数据结构布局是一致的。

这样,如果知道在磁盘的数据结构中寻找一些内容,那么几乎都能被装入到内存映射文件中找到相同的信息。

但是,数据之间的相对位置可能改变,其某项的偏移地址可能区别于原始的偏移位置,不管怎样,所有表现出来的信息都允许从磁盘偏移到内存偏移的转换。

------------------------------  再来看一张图  --------------------------

PE文件通过Windows加载器加载到内存后,内存中的版本称为模块。映射文件的起始地址被称为模块的句柄,可以用过句柄访问内存其他的数据结构。这个初始内存地址也称为基地址,。准确的说,对于WindowsCE,这是不成立的。一个模块的句柄在WindowsCE下并不等于安装的起始地址。

在32位系统中,我们可以用下面的这个函数:

HMOUDLE GetModule(LPCTSTR lpModuleName)
获取指向DLL 的指针,通过指针访问DLL Module的内容。

当调用该函数的时候,传递一个可执行文件或者DLL文件名字字符串,如果找到系统文件则返回该可执行文件或者DLL文件映像加载到的基地址,也可以调用函数:GetModuleHandle,传递NULL参数,则返回调用的可制行文件的基地址。

基地址的值是由PE文件本身设定的,按照默认的设置,用visual c++建立的EXE文件,基地址是00400000h,DLL文件的基地址是10000000h。但是,可以在创建应用的时候改变这个地址,方法是在连接应用时使用连接程序的 / BASE 选项,或者链接后通过REBASE 应用程序进行设置。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~续~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

版权声明:欢迎转载,转载请标明出处! ^_^

PE文件讲解

我们大家都知道,在Windows 9x、NT、2000下,所有的可执行文件都是基于Microsoft设计的一种新的文件格式Portable Executable File Format(可移植的执行体...
  • hanghangaidoudou
  • hanghangaidoudou
  • 2013年03月12日 22:51
  • 2811

PE文件结构详解(一)基本概念

PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等,事实上,一个文件是否是PE文件与其扩展名无关,PE文件可以是任何扩展名。那Wi...
  • evileagle
  • evileagle
  • 2013年09月14日 23:01
  • 47737

遍历PE文件头、扩展头、数据目录表、区段表信息

遍历PE文件头、扩展头、数据目录表、区段表信息
  • cyxvc
  • cyxvc
  • 2015年11月18日 16:15
  • 1030

读取PE文件头的简单实现

// 读取PE文件头.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace ...
  • dasgk
  • dasgk
  • 2013年07月13日 15:40
  • 1329

破解PE文件

★工具用法 1.OllyICE/OllyDB (1)标题栏中"模块-"后的程序名就是程序领空;双击命令字节码设置/取消断点,双击汇编语句编辑代码(重新载入后消失),输入‘;’可输入注释。其他不详功能点...
  • zhiyuan411
  • zhiyuan411
  • 2011年10月20日 21:58
  • 2879

web迅雷占用80端口

今天把tomcat的8080端口改成80端口,启动eclipse时报80端口被占用。于是用泛化端口查看端口进程情况,工具发现80端口是被web迅雷占用。解决办法当然是给web迅雷换个端口:打开 web...
  • yezaishu
  • yezaishu
  • 2007年07月21日 22:33
  • 1625

PE文件结构(五)基址重定位

参考 书:《加密与解密》 视频:小甲鱼 解密系列 视频 基址重定位 链接器生成一个PE文件时,它会假设程序被装入时使用的默认ImageBase基地址(VC默认exe基地址004...
  • billvsme
  • billvsme
  • 2014年10月07日 01:55
  • 3313

用Winhex软件解析PE文件

打开user32.dll3C H 处为PE头位置:0x F8 DOS头部分: 转到0x F8处PE文件标志(4H字节):0x 00 00 45 50映像文件头(14H字节):NumberOfSec...
  • KoalaZB
  • KoalaZB
  • 2016年11月12日 23:10
  • 1109

我认识的PE文件之相对虚拟地址 + 文件偏移地址

-------------------------------相对虚拟地址 -------------------------------------------------- 在可执行文件中,有很...
  • HK_5788
  • HK_5788
  • 2015年07月11日 16:34
  • 1298

PE 文件型病毒编写实验(一)

这个学期终于圆了当年来读渣电的网络安全专业的一个梦:PE病毒编写。想起了高中那会儿熬夜看看雪论坛瞎搞什么软件破解,可是搞到后面很多东西不理解做的不深入,所以就先一本心思的考上渣电,然后再来深入的学习一...
  • jmh1996
  • jmh1996
  • 2017年11月09日 21:11
  • 255
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我认识的PE文件之基地址
举报原因:
原因补充:

(最多只允许输入30个字)