Windows PE第6章 栈与重定位表】的更多相关文章

第六章 栈与重定位表 本章主要介绍栈和代码重定位.站和重定位表两者并没有必然的联系,但都和代码有关.栈描述的是代码运行过程中,操作系统为调度程序之间相互调用关系,或临时存放操作数而设置的一种数据结构.重定位表则是在一个PE中的代码被加载到任意一个内存地址时,用来描述相关操作数地址变化规律的数据结构.通过重定位技术,代码运行在内存中的任意位置时,可以避免因操作数的定位错误而导致失败. 6.1栈 前面基本概念直接过... 程序在运行的时候会为系统分配一块内存区域作为栈,由栈选择子SS和栈定指针(es…
3.5  数据结构字段详解 3.5.1  PE头IMAGE_NT_HEADER的字段 1.IMAGE_NT_HEADER.Signature +0000h,双字.PE文件标识,被定义为00004550h.也就是"P""E"加上两个0,这也是PE这个称呼的由来.如果更改其中任何一个字节,操作系统就无法把该文件识别为正确的PE文件.通过修改这个字段,会导致PE文件在32位系统中加载失败,但由于这个文件的其他部分(特别是DOS头)还没有被破坏,系统还是可以识别出其为DOS…
这一章的上半部分大体介绍了下PE文件头,下半部分是详细介绍里面的内容,这一章一定要多读几遍,好好记记基础概念和知识,方便之后的学习. 简单回忆一下: 3.4  PE文件头部解析 3.4.1 DOS MZ头 IMAGE_DOS_HEADER DOS MZ头的下面是DOSS Stub.整个DOSS Stub是一个字节块,其内容随着链接时使用的连接器不同而不同,PE中没有与之对应的相关结构. 3.4.2 PE头标识Signature 紧跟在DOS Stub后面的是PE头标识Signature.与大部分…
第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过PE文件头部分对某些数据结构的描述,我们也可以定位到那些不在头文件部的信息,比如导入表数据.导出表数据.资源表数据等. 3.1  PE的数据组织方式 这一节说了很多,举了两个例子,分别是图书馆存书1和图书馆存书2,细节我不介绍了,是基本的数据结构应用,没有难点.最后说PE数据组织方式类似于存书2的例子…
第16-17章 - 基址重定位表&.reloc节区 @date: 2016/11/31 @author: dlive 0x00 前言 这几天忙着挖邮箱漏洞,吃火锅,马上要被关禁闭,看书进度比较慢... 0x01 PE重定位 若加载的是DLL.SYS文件,且在ImageBase位置处已经加载了其他DLL/SYS文件,那么PE装载器就会将其加载到其他未被占用的空间.这就涉及了PE文件重定位问题,PE重定位是指PE文件无法加载到ImageBase位置,而被加载到其他地址时发生的一系列处理行为. 开发工…
什么是重定位: 重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你占用,你必须转移到别的地址,这就需要基址重定位.你可能会问,不是说过每个进程都有自己独立的虚拟地址空间吗?既然都是自己的,怎么会被占据呢?对于EXE应用程序来说,是这样的.但是动态链接库就不一样了,我们说过动态链接库都是寄居在别的应用程序的空间的,所以出现要载入的基地址被应用程序占据了或者被其它的DLL占据了,也是很正常的,这时它就不得不进行重定位了. 哪些数据需要重定位: :00401000 5…
PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思.  如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234.  如果Imagebase 变了成了0x300000, 那么修正之后就是 ImageBase + RVA = 0X300000+1234 = 0x301234. 首先我们知道.一个EXE文件.会调用很多DLL(PE) 有多个PE文件组成. exe文件启动的基址 (ImageBase) 是0x40000. 假设我…
0x01  重定位表结构   重定位表是由数据目录表中的第六个成员指出的: typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;  程序编译时每个模块有一个优先加载地址ImageBase,这个值是链接器给出的,因此链接器生成的指令中的地址是在假设模块被加载到ImageBase前提之下生成的,那么一旦程序没有将模…
PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先,我们先看一段代码,比如调用Printf函数,使用OD查看. 那么大家有没有想过这么一个问题,函数的字符串偏移是00407030位置,函数Call的地址是00401020的位置 但是如果模块首地址申请不到了,变为了00100000的位置,那么此时的偏移是不是都是错的了? 首先说下,一般重定位表格都是D…
PE加载的过程 任何一个EXE程序会被分配4GB的内存空间,用户层处理低2G的内存,驱动处理高2G的内存. 1.双击EXE程序,操作系统开辟一个4GB的空间. 2.从ImageBase决定了加载后的基址,ImageSize决定了程序有多大. 3.然后加载DLL 大体流程: 1.PE被执行时,装载器为进程分配虚拟地址空间,在此情况下,并不是把完整的PE文件载入到磁盘中,而是做一个简单的内存映射. 2.PE装载器在内核中创建进程对象和主进程对象以及其他的内容. 3.PE装载器搜索输入表,装载应用程序…