这是Windows .lnk快捷方式格式的文档:
ShellLinkHeader结构的描述如下:
这是文件:
看着HeaderSize,字节为4c 00 00 00
,应该表示76个十进制。这是一个小端序的整数,在这里不足为奇。
[接下来是具有字节01 14 02 00 00 00 00 00 c0 00 00 00
的LinkCLSID,代表值“ 00021401-0000-0000-C000-000000000046”。 This answer似乎可以解释为什么字节顺序会发生变化,因为最后8个字节是字节数组,而其他字节是小尾数。
我的问题是关于[[LinkFlags部分。
LinkFlags部分的描述如下:并且我文件中的字节为9b 00 08 00
,或为二进制:
9 b 0 0 0 8 0 0
1001 1011 0000 0000 0000 1000 0000 0000
^
通过比较不同的文件,我发现在文档中用^
标记的位是6 / G位(用红色标记)。如何解释?字节的顺序与文档中的顺序相同,但是每个字节的位都反转了?
number的事实。它的意思是在其下面容纳一个位列表,并且该列表从最低位到最高位,这是我们从左到右读取数字的完全相反的过程。
列表清楚地显示了从0到31的位,这意味着它确实是一个32位值,而不是四个字节。具体来说,这意味着在执行其他任何操作之前,原始读取的字节需要解释为单个32位整数。与所有其他值一样,这意味着它需要以小尾数形式读取,其字节反转。
因此,您的9b 00 08 00
变为0008009b
,或者以二进制形式,0000 0000 0000 1000 0000 0000 1001 1011
。但是,正如我所说,规格中的列表显示了从最低到最高的位。因此,要使它们适合于此,请反转二进制版本:
0 1 2 3
0123 4567 8901 2345 6789 0123 4567 8901
ABCD EFGH IJKL MNOP QRST UVWX YZ@_ ____
---------------------------------------
1101 1001 0000 0000 0001 0000 0000 0000
^
因此,在规格中以“ G”表示的第6位为0。但是,如果您颠倒规格,并按逻辑顺序从最高到最低列出这些位,那么整个事情就更有意义了:
3 2 1 0 1098 7654 3210 9876 5432 1098 7654 3210 ____ _@ZY XWVU TSRQ PONM LKJI HGFE DCBA --------------------------------------- 0000 0000 0000 1000 0000 0000 1001 1011 ^
这使字母参考看起来不那么直观,但是它完全适合下面的二进制数字。这样,您还可以清楚地看到最高的5位未使用。