#qemu #execution #control-flow #instructions
#qemu #выполнение #поток управления #Инструкции
Вопрос:
Эффект, который оказывает выполняемая инструкция, зависит от текущих регистров, с которыми она работает. Например, инструкция, которая добавляет содержимое 2 регистров, имеет тот же эффект, когда содержимое 2 регистров одинаково.
Теперь давайте рассмотрим выполнение программы: выполнение программы может быть описано выполняемыми инструкциями вместе с содержимым регистров, используемых этими инструкциями.
Мой вопрос: у меня есть дамп каждой отдельной инструкции, которая была выполнена во время выполнения программы, вместе со значениями регистров, которые использовала каждая инструкция. Важен ли порядок выполнения этих инструкций?
Пример: у меня есть два дампов программы. Каждый дамп программы состоит из инструкций (1-4) вместе с состояниями регистров (A-D) для каждой используемой инструкции. Могу ли я сказать, что оба запуска программы эквивалентны, если инструкции выполняются в другом порядке? (сверху вниз, обратите внимание, что во втором запуске инструкция 2 выполняется после инструкции 3, но состояния регистров, которые инструкции имеют в обоих запусках, одинаковы).
Run 1: Run2:
1 A 1 A
2 B 3 C
3 C 2 B
4 D 4 D
Справочная информация: я сравниваю собственное выполнение программы с выполнением qemu (эмулятором). При просмотре дампов я заметил, что некоторые вещи выполняются в другом порядке, когда одна и та же программа запускается qemu. Также некоторые инструкции выполняются изначально, которые не выполняются qemu, и наоборот. Итак, при сравнении я могу просто проверить, имела ли выполненная инструкция те же состояния регистров в другом дампе или это совершенно неправильно?
Комментарии:
1. Только если эти инструкции работают исключительно с регистрами, и вы отслеживаете их все (включая флаги и т.д.). Если там есть память (или какие-либо инструкции ввода-вывода), отслеживания только регистров недостаточно.
2. Обычно наблюдаемый эффект программы создается только теми инструкциями, которые выполняют ввод-вывод, системные вызовы и т. Д. Предположим, у вас есть инструкция, которая выводит содержимое регистра A, и она выполняется один раз с
A=0
помощью и один раз сA=1
помощью . Порядок определяет, выводит ли программа10
or01
, которые, очевидно, не эквивалентны.3. @Mat да, я отслеживаю все регистры пользовательского пространства, включая флаги. И эти инструкции не работают исключительно с регистрами, эти дампы взяты из обычных исполняемых файлов, которые могут делать что угодно. (пример: /bin/ls под linux). Есть ли еще способ сравнить оба дампа (см. предысторию) и сказать, что x% инструкций одинаковы? Поскольку, исходя из этого знания, если в первых нескольких инструкциях есть разница, я не могу сравнивать другие миллионы инструкций.
4. Чего именно вы пытаетесь достичь? Любое изменение порядка или вида операций может привести к совершенно разным результатам. Почему вы сравниваете потоки команд, а не выходные данные / эффекты?
5. @Mat я пытаюсь определить, отличается ли выполнение qemu от собственного выполнения, и если да (это так), скажите, насколько оно отличается