好友
阅读权限25
听众
最后登录1970-1-1
|
本帖最后由 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.第三行文件展开
-
ASM C.rar
(10.12 KB, 下载次数: 17)
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|