Frage

Wie kann ich den Assembler-Code für ein C ++ Programm sehen?

Was sind die beliebten Tools, dies zu tun?

War es hilfreich?

Lösung

Stellen Sie den Compiler

Wenn Sie das Programm selbst erstellen, können Sie Ihre Compiler fragen Montage Quelle zu emittieren. Für die meisten UNIX-Compiler verwenden, um die -S Schalter.

  • Wenn Sie die GNU Assembler verwenden, mit -g -Wa,-alh Kompilieren geben mischten Quelle und Montage auf stdout (-Wa Compiler-Treiber fragt Optionen Assembler passieren, -al schaltet Assembler-Liste, und -ah fügt hinzu: „High-Level-Quelle "Auflistung):

    g++ -g -c -Wa,-alh foo.cc

  • Für Visual Studio verwenden /FAsc .

Peek in die binären

Wenn Sie binäre kompiliert,

Verwenden des Debugger

Debuggers konnten zeigen, auch disassebly.

Andere Tipps

In GCC / G ++ kompiliert mit -S. Das wird eine Ausgabe something.s Datei mit dem Assembler-Code.

Edit:. Wenn Sie die Ausgabe wollen in Intel-Syntax zu sein (was IMO, viel besser lesbar ist und die meisten Montage Tutorials verwenden Sie es), kompilieren mit -masm=intel

In Visual Studio ;

  1. ein Haltepunkt
  2. starten Sie das Programm, bis es an dem Haltepunkt stoppt
  3. Rechtsklick auf den Sourcecode und "Show dissasembly" Pick

Für gcc / g ++

gcc -save-temps -fverbose-asm prog.c

Dies wird in jeder asm Linie verwendet prog.s mit einigen Kommentaren auf Variablen erzeugen:

    movl    $42, -24(%ebp)  #, readme
    movl    -16(%ebp), %eax # pid, pid
    movl    %eax, 4(%esp)   # pid,
    movl    $.LC0, (%esp)   #,
    call    printf  #

Viele Leute schon gesagt, wie man mit einem bestimmten Compiler Assembler-Code emittieren. Eine andere Lösung ist eine Objektdatei zu kompilieren und entleeren sie mit einem Werkzeug, wie objdump , readelf (unter Unix) oder DUMPBIN (< a href = "http://msdn.microsoft.com/en-us/library/756as972(VS.80).aspx" rel = "noreferrer"> link ) (unter Windows). Sie können auch eine ausführbare Dump, aber es wird immer schwieriger, die Ausgabe zu lesen.

Dies hat den Vorteil, dass die gleiche Art und Weise mit jedem Compiler arbeiten.

Was den Debugger Sie verwenden sollten eine Montageansicht haben (Visual Studio, Borland IDE, GDB, etc.). Wenn Sie nicht einen Debugger verwenden und nur wollen, um zu sehen, welche Baugruppe in einem Programm ist, können Sie einen Disassembler verwenden oder alternativ das Programm auszuführen und um es mit einem Debugger anhang und von dort aus dem Dump tun. Siehe Verweise auf Disassembler für Informationen zu den Optionen.

Als jemand anders erwähnt, Debugger für ihre Plattform ist ein guter Ausgangspunkt. Für den Bohrhammer aller Debugger und Disassembler, werfen Sie einen Blick auf IDA Pro.

Auf Unix / Linux-Plattformen (einschließlich Cygwin) Sie können objdump --disassemble <executable> verwenden.

Die meisten Compiler haben eine Option zur Ausgabe einer Assembler-Liste. Z.B. mit Visual Studio können Sie so etwas wie verwenden:

cl.exe /FAfile.asm file.c

Für eine optimale Lesbarkeit obwohl die meisten Debugger einen Blick bieten, die die Demontage mit der ursprünglichen Quelle verschachtelt, so dass Sie Ihren Code mit dem Compiler die Ausgabe Zeile für Zeile vergleichen.

PE Explorer Disassembler für 32-Bit-PE-Dateien. IDA für andere.

Sie können auch diese Website versuchen: http://assembly.ynh.io/

Dort können Sie Ihre C oder C ++ Code einfügen und eine blaue Taste drücken Sie die Montage gleichwertig zu sehen.

In Visual Studio können Sie den Assembler generieren für ein C ++ Projekt auflistet.

Zum Eigenschaft projizieren, dann auf C ++ / Ausgabedateien und Assembler Output Einstellung und ASM Liste Standort auf einen Dateinamen festgelegt.

auf einer Intel-Mac OS X 10.8 (Mountain Lion) die -masm=intel Richtlinie nicht funktionierte. Wenn Sie jedoch haben Xcode installiert , sollte es das Tool namens 'otool' installiert haben:

otool code.o -tV

Sie haben den kompilierten Objektcode als Parameter zur Verfügung zu stellen.

Wenn Sie eine Eclipse-Nutzer sind, können Sie die Ausbau Ansicht .

  

Die Demontage-Ansicht zeigt das geladene Programm als Assembler   mit Quellcode zum Vergleich gemischt Anweisungen. die aktuell   Ausführen Linie ist durch einen Pfeil markiert und Markierung in den angegebenen   Aussicht. Sie können die folgenden Aufgaben in der Demontage Ansicht tun:

     
      
  • Set-Haltepunkte zu Beginn jeden Assemblerbefehls
  •   
  • Aktivieren und Deaktivieren von Haltepunkten und ihre deren Eigenschaften festlegen
  •   
  • Schritt durch die Zerlegeanleitung Ihres Programms
  •   
  • Wechsel zu spezifischen Anweisungen im Programm
  •   
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top