Heim >Backend-Entwicklung >C++ >Wie generiert man Assembler-Code aus C/C mit GCC und objdump?

Wie generiert man Assembler-Code aus C/C mit GCC und objdump?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-27 02:48:14541Durchsuche

How to Generate Assembly Code from C/C   using GCC and objdump?

So geben Sie Assembler-Code aus einer C/C-Quelle in GCC aus

Bei der Analyse von kompiliertem Code ist der Zugriff auf den generierten Assembler-Code unerlässlich. In GCC kann dies mit der Option „-S“ erreicht werden.

Mit der Option -S

Standardmäßig führt „-S“ den Präprozessor auf dem aus Quelldatei, führt die erste Kompilierung durch, stoppt jedoch vor dem Aufruf des Assemblers. In Kombination mit „-fverbose-asm“ verknüpft diese Option C-Code als Kommentar mit dem Assembler-Code, was besonders nützlich auf der Optimierungsebene -O0 ist.

gcc -S helloworld.c

Ausgabedatei anpassen

Die Ausgabedatei wird normalerweise nach der Quelldatei mit der Erweiterung .s benannt. Um den Speicherort der Ausgabedatei anzupassen, verwenden Sie die Option „-o“:

gcc -S -o my_asm_output.s helloworld.c

Alternativ können Sie die Ausgabe an die Konsole durchführen, indem Sie „-o -“ verwenden:

gcc -S -o - helloworld.c | less

Auf Assembly für ausführbare Objekte zugreifen

Wenn Sie nicht über den ursprünglichen Quellcode, aber über die Objektdatei verfügen, verwenden Sie objdump mit der Option „--disassemble“ (-d):

objdump -S --disassemble helloworld > helloworld.dump

Aktivieren Sie das Debuggen in der Originalkompilierung (-g) für eine verbesserte Disassembly-Ausgabe mit Quellzeilenverweisen.

Zusätzliche Objdump-Optionen

Erwägen Sie die Verwendung dieser Objdump-Optionen für detailliertere Informationen Analyse:

  • -rwC: Symbolverschiebungen, Zeilenumbruch deaktivieren und C-Namen entwirren
  • -Mintel: Intel-Syntax für x86-Disassemblierung

Für Beispielsweise liefert der folgende Befehl eine umfangreiche Disassemblierungsausgabe:

objdump -drwC -Mintel -S foo.o | less

Denken Sie daran, „-r“ ist Entscheidend für die Anzeige von Symbolverweisen in einer .o-Datei mit Platzhaltern.

Das obige ist der detaillierte Inhalt vonWie generiert man Assembler-Code aus C/C mit GCC und objdump?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn