PE文件

原创 2015年11月19日 15:45:33

0x00 PE文件格式

  • PE文件格式是可执行文件的数据格式(.dll、.exe)
    这里写图片描述

    1) .text:由编译器产生,存放二进制的机器指令,是反汇编和调试的主要对象
    2) .data:初始化的数据块,如宏定义,全局变量等
    3) .idata:使用DLL等外来函数与文件的信息,即输入表
    4) .rsrc:存放程序的全部资源,如图标、菜单、位图等

0x01 虚拟内存及地址转换

  • 物理内存:进入windows内核级别ring0才能看到
    虚拟内存:调试器中看到的内存地址;区别于OS中的虚拟内存

  • 1) 文件偏移地址(File Offest):数据在PE文件中的地址,即文件在磁盘上存放时相对于文件开头的偏移,在静态反汇编工具看到
    2) 装载基址(Image Base): PE文件被载入内存后的首地址,exe文件默认0x00400000,dll文件默认0x10000000。可通过修改编译选项更改。
    3) 虚拟地址VA(Virtual Address): PE文件中的数据映射到内存后的地址
    4) 相对虚拟地址RVA(Relative VA):RVA=VA-Image Base,即虚拟地址相对于映射基址的偏移

  • 相对区段偏移(Relative Section Offset):数据相对所在区段首地址的偏移。
    Relative Section Offset = RVA – VOffset = File Offset - ROffset

  • 文件偏移(File Offset) = ROffset + Relative Section Offset
    = ROffset + RVA – VOffset
    = ROffset + VA – Image Base - VOffset

  • PE文件存储在磁盘上时,以0x200字节为基本单位来组织数据。PE文件被映射到内存中时,以0x1000字节为基本单位来组织数据。

  • eg:若某数据的文件偏移地址(FileOffset)是0x420,求VA.

    用LordPE打开一个.exe文件
    这里写图片描述
    VOffset:各区段的相对偏移地址(RVA),各区段在内存中的首地址偏移
    ROffset:各区段的文件偏移地址,即各区段在物理磁盘上的首地址偏移

    .txt的ROffse = 0x400 ==>>>该数据在txt段
    这里写图片描述

    VA = File Offset – ROffset + VOffset + Image Base
    = 0x420 – 0x400 + 0x1000 + 0x400000 = 0x401020


——《0day安全》学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。

PE文件学习

1.介绍 什么是PE文件? PE文件是windows操作系统下使用的可执行文件格式。32位就直接叫PE或PE32,64位的就PE+或PE32+,注意不是PE64哦!!!! 学习PE文件其实...
  • u012763794
  • u012763794
  • 2016年05月21日 15:39
  • 4915

修改PE文件版本信息(简单演示)

struct VS_VERSIONINFO {  WORD  wLength;  WORD  wValueLength;  WORD  wType;  WCHAR szKey[];  WORD  Pa...
  • unsigned
  • unsigned
  • 2008年10月14日 23:11
  • 3563

PE文件格式和ELF文件格式(上)----PE文件

Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式。PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Specifications, Windo...
  • paul123456789io
  • paul123456789io
  • 2016年12月08日 11:30
  • 698

深入解析PE文件结构之导出表获取

新学期新气象,一般是小学作文的开头,在此引用一下。 最近有时间坐下来仔细研究一下PE文件结构了,以前遇到这种问题时总是拆东墙补西墙。学的不够透彻。几天来一番研究之后,和大家分享一下。 PE的文件结...
  • yiyefangzhou24
  • yiyefangzhou24
  • 2012年02月17日 16:58
  • 7357

PE文件结构与函数导出表——详解与实例

随着windows系统从Xp升级到Win7、Win8, 从32位升级到64位,PE文件结构在整体未变的情况下发生了一些小的变动,一方面是推荐的程序装载地址未采用,另一方面,导出函数序号不再是简单的升序...
  • typ2004
  • typ2004
  • 2015年03月13日 22:47
  • 1768

判断是不是PE文件

#include #include "assert.h" #include #include "TCHAR.H" #ifdef UNICODE #define IsPEFile IsPEFil...
  • macalyou
  • macalyou
  • 2014年07月08日 18:33
  • 1708

逆向分析学习笔记--PE文件加载流程

一、WIN32PE加载流程(参考《软件保护及分析技术》) win32程序一般是由其他程序启动生成的,启动的顺序一般为: 1、创建进程CreateProcessA或CreateProcessA,这两...
  • qq_20977145
  • qq_20977145
  • 2016年10月07日 22:00
  • 880

PE文件病毒感染示例

;本程序修改自hume的代码,其版权信息如下:CopyRight              db "The SoftWare WAS OFFERRED by Hume[AfO]",0dh,0ah   ...
  • long_xing
  • long_xing
  • 2006年05月29日 10:30
  • 2917

cutePE:自己写的PE文件结构查看器

(代码略搓,大神请飘走~~~)cutePE基于Qt5.5开发,可以查看PE文件结构。开发过程如下:0x01 读取文件要【通过signature判断是否为PE文件】其实是件简单的事,but,首先得需要读...
  • spenghui
  • spenghui
  • 2017年06月02日 15:54
  • 707

自己写的一个PE文件FileVersionInfo类,可以轻松获取PE文件版本信息

今天写了一个类似任务管理器的东西,需要获取到对应进程d
  • q244767346
  • q244767346
  • 2014年08月22日 10:18
  • 1433
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PE文件
举报原因:
原因补充:

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