2010-05-07 12 views
7

Per il mio piccolo progetto per hobby ho bisogno di emettere codice macchina dal programma C++ in runtime. Ho l'indirizzo di base 0xDEADBEEF e voglia di scrivere qualcosa del genere:Esiste una specie di libreria di assemblaggio C++ di runtime?

Assembler a((void*)0xDEADBEEF); 
a.Emit() << 
    Push(Reg::Eax) << 
    Push(Reg::Ebx) << 
    Jmp(0xFEFEFEFE); 

Inline assembler non è la mia scelta perché codice macchina generato è dipendente dello stato del programma.

Qualcuno sa qualsiasi libreria esistente per fare questo? Se no, sarebbe una buona idea svilupparne uno da zero e renderlo open source? (Voglio dire, sarà nessuno mai usare questa libreria se esistesse?)

risposta

3

Si potrebbe utilizzare Nicolas Capen di softwire. In realtà non è più supportato poiché ora lavora su un prodotto simile a Transgaming chiamato SoftAsm. Ancora fa un po 'quello che vuoi.

Modifica giugno 2014: - Sembra che il link sourceforge sopra sia stato rimosso ma sembra essere disponibile con una licenza LGPL here.

+0

Questa risposta è obsoleta ora. Almeno non riesco a trovare alcun download su quella pagina –

3

questo potrebbe essere un eccessivo, perché supporta molte piattaforme, ha un proprio linguaggio intermedio, fa ottimizzazioni, ecc, ma la http://llvm.org/ sembra essere un dio provare.

+1

Questo è un progetto fresco, ma è troppo pesante e (per quanto ho capito) non mi dà un controllo preciso su istruzioni generate. Grazie comunque. – Anton

7

Partenza Asmjit. Sembra essere la cosa che stai cercando.

Problemi correlati