PE结构学习笔记--关于AddressOfEntryPoint位置在文件中怎么确定问题
第一次学习PE结构,也不知道有没有更好的办法。
1、AddressOfEntryPoint
这个成员在OptionalHeader里面,OptionalHeader的类型是一个IMAGE_OPTIONAL_HEADER32结构。该结构总共有31个成员,占的大小为224字节。成员7就是AddressOfEntryPoint。AddressOfEntryPoint占4个字节。它表示的是代码入口的RVA地址。也就是说,把一个文件加载到内存的时候,基地址加上AddressOfEntryPoint就是我们的入口代码地址。基地址在成员10有定义。
2、如何确定AddressOfEntryPoint在文件中的位置地址
AddressOfEntryPoint指示的是文件加载如内存之后的地址,那么在文件中,这个内存指代的地址是什么呢?
在PE结构之后是节表,之后是节数据。我们在节表里面可以得到一些有用的信息。因为AddressOfEntryPoint一般指示的地址都是几个节中的某一个。我们可以用16进制打开PE文件,然后查看各节的头部内容。
每一个节(段)是IMAGE_SECTION_HEADER结构。共10个成员。对于本问题比较有用的就是第三个成员,VirtualAddress,4个字节。它表示的是该段映射到内存的起始地址。成员4是SizeOfRawData,4个字节。表示该段在内存占的大小。成员5,PointerToRawData,4个字节。表示该段在文件中的起始地址。注意,这儿提到了文件中。
确定AddressOfEntryPoint在文件中的地址就可以这样来计算了。首先我们要确定AddressOfEntryPoint在内存中是属于哪个段。这个很好确定。就看AddressOfEntryPoint的地址位于哪个段中就行了。比如AddressOfEntryPoint位于段A中。其次,就用AddressOfEntryPoint的地址减去A的VirtualAddress,得到AddressOfEntryPoint相对于段A的偏移B。最后,我们用段A的PointerToRawData加上偏移B就得到了AddressOfEntryPoint在文件中的位置。
关于这个位置,我们也可以用OD打开一个PE文件,它会自动跳转到AddressOfEntryPoint,它的“HEX 数据”栏会显示AddressOfEntryPoint在文件中的位置。
学习了2天,且当做一个笔记。如果有更好的方法,希望有人可以告知。
PE结构学习笔记--关于AddressOfEntryPoint位置在文件中怎么确定问题的更多相关文章
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
- Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- Vue.js学习笔记:在元素 和 template 中使用 v-if 指令
f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...
- MFC文档视图结构学习笔记
文档/视图概述 为了统一和简化数据处理方法,Microsoft公司在MFC中提出了文档/视图结构的概念,其产品Word就是典型的文档/视图结构应用程序 MFC通过其文档类和视图类提供了大量有关数据处理 ...
- Linux学习笔记14——使用fcntl实现文件锁定
期末考试快要来了,Linux学习进度一下拉下来许多.今天学习的是文件锁定,在Linux中,实现文件锁定的方法很多,例如fcntl和lockf.下面主要是fcntl的调用. fcntl函数的原型是:in ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
- [C#学习笔记3]关于Main(string[ ] args)中args命令行参数
Main(string[] args)方法是C#程序的入口,程序从这里开始执行,在这里结束.C#代码逻辑要包含在一个类型(Type)中,游离的.全局的变量或函数是不存在的,这里的类型包括类(class ...
- JNI学习笔记_Java调用C —— 非Android中使用的方法
一.学习笔记 1.java源码中的JNI函数本机方法声明必须使用native修饰. 2.相对反编译 Java 的 class 字节码文件来说,反汇编.so动态库来分析程序的逻辑要复杂得多,为了应用的安 ...
- CocosBuilder 学习笔记(3) AnimationManager 与 ccbi 文件解析
[CocosBuilder]学习笔记目录 1. 相关的类 先介绍和AnimationManager相关的几个类: CCBSequence 时间线.有成员duration(时间线时间,默认10秒).na ...
随机推荐
- python 一行代码字符串转字典方法
b = 'bid=Qzw9cKnyESM; ll="108288"; __yadk_uid=4YChvgeANLBEh4iV00n1tc0HQ8zpmSl1; __utmc=301 ...
- 2017 乌鲁木齐赛区网络赛 J Our Journey of Dalian Ends 费用流
题目描述: Life is a journey, and the road we travel has twists and turns, which sometimes lead us to une ...
- tmux允许鼠标滚动
/********************************************************************** * tmux允许鼠标滚动 * 说明: * 默认tmux貌 ...
- render finished
- 自我复制的3D打印机
RepRap 是人类历史上第一部可以自我复制型的机器. https://reprap.org/wiki/RepRap RepRap 是一部可以生成塑料实物的免费桌面型 3D 打印机.由于 RepRap ...
- 使用python查询某目录下所有‘jpg’结尾的图片文件
调用os模块,先建立一个对目标目录的walk迭代器. 然后再对迭代器进行遍历,判断每个文件是否以'jpg'结尾. 若是,则输出. import os g = os.walk("G:" ...
- js判断输入的字符是否是汉字
<script type="text/javascript"> var c=prompt("请输入一个字符"); var isNumber = c& ...
- HTTP与TCP的区别和联系--转载
相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助. 一.基本概念 1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP ...
- Http&Tomcat
一张图 tomcat的安装和启用: Tomcat有安装版和解压版(绿色版)安装版以.exe形式的安装包,双击安装到我们的电脑上,用的比较少.解压版,即绿色版,解压后直接使用,用的比较多 bin:脚本目 ...
- POI事件模型处理execl导入功能(只支持07版本的execl)
由于通过new XSSFWorkbook 这种方式导入导致生产环境端口宕机.通过dump文件和javacore文件分析是导入功能导致的.解决办法:自己通过网上写的工具类,不知道是否存在bug. pac ...