如果我使用Windbg调试asm文件,图像将被加载到内存中的某个位置,在我的情况下是00400000.如果我从00400000转储数据,我可以看到我的汇编代码被加载到图像文件中并且偏移了10000来自这个地址而不是00400000。
这是图像开头的转储。
00400000 -> 00905a4d 00000003 00000004 0000ffff
00400010 -> 000000b8 00000000 00000040 00000000
00400020 -> 00000000 00000000 00000000 00000000
00400030 -> 00000000 00000000 00000000 000000c0
所以,我的问题是图像开头的这个标题是什么,它用于什么?看起来所有图像都有这个标题。
提前致谢。
答案 0 :(得分:0)
您发布的内容看起来像32位格式的PE标头:
0:000> dd 00400000
00400000 00905a4d 00000003 00000004 0000ffff
00400010 000000b8 00000000 00000040 00000000
00400020 00000000 00000000 00000000 00000000
00400030 00000000 00000000 00000000 00000080
如果将其转储为字节,它将随之显示ASCII字符,您可以轻松识别" MZ"报头中。
0:000> db 00400000
00400000 4d 5a 90 00 03 00 00 00-04 00 00 00 ff ff 00 00 MZ..............
00400010 b8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00 ........@.......
00400020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
00400030 00 00 00 00 00 00 00 00-00 00 00 00 80 00 00 00 ................
您可以使用!dh
命令对其进行解码:
0:000> !dh 00400000
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (i386)
3 number of sections
5911398E time date stamp Mon May 8 20:37:50 2017
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
22 characteristics
Executable
App can handle >2gb addresses
[...]
如果您不想使用WinDbg,可以在Stud_PE加载可执行文件,然后为您分析。