2010-05-07 15 views
7

Für mein kleines Hobby-Projekt muss ich Maschinencode aus C++ - Programm in Runtime ausgeben. Ich habe Adresse 0xDEADBEEF Basis und will so etwas schreiben:Gibt es eine Art Laufzeit-C++ - Assembler-Bibliothek?

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

Inline-Assembler nicht meine Wahl ist, weil erzeugte Maschinencode abhängig von dem Programmzustand ist.

Kennt jemand eine vorhandene Bibliothek dafür? Wenn nein, wäre es eine gute Idee, eine von Grund auf neu zu entwickeln und Open Source zu machen? (Ich meine, wird jemand jemals diese Bibliothek verwenden, wenn sie existiert?)

Antwort

3

Sie könnten Nicolas Capen des softwire verwenden. Es wird wirklich nicht mehr unterstützt, da er jetzt an einem ähnlichen Produkt bei Transgaming namens SoftAsm arbeitet. Trotzdem macht es was du willst.

Bearbeiten Juni 2014: - Es scheint, dass der obige Link zu sourceforge entfernt wurde, aber offenbar unter einer LGPL-Lizenz here verfügbar ist.

+0

Diese Antwort ist nicht mehr aktuell. Zumindest kann ich auf dieser Seite keine Downloads finden –

3

Dies könnte ein Overkill sein, weil es viele Plattformen unterstützt, hat seine eigene Zwischensprache, tut Optimierungen, etc., aber die http://llvm.org/ scheint ein Gott zu sein Versuchen.

+1

dass ein cooles Projekt ist, aber es ist zu Schwergewicht und (soweit ich verstehe) nicht geben Sie mir eine genaue Kontrolle über erzeugten Anweisungen. Danke trotzdem. – Anton

7

prüfen Asmjit aus. Es scheint das Ding zu sein, nach dem du suchst.

Verwandte Themen