Этот вопрос относится к платформе c symboli angr
. В частности, я хочу задать два вопроса:
- Как найти выражение symboli c для адресного операнда инструкции загрузки?
- Как добавить ограничение к состоянию , где вышеупомянутый адрес - известное значение?
Чтобы дать больше информации, я использую Simulation Manager, где в любой момент есть список состояний в stashes
. Давайте рассмотрим любое конкретное состояние st0
. В этом состоянии хранится состояние символа c в соответствии с последовательностью инструкций, ведущих к последней инструкции, например, загрузка mov (rdx), rax
. Теперь внешняя информация (которой angr
не обладает) сообщила мне, что на самом деле получен доступ к адресу 0xdeadbeef
.
Таким образом, я думаю, что мне нужно сделать следующие шаги:
- Из
s0.addr
определите инструкцию и ее адресный операнд. Отсюда я получаю символьный c битовый вектор для s0.regs._rax
. Вопрос в основном в том, как мне выяснить, что адрес, используемый загрузкой, был rax
? - Добавьте ограничение, которое
rax == 0xdeadbeef
. К счастью, состояние angr
имеет приятную функцию add_constraint
. Вопрос в том, как мне express сделать свое ограничение в коде?