Есть ли какая-либо инструкция ARM для инструкции i386 Converter?Преобразование инструкции ARM в инструкцию i386
ответ
Вы можете использовать QEMU для эмуляции инструкций ARM на x86.
Я действительно сомневаюсь. есть слишком много различий, чтобы сделать его автоматизированным.
Они намного ближе, чем, скажем, ANSI C и x86, но есть много программ, которые автоматически делают это преобразование. – Ken
Совсем нет. ANSI C предназначен для компиляции различных языков ассемблера. Многие высокоуровневые (относительно) концепции в C могут быть представлены различными способами в разных ассемблерах. Между сборщиками, однако, другая история. – Puppy
Это очень много беты, но идея состоит в том, чтобы написать LLVM фронт-энды для бинарных файлов, так что LLVM фонового может генерировать код для любой поддерживаемой платформы. Есть активный фронт ARMv6, и я уверен, что они хотели бы иметь с ним помощь. Целью является поддержка как эмуляции, так и статической перекомпиляции между любой из поддерживаемых архитектур.
Вы можете перепрограммировать код ARM на C, а затем просто скомпилировать код C. This company действительно производит довольно хороший код кода C от ассемблера. (Я никогда не использовал их продукт, но я знаком с исследованиями, стоящими за этой компанией).
Эмуляция или статический бинарный перевод - это пути, которые я бы взял, каждый из которых имеет свои плюсы и минусы.
Вам нужно быть более ясными о том, что вы просите. Простой перевод одного набора команд в другое - это одно, более сложная часть полезного результата - это то, к чему вы обращаетесь. Ваше пространство памяти и регистра ARM не будет соответствовать X86, поэтому прямой инструкции для команды (эмулировать или sbt) будет недостаточно, вам нужно добавить код, чтобы заменить многие из загрузок и хранилищ на что-то, что проверяет адрес, определяет, что он обращается и подражает этому периферийному (эмулируемому или sbt).
Самый простой способ сделать это - использовать что-то под названием «Программный динамический перевод». Вы можете найти информацию о технике здесь:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.120.5182&rep=rep1&type=pdf
Он работает динамически перевод «основные блоки», где вы переводите все инструкции до пункта управления (филиал, звонок, скачки), а затем заменить код в цехах филиала с заглушками, которые возвращаются в переводчик. Это примерно эквивалентно чем-то вроде «JIT Compilation» в CLR, за исключением того, что он работает на более узком уровне (базовые блоки вместо методов). Это выгодно по сравнению с подходами статического перевода, поскольку оно не зависит от точной разборки. Приобретение идеальной разборки невозможно (это эквивалентно проблеме остановки). Даже у действительно хороших дизассемблеров, таких как IDA pro, могут быть проблемы с определением таких вещей, как обработчики исключений, и часто путать код с данными.
Программный динамический перевод, однако, не подпадает под действие каких-либо из этих ограничений. Он может даже (теоретически) обрабатывать саморедактирующий код, используя соответствующие методы защиты памяти.
microsoft предоставляет эмулятор устройства, который делает именно это. первая версия даже поставляется с исходным кодом: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=10865
Что вы пытаетесь достичь? –
Вы пытаетесь просто запустить код, который у вас есть (в этом случае эмулятор хорош), или вы пытаетесь преобразовать какой-то код, который вы унаследовали от бывшего разработчика, и где у вас нет источника? –
Хотя преобразование инструкций из ARM в инструкции x86 технически возможно с помощью настраиваемого компилятора (ARM от IR до x86), есть и другие более превалирующие препятствия, такие совершенно разные операционные системы и библиотеки времени выполнения, которые приложение разработано для связь с которыми не имеет ничего общего с преобразованием инструкции. Легче перекомпилировать приложение для x86 и для целевой ОС. – tgiphil