È disponibile un'istruzione ARM per il convertitore di istruzioni i386?Conversione istruzione ARM in istruzione i386
risposta
È possibile utilizzare QEMU per emulare le istruzioni ARM su x86.
ho davvero dei dubbi. ci sono troppe differenze per renderlo automatizzato.
Sono molto più vicini di, ad esempio, ANSI C e x86, ma ci sono molti programmi che fanno automaticamente questa conversione. – Ken
Niente affatto. ANSI C è progettato per compilare vari linguaggi assembler. Molti concetti (relativamente) di alto livello in C possono essere rappresentati in molti modi diversi in diversi assemblatori. Tra gli assemblatori, tuttavia, c'è una storia diversa. – Puppy
E 'molto in beta, ma l'idea è quello di scrivere LLVM front-end per i binari, in modo che la LLVM back-end può quindi generare il codice per qualsiasi piattaforma supportata. C'è un front end ARMv6 in fase di sviluppo attivo, e sono sicuro che vorrebbero avere aiuto con esso. L'obiettivo è supportare l'emulazione e la ricompilazione statica tra una qualsiasi delle architetture supportate.
È possibile eseguire il reverse-engineer del codice ARM su C, quindi compilare semplicemente il codice C. This company produce effettivamente codice codice C piuttosto buono dall'assemblatore. (Non ho mai usato il loro prodotto, ma ho familiarità con la ricerca dietro quella società).
L'emulazione o la traduzione binaria statica sono i percorsi da seguire, ognuno ha i suoi pro e contro.
È necessario essere più chiari su ciò che si sta chiedendo. La semplice traduzione di un set di istruzioni su un altro è una cosa, la parte più difficile di rendere il risultato utile è ciò che stai affrontando. La memoria e lo spazio di registrazione del tuo ARM non corrisponderanno all'X86, quindi un'istruzione diritta all'istruzione (emulata o sbt) non sarà sufficiente, devi aggiungere del codice per sostituire molti carichi e negozi con qualcosa che controlla l'indirizzo, determina cosa stava affrontando ed emula quella periferica (emulata o sbt).
Il modo più semplice per farlo consiste nell'utilizzare qualcosa chiamato "Traduzione dinamica del software". Potete trovare alcune informazioni sulla tecnica qui:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.120.5182&rep=rep1&type=pdf
Funziona traducendo dinamicamente "blocchi di base", in cui si traduce tutte le istruzioni fino ad un punto di controllo (filiale, chiamata, salto) e quindi sostituire il codice agli obiettivi delle filiali con stub che richiamano nel traduttore. È approssimativamente equivalente a qualcosa come "Compilazione JIT" nel CLR, tranne che funziona a un livello più granulare (blocchi di base invece di metodi). È vantaggioso rispetto agli approcci di traduzione statica perché non si basa su un disassemblaggio accurato. Non è possibile ottenere lo smontaggio perfetto (è equivalente al problema dell'arresto). Anche i veri disassemblatori, come IDA pro, possono avere problemi nell'identificare cose come i gestori di eccezioni e spesso confondono il codice con i dati.
La traduzione dinamica del software, tuttavia, non è soggetta a nessuna di queste limitazioni. Può anche (in teoria) gestire il codice auto modificante usando appropriate tecniche di protezione della memoria.
microsoft fornisce l'emulatore di dispositivo, che fa esattamente questo. la prima versione arriva anche con il codice sorgente: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=10865
- 1. Istruzione BIC
- 2. Istruzione JMP - Codice esadecimale
- 3. Richiedi istruzione in application.css.scss
- 4. Case in Select Istruzione
- 5. grep in istruzione IF
- 6. variabile 1 = ({istruzione 1; istruzione 2;}) in C
- 7. stessa istruzione di assemblaggio ma diversa istruzione macchina
- 8. Parentesi in django se istruzione
- 9. Istruzione dinamica simile in SQL
- 10. Istruzione GOTO in C# .NET
- 11. Istruzione vuota in T-SQL
- 12. metodi asincroni in istruzione using
- 13. istruzione MOV ripetendo x86
- 14. "use" istruzione php multiple?
- 15. Istruzione Inline If - cortocircuito
- 16. Istruzione SQL Select Dove
- 17. Eclipse "Imposta istruzione successiva"
- 18. Estendi istruzione DOP Classe
- 19. Istruzione Retq, dove restituisce
- 20. Istruzione blocco C#
- 21. Casella combinata se istruzione
- 22. Istruzione [Multi] DataTrigger "OR"?
- 23. Negate istruzione #available
- 24. PHP: limite foreach() istruzione?
- 25. Istruzione SQL multiplo join
- 26. Istruzione nidificata if else
- 27. Istruzione switch PHP()
- 28. Bash If istruzione null
- 29. mysql_query dove istruzione
- 30. Istruzione inserimenti JPA
Che cosa stai cercando di ottenere? –
Stai provando a eseguire solo il codice che hai (nel qual caso un buon emulatore) o stai provando a convertire un codice che hai ereditato da uno sviluppatore precedente e dove non hai la fonte? –
Mentre la conversione delle istruzioni da istruzioni ARM a x86 è tecnicamente possibile con un compilatore personalizzato (da ARM a IR a x86), ci sono altri ostacoli predominanti, un sistema operativo completamente diverso e librerie run-time che l'applicazione è progettata per comunicare con il quale non ha nulla a che fare con la conversione delle istruzioni. È più facile ricompilare l'applicazione per x86 e per il SO di destinazione. – tgiphil