PE加载的过程 任何一个EXE程序会被分配4GB的内存空间,用户层处理低2G的内存,驱动处理高2G的内存. 1.双击EXE程序,操作系统开辟一个4GB的空间. 2.从ImageBase决定了加载后的基址,ImageSize决定了程序有多大. 3.然后加载DLL 大体流程: 1.PE被执行时,装载器为进程分配虚拟地址空间,在此情况下,并不是把完整的PE文件载入到磁盘中,而是做一个简单的内存映射. 2.PE装载器在内核中创建进程对象和主进程对象以及其他的内容. 3.PE装载器搜索输入表,装载应用程序…
PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先,我们先看一段代码,比如调用Printf函数,使用OD查看. 那么大家有没有想过这么一个问题,函数的字符串偏移是00407030位置,函数Call的地址是00401020的位置 但是如果模块首地址申请不到了,变为了00100000的位置,那么此时的偏移是不是都是错的了? 首先说下,一般重定位表格都是D…
第六章 栈与重定位表 本章主要介绍栈和代码重定位.站和重定位表两者并没有必然的联系,但都和代码有关.栈描述的是代码运行过程中,操作系统为调度程序之间相互调用关系,或临时存放操作数而设置的一种数据结构.重定位表则是在一个PE中的代码被加载到任意一个内存地址时,用来描述相关操作数地址变化规律的数据结构.通过重定位技术,代码运行在内存中的任意位置时,可以避免因操作数的定位错误而导致失败. 6.1栈 前面基本概念直接过... 程序在运行的时候会为系统分配一块内存区域作为栈,由栈选择子SS和栈定指针(es…
今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的系哦”.其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做,主要原因是因为PE结构非常重要,再说做这个课件的确是很费神的事哈.在这里再次强调一下,只要是windows操作程序,其就要遵循PE格式,再说人家看雪的网址就是www.pediy.com. 简单的讲是可以,但是怕就怕有些朋友知识点遗漏了或者错误理解意思.不能深刻体会等,这样的效果是不好的~所以,小甲鱼尽管这系列视频可…
什么是重定位: 重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你占用,你必须转移到别的地址,这就需要基址重定位.你可能会问,不是说过每个进程都有自己独立的虚拟地址空间吗?既然都是自己的,怎么会被占据呢?对于EXE应用程序来说,是这样的.但是动态链接库就不一样了,我们说过动态链接库都是寄居在别的应用程序的空间的,所以出现要载入的基地址被应用程序占据了或者被其它的DLL占据了,也是很正常的,这时它就不得不进行重定位了. 哪些数据需要重定位: :00401000 5…
0x01  重定位表结构   重定位表是由数据目录表中的第六个成员指出的: typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;  程序编译时每个模块有一个优先加载地址ImageBase,这个值是链接器给出的,因此链接器生成的指令中的地址是在假设模块被加载到ImageBase前提之下生成的,那么一旦程序没有将模…
pe文件头查看器下载与原文地址: http://www.pc6.com/softview/SoftView_109840.html PE文件入门: PE文件总的来说是由DOS文件头.DOS加载模块.PE文件头.区段表与区段5部分构成.其实,如果在纯Windows环境下运行,DOS文件头.DOS加载模块根本是用不上的,加上两个DOS相关的结构完全是为了兼容性问题. 为了方便观察与理解,我们可以通过观察图1大体了解PE文件的结构. 如图可知,整个程序就是以DOS文件头“MZ”开始的,接下来就是DOS…
文档内容: 1:下载<hadoop权威指南>中的气象数据 2:对下载的气象数据归档整理并读取数据 3:对气象数据进行map reduce进行处理 关键词:<Hadoop权威指南>气象数据 map reduce python matplotlib可视化 一:下载<hadoop权威指南>一书中的气象数据 <hadoop权威指南>一书中的气象数据位于 http://ftp3.ncdc.noaa.gov/pub/data/noaa/, 新建 getdata.py文件…
之前在学习PE文件格式的时候,是通过自己查看各个结构,自己一步步计算各个成员在结构中的偏移,然后在计算出其在文件中的偏移,从而找到各个结构的值,但是在使用C语言编写这个工具的时候,就比这个方便的多,只要将对应的指针类型转化为各个结构类型,就可以使用指针中的箭头来直接寻址到结构中的各个成员. 这次主要说明的是PE文件头的解析,也就是之前看到的第一个界面中显示的内容,这个部分涉及到CPeFileInfo这个解析类的部分代码,以及CPeFileInfoDlg这个对话框类的代码. 选择目标文件 首先通过…
主程序代码 PEInfo.c #include <Windows.h> #include<Richedit.h> #include "resource.h" HINSTANCE hInstance; HWND hWinEdit; /* 初始化窗口程序 */ void _Init(HWND hWinMain) { HICON hIcon; CHARFORMAT stCf; TCHAR szFont[] = TEXT("宋体"); hWinEdi…