通过PE寻找程序的入口点
本帖最后由 niucaidi 于 2021-7-8 19:46 编辑- 以附件中的ASM C.exe为范例
- 文件是从哪里开始执行的?
- 用010 edit或者UE打开ASM C.exe程序,观察pe结构图,需要明白0x00对应的是000000h,0x3c对应的是000000dch
- 3c是十六进制,转换为十进制是60,也就是从00000000h处向后数60个字节,刚好来到0000003c处,观察0x3c后面跟着的Dword e_Mannew,这是一个双字(在内存中占32个bit,也就是4个字节),所以要从3c处开始数4个字节。
- windows系统存储数据的方式是低位在前高位在后,所以找到的数据是`00 00 00 40`,所以最终找到的数据是`40`,所以最终00000040h就是程序存储32位数据信息的起点,但这并不是程序的入口,不是程序运行的起点。
- 代码存在哪里?
- 数据存在哪里?
- **图1,PE结构**r
-
- **图2.第二行文件展开**
-
- 第三行显示0x18,十六进制的18转化为十进制24,所以要从00000040h的下位置开始往后数24个字节。来到00000058h,也就是`0B 01`的位置, 此时应该向右偏移,偏移到第三行展开的位置。找到的程序入口地址0x10 Dword(橙色标记笔位置),十六进制的10转化为10进制是16,从0058h的位置往后数16个字节,来到0068h,因为Dword是4个字节,所以应用和程序的入口点是`00 01 10 23`,后面四个字节(0x14 Dword)就是代码的基址(此处的基址并非是游戏调试中寻找的基址,游戏调试中的基址只不过是一个全局变量,这里的基址可以理解为存储程序代码的七点),在往后四个字节(0x18 Dword)就是数据的基址
- **图3.第三行文件展开**
-
论坛的残血版MD语法支持真的给我恶心吐了,每次发贴子都要半小时以上,因为我原本图片用的是Base64图片转码,吾爱不支持这种着图形式,并且误操作时十分容易让浏览器卡死 来学习一下 大佬,求分享文中出现的PE结构.PDF
学习 , 马克一下 学习,谢谢分享。 谢谢楼主分享。解释的很清楚。 火钳刘明:lol 学习 , 马克一下 {:301_1000:}马克一下