Код Призрака 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
Другие вопросы по тегам