niucaidi 发表于 2021-7-6 23:43

通过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.第三行文件展开**
-


niucaidi 发表于 2021-7-7 00:13

论坛的残血版MD语法支持真的给我恶心吐了,每次发贴子都要半小时以上,因为我原本图片用的是Base64图片转码,吾爱不支持这种着图形式,并且误操作时十分容易让浏览器卡死

行踪落落 发表于 2021-7-7 00:21

来学习一下

sam喵喵 发表于 2021-7-7 01:31

大佬,求分享文中出现的PE结构.PDF

xiaollaa 发表于 2021-7-7 06:29

学习 , 马克一下

sofprysm2 发表于 2021-7-7 07:40

学习,谢谢分享。

alanyelan 发表于 2021-7-7 07:44

谢谢楼主分享。解释的很清楚。

jiacl 发表于 2021-7-7 08:18

火钳刘明:lol

沙漠海2010 发表于 2021-7-7 08:43

学习 , 马克一下

惟天月 发表于 2021-7-7 08:53

{:301_1000:}马克一下
页: [1] 2 3
查看完整版本: 通过PE寻找程序的入口点