为什么将 EXE 读取为文本在打印时显示“MZ”
本文关键字:显示 MZ 打印 EXE 读取 文本 为什么 | 更新日期: 2023-09-27 18:31:08
String inputFile = "C:''Users''Neil''Desktop''DCR''file.exe";
Byte[] bytes = File.ReadAllBytes(inputFile);
String content = Encoding.Default.GetString(bytes);
Console.WriteLine(content);
的输出
MZ?
当我尝试对另一个文件执行此操作时,我得到
MZP
这是什么意思?
Windows exe 的前几个字节是 DOS 标头,其结构为:
struct DOS_Header
{
char signature[2] = "MZ";
short lastsize;
short nblocks;
short nreloc;
short hdrsize;
short minalloc;
short maxalloc;
void *ss;
void *sp;
short checksum;
void *ip;
void *cs;
short relocpos;
short noverlay;
short reserved1[4];
short oem_id;
short oem_info;
short reserved2[10];
long e_lfanew;
}
将文件作为字符串读取将从 MZ
开始,然后根据编码解释以下 16 位整数的方式而有所不同。 如果这些单词中的任何一个的高字节为 0,这也将终止字符串,这解释了为什么你会得到 3 个字符的输出而没有别的。
具体来说,当lastsize
的值为 0x3F
时,将发生输出MZ?
,当lastsize
的值为 0x50
时,将发生MZP
输出。