我尝试了解Erik August(https://gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6)的Spectre PoC。 在第76行中说
x = ((j % 6) - 1) & ~0xFFFF;
所以我知道&
是按位AND,而~
返回按位补码。如果j%6
是0
,我就会明白为什么x=FFF.FF0000
。
但我想知道为什么在其他情况下使用x=0
。为什么不是例如0xFFFF0001
?
感谢您的帮助!
答案 0 :(得分:1)
〜0xFFFF给你0xFFFF_0000
(((j%6)-1)的结果可能是-1(0xFFFF_FFFF) 或0-4
对于0到4,如果您将其与0xFFFF_0000相加,则将为0。
示例:
0xFFFF_0000
0x0000_0001
----AND----
0x0000_0000