2010-05-28 2 views
6

Есть ли какая-либо инструкция ARM для инструкции i386 Converter?Преобразование инструкции ARM в инструкцию i386

+9

Что вы пытаетесь достичь? –

+0

Вы пытаетесь просто запустить код, который у вас есть (в этом случае эмулятор хорош), или вы пытаетесь преобразовать какой-то код, который вы унаследовали от бывшего разработчика, и где у вас нет источника? –

+2

Хотя преобразование инструкций из ARM в инструкции x86 технически возможно с помощью настраиваемого компилятора (ARM от IR до x86), есть и другие более превалирующие препятствия, такие совершенно разные операционные системы и библиотеки времени выполнения, которые приложение разработано для связь с которыми не имеет ничего общего с преобразованием инструкции. Легче перекомпилировать приложение для x86 и для целевой ОС. – tgiphil

ответ

11

Вы можете использовать QEMU для эмуляции инструкций ARM на x86.

0

Я действительно сомневаюсь. есть слишком много различий, чтобы сделать его автоматизированным.

+1

Они намного ближе, чем, скажем, ANSI C и x86, но есть много программ, которые автоматически делают это преобразование. – Ken

+0

Совсем нет. ANSI C предназначен для компиляции различных языков ассемблера. Многие высокоуровневые (относительно) концепции в C могут быть представлены различными способами в разных ассемблерах. Между сборщиками, однако, другая история. – Puppy

0

http://www.libcpu.org/

Это очень много беты, но идея состоит в том, чтобы написать LLVM фронт-энды для бинарных файлов, так что LLVM фонового может генерировать код для любой поддерживаемой платформы. Есть активный фронт ARMv6, и я уверен, что они хотели бы иметь с ним помощь. Целью является поддержка как эмуляции, так и статической перекомпиляции между любой из поддерживаемых архитектур.

1

Вы можете перепрограммировать код ARM на C, а затем просто скомпилировать код C. This company действительно производит довольно хороший код кода C от ассемблера. (Я никогда не использовал их продукт, но я знаком с исследованиями, стоящими за этой компанией).

1

Эмуляция или статический бинарный перевод - это пути, которые я бы взял, каждый из которых имеет свои плюсы и минусы.

Вам нужно быть более ясными о том, что вы просите. Простой перевод одного набора команд в другое - это одно, более сложная часть полезного результата - это то, к чему вы обращаетесь. Ваше пространство памяти и регистра ARM не будет соответствовать X86, поэтому прямой инструкции для команды (эмулировать или sbt) будет недостаточно, вам нужно добавить код, чтобы заменить многие из загрузок и хранилищ на что-то, что проверяет адрес, определяет, что он обращается и подражает этому периферийному (эмулируемому или sbt).

0

Самый простой способ сделать это - использовать что-то под названием «Программный динамический перевод». Вы можете найти информацию о технике здесь:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.120.5182&rep=rep1&type=pdf

Он работает динамически перевод «основные блоки», где вы переводите все инструкции до пункта управления (филиал, звонок, скачки), а затем заменить код в цехах филиала с заглушками, которые возвращаются в переводчик. Это примерно эквивалентно чем-то вроде «JIT Compilation» в CLR, за исключением того, что он работает на более узком уровне (базовые блоки вместо методов). Это выгодно по сравнению с подходами статического перевода, поскольку оно не зависит от точной разборки. Приобретение идеальной разборки невозможно (это эквивалентно проблеме остановки). Даже у действительно хороших дизассемблеров, таких как IDA pro, могут быть проблемы с определением таких вещей, как обработчики исключений, и часто путать код с данными.

Программный динамический перевод, однако, не подпадает под действие каких-либо из этих ограничений. Он может даже (теоретически) обрабатывать саморедактирующий код, используя соответствующие методы защиты памяти.

0

microsoft предоставляет эмулятор устройства, который делает именно это. первая версия даже поставляется с исходным кодом: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=10865

+0

Эта ссылка не работает. – Scruffy

+0

У меня все еще была копия - вот она: https://file.io/2adOYs –

+0

Это тоже дает мне 404, тоже ... – Scruffy