第一次学习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位置在文件中怎么确定问题的更多相关文章

  1. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

  2. Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  3. Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

    f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...

  4. MFC文档视图结构学习笔记

    文档/视图概述 为了统一和简化数据处理方法,Microsoft公司在MFC中提出了文档/视图结构的概念,其产品Word就是典型的文档/视图结构应用程序 MFC通过其文档类和视图类提供了大量有关数据处理 ...

  5. Linux学习笔记14——使用fcntl实现文件锁定

    期末考试快要来了,Linux学习进度一下拉下来许多.今天学习的是文件锁定,在Linux中,实现文件锁定的方法很多,例如fcntl和lockf.下面主要是fcntl的调用. fcntl函数的原型是:in ...

  6. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  7. [C#学习笔记3]关于Main(string[ ] args)中args命令行参数

    Main(string[] args)方法是C#程序的入口,程序从这里开始执行,在这里结束.C#代码逻辑要包含在一个类型(Type)中,游离的.全局的变量或函数是不存在的,这里的类型包括类(class ...

  8. JNI学习笔记_Java调用C —— 非Android中使用的方法

    一.学习笔记 1.java源码中的JNI函数本机方法声明必须使用native修饰. 2.相对反编译 Java 的 class 字节码文件来说,反汇编.so动态库来分析程序的逻辑要复杂得多,为了应用的安 ...

  9. CocosBuilder 学习笔记(3) AnimationManager 与 ccbi 文件解析

    [CocosBuilder]学习笔记目录 1. 相关的类 先介绍和AnimationManager相关的几个类: CCBSequence 时间线.有成员duration(时间线时间,默认10秒).na ...

随机推荐

  1. CNN 参数计算

    CNN 时间计算复杂度与空间复杂度 即,连续个数与参数个数, 每一个连接都意味着一个计算, 每一个参数都意味一个存储单元. 只计算主要部分. CNN局部连接与权值共享 如图所示: 全连接:如左图所示, ...

  2. Oracle对象(视图、序列、索引)

    数据库对象:表.视图.序列.索引.同义词创建视图:create view 名 as 子查询描述结构:describe 对象名修改视图:create or replace view 名 as 子查询 视 ...

  3. linux修改ssh端口 以及禁止root远程登录 (实验机 CentOs)

    把ssh默认远程连接端口修改为3333 1.编辑防火墙配置: vi /etc/sysconfig/iptables 防火墙新增端口3333,方法如下: -A INPUT -m state --stat ...

  4. Django之静态文件配置

    在项目目录中打开settings.py,在最下面配置静态文件(css文件,js文件以及其他静态配置文件),比如说html使用到了jQuery框架,我们要在项目根目录下创建statics(可自定义),将 ...

  5. READ–IT: Assessing Readability of Italian Texts with a View to Text Simplification-paper

    https://aclanthology.info/pdf/W/W11/W11-2308.pdf 2 background2000年以前 ----传统可读性准则局限于表面的文本特征,例如the Fle ...

  6. Mac下常用工具

    MySql--Sequel Pro

  7. YIT-CTF—密码学

    一.哼哼 小猪生活的地方在哪里? 看题目联想到是猪圈加密 二.卢本伟 LOL我只服五五开 ๑乛◡乛๑babbababaababbababaaababaaaaaaabaaa 更具提示“五五开”,再看到这 ...

  8. Python 3.5 in win10 pip install Orange3

    http://www.lfd.uci.edu/%7Egohlke/pythonlibs/ 下载Orange3 以及 依赖包 注意网页上标出的Orange 的依赖,以及 https://github.c ...

  9. MySQL 5.7--复制延迟监控

    ========================================== SHOW PROCESSLIST方式 为保证二进制日志在从库的执行时间和顺序的正确性,二进制日志中的每个语句都设置 ...

  10. 数学的语言 化无形为可见 (Keith Devlin 著)

    第一章 数字为何靠的住 (已看) 第二章 心智的模式 (已看) 第三章 动静有数 (已看) 第四章 当数学成型 (已看) 第五章 数学揭开美之本质 (已看) 第六章 当数学到位 (已看) 第七章 数学 ...