Коды Axe являются рычагами, когда процессор находится в режиме arm, он будет декодировать биты, которые он находит, используя эти кодировки. Если имеется более одного A1, A2, должно быть очевидно, что для этого есть другая особенность или причина. две инструкции можно рассматривать отдельно (смотрите на чрезмерное использование mov в x86, например, у него много кодировок). Рассматривайте каждую кодировку как отдельную «инструкцию».
Тогда есть варианты Tx, это расширения большого пальца и thumb2. Большой палец - все 16 бит (bl может быть декодирован как две отдельные 16-битные инструкции), а описания, приведенные ниже, обозначают «все варианты большого пальца» или «armv4t к настоящему» или какой-то такой язык. Расширения thumb2 все 32 бит, первые 16 бит являются неопределенной инструкцией в мире палец. Они имеют больше ограничений на то, какие архитектуры поддерживают их.
Вы не сможете полностью создать дизассемблер для одного из этих процессоров по той же причине, которую вы не можете сделать для x86 или многих других процессоров (все?). Если вы предполагаете, что все инструкции - это один режим (рука или большой палец или большой палец + большой палец2), но не режим смешивания (рука + большой палец), то вы можете, потому что все фиксированная длина инструкции и вы можете просто разобрать все данные и код, и вы не будете запускать в любые проблемы. Чтобы разобрать смешанный режим, вы должны в основном эмулировать/выполнять инструкции и следовать потоку команд (так же, как набор дизассемблеров с переменной длиной слова), чтобы попытаться найти переходы, проблема здесь, конечно, переходы - это несколько инструкций при минимальной нагрузке регистр, тогда bx, который регистрируется, иногда в вычислении команд есть математика, и нет гарантии, что вычисление или загрузка адреса происходит с инструкцией перед bx. Таким образом, вы можете сделать некоторые из этого и пройти долгий путь путем разборки программы.
Если параметр thumb2 поддерживается/разрешен на процессоре, который вы используете, тогда у вас есть проблема с переменной длиной инструкции в течение времени, которое вы обнаруживаете точки входа в код большого пальца. И если вы уже этого не делаете, вам нужно выполнить выполнение кода, чтобы определить, где начинаются инструкции (материал разборки длины элементарной переменной).
Комбинация технического справочного руководства и справочника по архитектуре расскажет вам, разрешена ли архитектура и реализация этой архитектуры (trm) режимом руки и большого пальца. Я бы предположил, что A9 поддерживает большой палец руки и большой палец2, все три.
Семейство коры головного мозга - единственное до сих пор, которое ограничено не поддерживающей рукой, а их большой палец2 широко варьируется, поскольку коры головного мозга m0 (и m1) являются armv6m, а m3 и m4 - armv7m (несколько десятков (armv6m) для многих десятков расширений thumb2 в armv7m). Существуют отдельные архитектурные справочники, специально предназначенные для вариантов -m, например armv7-m и руководства armv7-ar.
Спасибо вам большое, все ваши ответы действительно полезны. Я не ожидал ответа так быстро. – user2299676