von C zu Assembly

9

kann jemand bitte erklären, ich habe ein Programm auf C, kann ich es in Assembly konvertieren? Wenn ja, wie?

    
lego69 22.05.2010, 11:02
quelle

7 Antworten

21

Wenn Sie gcc verwenden, können Sie gcc -O2 -S -c foo.c nach dieser Seite aufrufen, um die Ausgabebaugruppe zu erhalten in einer von Menschen lesbaren Form.

    
Anders Abel 22.05.2010, 11:04
quelle
5

Mit gcc können Sie die Option -S verwenden:

%Vor%

Die meisten anderen Optionen (wie -O2 ) können hier ebenfalls verwendet werden, um zu bestimmen, welche Art von Assemblercode erzeugt wird.

Beachten Sie jedoch, dass dies lediglich einen Zwischenschritt darstellt, den der Compiler trotzdem durchläuft (nicht die Generierung einer Assembly-Quelldatei, sondern den Maschinencode, den sie darstellt). Das Endergebnis nach der Übergabe dieses Codes durch einen Assembler unterscheidet sich in keiner Weise von der direkten Kompilierung direkt in den Maschinencode.

    
Marcelo Cantos 22.05.2010 11:06
quelle
3

Dein Compiler sollte eine Option dafür haben. Für gcc können Sie beispielsweise die Option -S verwenden. Ein kurzes Beispiel:

%Vor%

Kompilieren Sie es mit der Option -S . Dadurch wird eine test.s-Datei erzeugt, die die Assembly enthält:

%Vor%     
Vijay Mathew 22.05.2010 11:07
quelle
3

Das macht dein Compiler.

Der Compiler kompiliert Ihr C-Programm zur Maschinensprache, die eine binäre Darstellung des Maschinenprogramms ist. Wenn ein Mensch eine Maschinensprache schreiben will, schreibt er sie in Assembler, was in die binäre Maschinensprache übersetzt wird.

Der Assembler-Code ist einfach eine von Menschen lesbare Form der binären Maschinensprache.

Das C-Programm:

%Vor%

kompilieren Sie es

%Vor%

zerlegen Sie es:

%Vor%     
Johannes Weiß 22.05.2010 11:04
quelle
1

Die meisten Compiler verfügen über eine Option zum Generieren von Assembly-Auflistungen zusammen mit den Binärdateien. In Visual Studio finden Sie es unter Abschnitt "Codegenerierung" in den Dateieigenschaften.
Mit gcc können Sie -S-Schalter (Großbuchstaben S) verwenden Schließlich, wenn Sie eine Binärdatei haben, können Sie objdump -S (Großbuchstaben S) verwenden.

    
garph0 22.05.2010 11:08
quelle
1

Da Sie Dev-C ++ erwähnt haben, ist es erwähnenswert, dass das Flag -S auch dort funktioniert. Unter Windows nimmt Dev-C ++ immer noch die Ausgabe .exe auf, aber das Ergebnis wird keine ausführbare Datei sein. Ändern Sie einfach die Erweiterung in .txt oder was auch immer, damit sie im Editor Ihrer Wahl gelesen werden kann. Fügen Sie Optionen / Markierungen unter Projekt & gt; Projekt Optionen & gt; Parameter & gt; Compiler oder Extras & gt; Compiler Optionen hinzu.

    
Evan H 22.05.2010 17:03
quelle
0

Siehe diese Frage . Diese Antwort kann hilfreich sein, wenn Sie beabsichtigen, die Baugruppe zu lesen . Sie können auch ein Programm kompilieren und dann disasm verwenden, um die Assembly-Ausgabe zu erhalten.

    
Yktula 22.05.2010 16:37
quelle

Tags und Links