suchmaschinen Wie kann ich den Assemblercode für ein C++-Programm sehen?



title tag definition (12)

In Visual Studio können Sie die Assemblerliste für ein C ++ - Projekt generieren.

Wechseln Sie zu den Projekteigenschaften, dann zu C ++ / Ausgabedateien, und legen Sie die Assembler-Ausgabeeinstellung und den Speicherort der ASM-Liste auf einen Dateinamen fest.

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

Was sind die beliebtesten Werkzeuge, um dies zu tun?


Answer #1

Auf einem Intel Mac OS X 10.8 (Mountain Lion) -masm=intel Anweisung -masm=intel nicht. Wenn Sie jedoch Xcode installiert haben, sollte das Tool "otool" installiert sein:

otool code.o -tV

Sie müssen den kompilierten Objektcode als Parameter angeben.


Answer #2

Sie können diese Seite auch ausprobieren: http://assembly.ynh.io/

Dort können Sie Ihren C- oder C ++ - Code einfügen und einen blauen Knopf drücken, um die assembly-äquivalente Version zu sehen.



Answer #4

Wie bereits erwähnt, ist der Debugger Ihrer Plattform ein guter Ausgangspunkt. Werfen Sie für den Presslufthammer aller Debugger und Disassembler einen Blick auf IDA Pro.

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


Answer #5

Viele Leute haben bereits gesagt, wie man Assemblercode mit einem gegebenen Compiler ausgibt. Eine andere Lösung besteht darin, eine Objektdatei zu kompilieren und sie mit einem Tool wie objdump , readelf (unter Unix) oder DUMPBIN ( link ) (unter Windows) abzulegen. Sie können auch eine ausführbare Datei ausgeben, aber es wird schwieriger, die Ausgabe zu lesen.

Dies hat den Vorteil, mit jedem Compiler gleich zu arbeiten.


Answer #6

Die meisten Compiler haben eine Option zum Ausgeben eines Assembly-Eintrags. Mit VisualStudio können Sie beispielsweise Folgendes verwenden:

cl.exe /FAfile.asm file.c

Für die beste Lesbarkeit bieten die meisten Debugger jedoch eine Ansicht, die die Disassemblierung mit der ursprünglichen Quelle verschachtelt, sodass Sie Ihren Code zeilenweise mit der Ausgabe des Compilers vergleichen können.



Answer #8

Für gcc / g ++

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

Dies erzeugt prog.s mit einigen Kommentaren zu Variablen, die in jeder asm-Zeile verwendet werden:

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

Answer #9

Kompilieren Sie in GCC / G ++ mit -S . Dadurch wird eine something.s Datei mit dem Assembly-Code ausgegeben.

Bearbeiten: Wenn Sie möchten, dass die Ausgabe in der Intel-Syntax ist (was IMO ist, viel besser lesbar, und die meisten Assembly-Tutorials verwenden es), kompilieren Sie mit -masm=intel .


Answer #10

In Visual Studio ;

  1. Setzen Sie einen Haltepunkt
  2. führe das Programm bis zum Haltepunkt aus
  3. rechtsklicke auf den Quellcode und wähle "show disasasembly"

Answer #11

Fragen Sie den Compiler

Wenn Sie das Programm selbst erstellen, können Sie Ihren Compiler bitten, eine Assembly-Quelle zu senden. Für die meisten UNIX-Compiler verwenden Sie den Schalter -S .

  • Wenn Sie den GNU-Assembler verwenden, kompilieren Sie mit -g -Wa,-alh gibt intermixed Quelle und Assembly auf stdout ( -Wa fragt den Compiler-Treiber, -Wa Optionen an Assembler -ah , -al schaltet die Assembly-Liste um und -ah fügt "high" hinzu -level Quelle "Auflistung):

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

  • Verwenden /FAsc für Visual Studio /FAsc .

Spähen Sie in die Binärdatei

Wenn Sie eine Binärdatei kompiliert haben,

Verwenden Sie Ihren Debugger

Debugger könnten auch disassembly zeigen.

  • Verwenden Sie den disas Befehl in GDB,
  • oder das Disassembly-Fenster von Visual Studio unter Windows.




disassembly