Я хотел бы собрать файл x86, гарантируя, что код будет работать на данном процессоре, без необходимости протестировать его на эмуляторе процессора.Проверка того, должен ли данный файл сборки работать на заданном процессоре
Есть ли инструмент/техника, которая позволила бы мне сделать какую-либо классификацию команд x86 в соответствии с самым старым требуемым процессором, который ее поддерживает, или, по крайней мере, предупредить меня, если используются несовместимые инструкции?
Короче говоря, я ищу автоматическую версию this Wikipedia table of x86 instruction listings, чтобы помочь мне проверить, должен ли данный код быть совместимым с данным процессором.
Инструкции, представленные в сборке/двоичном коде, не обязательно выполняются. Большинство программ, которые используют современные инструкции, также содержат обратную совместимость версий оптимизированных функций и выполняются в зависимости от процессора, обнаруженного во время выполнения. –
В этом случае консервативная оценка с учетом * каждой инструкции в файле * была бы достаточно для меня. У меня есть код, запущенный на старых процессорах, извергающих ошибки, такие как «iilegal opcode/инструкция» и сброс, и я хотел бы иметь возможность понять, почему без необходимости вручную проверять каждую инструкцию по таблице или запускать ее через серию эмуляторов процессора, чтобы увидеть, какой из них терпит неудачу. – anol
Окончательная классификация инструкций двоичного кода (исполняемый или объектный код) невозможна, поскольку это означает решение [** проблемы с остановкой **] (https://en.wikipedia.org/wiki/Halting_problem), которая доказана * * неразрешимой **. Невозможно окончательно отличить код и данные по той же причине (проблема с остановкой). Конечно, существуют эвристики и более простые методы, которые могут работать или нет, например метод линейной развертки, используемый некоторыми дизассемблерами. – nrz