Получение текущего значения в регистрах / кэше?

Есть ли способ (в ASM / C / C ++) иметь возможность запрашивать содержимое адресов памяти в кеше или даже получать текущие значения в регистрах?

Будет ли это как принцип Гейзенберга в действии? Код, пытающийся извлечь значение из регистра, может привести к выгрузке регистра?

1

Решение

В большинстве процессоров нет стандартных инструкций для «чтения значения из кеша». Можно предположить, что современные процессоры могут читать / записывать содержимое кэша для целей тестирования, но если такие инструкции существуют, они не являются публично описанными и, вероятно, требуют осторожности при их использовании, чтобы не мешать действительному выполнению кода. Чтение любой памяти потенциально повлияет на то, что находится в строке кэша, которую вы хотите проверить.

Значения регистров требуют довольно тщательного внимания к тому, как вы пишете код, и обычно почти невозможно хранить ВСЕ значения регистров, не затрагивая что-то где-то, хотя в большинстве процессоров вы можете довольно близко подойти, используя инструкцию типа «push» для хранения значений в стек. Как только значения «сохранены», они могут быть получены с помощью инструкций чтения из памяти regulare, и, поскольку значения уже сохранены, вы можете использовать (почти) любой регистр для остальной части кода.

Редактировать: Так как тип процессора теперь указан:
На процессорах x86 в 32-битном режиме можно использовать PUSHA поместить все регистры в стек (включая ОРИГИНАЛЬНОЕ значение ESP в середине списка). Однако для x86-64 необходимо использовать отдельные инструкции PUSH для каждого регистра. Но это все еще возможно сделать.

Я не знаком ни с какими инструкциями Intel по проверке содержимого кэша.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector