Код Призрака V1 PoC
Я пытаюсь понять Spectre PoC Эриком Августом ( https://gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6). В строке 76 говорится
x = ((j % 6) - 1) & ~0xFFFF;
Итак, я знаю &
является побитовым И и ~
возвращает побитовое дополнение. Если j%6
является 0
Я понимаю почему x=FFF.FF0000
, Но мне интересно, почему x=0
в других случаях. Почему это не например 0xFFFF0001
?
Спасибо за вашу помощь!
1 ответ
~0xFFFF дает вам 0xFFFF_0000
Результат ((j % 6) - 1) может быть -1 (0xFFFF_FFFF) или 0-4
От 0 до 4, если вы И это с 0xFFFF_0000, это будет 0.
пример:
0xFFFF_0000
0x0000_0001
----AND----
0x0000_0000