为什么字符串在PE文件中是这样存储的

Why strings are stored in the following way in PE file

我打开了一个 .exe 文件,我发现一个字符串 "Premium" 是以下面的方式存储的

50 00 72 00 65 00 6D 00 69 00 75 00 6D 00

就是不知道为什么每个字符后面都要加“00”,有什么用。

谢谢,

可能是Unicode字符串的UTF-16编码。这是一个使用 Python:

的例子
>>> u"Premium".encode("utf16")
'\xff\xfeP\x00r\x00e\x00m\x00i\x00u\x00m\x00'
#        ^    ^    ^    ^    ^    ^    ^   

在指示字节顺序的字节标记之后,您可以看到交替出现的字母和空字节。


\xff\xfe是字节序标记;它表示每个 16 位值的低位字节在前。 (如果高位字节在前,字节标记将是\xfe\xff;哪个标记表示哪个没有什么特别有意义的。)

然后将每个字符编码为 16 位值。对于许多值,UTF-16 编码只是其 Unicode 代码点的直接无符号 16 位表示。具体来说,8 位 ASCII 值只是使用一个空字节作为高位字节,其 ASCII 值作为低位字节。