为什么字符串在PE文件中以如下方式存储

时间:2017-07-17 22:43:32

标签: compilation reverse-engineering

我打开了一个.exe文件,发现字符串“Premium”以下列方式存储

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

我只是不知道为什么每个字符附加“00”以及它的用法是什么。

谢谢,

1 个答案:

答案 0 :(得分:1)

它可能是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值作为低位字节。