Heim >Backend-Entwicklung >C++ >Wie generiert man Assembler-Code aus C/C mit GCC und 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:
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!