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
这是什么意思?
答案 0 :(得分:4)
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个字符的输出而没有别的。
具体而言,当MZ?
的值为lastsize
且0x3F
的{{1}}值为MZP
时,会出现输出lastsize