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
Freigeben: 2024-12-27 02:48:14
Original
537 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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

gcc -S -o - helloworld.c | less
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage