Как рассчитать возврат инструкций после периода программы (на основе аспекта компьютерного оборудования) - PullRequest
1 голос
/ 05 июля 2019

Я недавно работал над rop.При использовании perf для подсчета информации об оборудовании я хочу измерить количество инструкций возврата, выполняемых данным фрагментом кода.Но интерфейс perf предоставляет только инструкции перехода.

1 Ответ

2 голосов
/ 05 июля 2019

Если вы используете только x86 с недавним процессором Intel:

perf list на моем Skylake показывает, что есть аппаратный счетчик для br_inst_retired.near_return.Это будет считать только ret инструкции, а не другие ветви.Но см. Ошибку SKL091 для счетчиков команд ветвления.

perf stat -e instructions,br_inst_retired.near_return,... ./a.out может быть тем, что вы ищете.Или, возможно, присоединение perf stat к уже запущенной программе или, возможно, -I 1000 для печати накопленных подсчетов за определенные интервалы.

Но учтите, что если вы ищете ROP-гаджеты , вывнутри можно найти C3 код операции , который обычно декодируется как некоторая другая инструкция.Таким образом, ограничение себя только ret инструкциями, которые фактически выполняются во время нормального выполнения целевой программы, является более ограничивающим, чем это необходимо.

Например, 4-байтовое немедленное может с пользой декодироваться как что-то + ret, если выперейти к немедленному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...