протокол трассера
Намного нагляднее дизассемблерного листинга, правда? Теперь не нужно прыгать по условным переходам, гадая какие из них выполняются, а какие нет, к тому же естественным образом исчезает проблема перекрытия машинных команд. Обратите внимание на адреса 434012h, 00434013h и 00434016h. Ба! Так это же наши "перекрытые" команды! То, что дизассемблеру удавалось показать с таким трудом, трассер отдает нам задаром! Это реальный поток выполнения программы, в котором много мусора, но по крайней мере нет скрытых команд, с которыми приходится сталкиваться в дизассемблере.
Полученный протокол трассировки можно (и нужно!) прогонять через различные программы-фильтры (их так же придется написать самостоятельно), распознающие и удаляющие мусорные инструкции. Впрочем, эту операцию можно выполнить и вручную, загрузив протокол в любой редактор (например, в тот, что встроен в FAR). После нескольких минут работы мы получим следующий реально значимый код:
001B:00434001 E800000000 CALL 00434006
001B:00434006 5D POP EBP
001B:00434077 33C9 XOR ECX,ECX
001B:004340C3 33C0 XOR EAX,EAX
001B:004340D3 8B0424 MOV EAX,[ESP]
001B:004340DB C60090 MOV BYTE PTR [EAX],90
001B:00434105 83ED06 SUB EBP,06