Даже без синонимов инструкция по сборке может отображаться на более чем один машинный код.
Например. add eax, ebx
может быть представлен как 03 C3
или 01 D8
.
На самом деле это может быть полезно, например, идентифицировать конкретные компиляторы.
Вы можете найти больше примеров в этой статье .
Обратное также может быть правдой, в некотором роде.
Пример немного надуманный, но тот же машинный код (F3 90
) отображается на REP NOP
или PAUSE
на x86.
Какой из них выполняется, зависит от процессора, на котором выполняется код.
Хотя тот же код операции был выбран намеренно и в отношении состояния процессора, они не имеют значения , время выполнения - и точная внутренняя реализация - может отличаться на процессоре HT (PAUSE) и не HT (NOP).
Помимо PAUSE
против REP NOP
, который не имеет большого значения, можно написать машинный код, который сложно разобрать статически.
Например. можно аккуратно построить последовательность машинного кода, которая приведет к совершенно другим инструкциям по сборке, если разборка начинается, скажем, со смещения 0 против смещения 1.
Можно также написать самоизменяющийся ассемблерный код, чтобы усложнить статический анализ.