In welcher Assemblersprache wird C-Code in Visual Studio kompiliert?

8

Wenn ich ein C-Projekt debugge, kann ich alle Assemblercodes sehen, in die es kompiliert wird. Ich möchte wissen, welche Assemblersprache das ist. Ist es NASM oder MASM oder etwas anderes? Und wenn ich Inline-Assembly verwende, kann ich dann eine andere Assembler-Sprache verwenden?

    
Erik W 04.05.2015, 11:20
quelle

3 Antworten

6

Der Code, zu dem er kompiliert wird, ist nicht die Assembly, sondern der Code der geraden Maschine, zumindest nach Optimierungen der Link-Zeit. Was Sie beim Debuggen sehen, ist die Disassemblierung des aktuell ausgeführten Maschinencodes. Als solches hat es keine zusätzliche Struktur, wie Etiketten, Makros usw., so dass Sie erwarten würden, in High-Level-Assemblern zu finden, da diese zusätzlichen Informationen verloren gehen (oder genauer gesagt niemals vorhanden sind), wenn Maschinencode erzeugt wird .

Wenn Sie die Syntax gemeint haben, zeigt Visual Studio die Assemblydirektiven in der Intel-Syntax an, die sich von AT & amp; ; T-Syntax, die ein Standard mit GCC und GNU-Assembler ist.

Tatsächlich kann es auch Kauderwelsch sein. Wenn Sie jmp nicht ausgerichtet sind (x86-Anweisungen haben eine variable Länge) oder eine Region, die keinen ausführbaren Code, sondern Daten enthält, versucht der Disassembler, die Daten zu verstehen und zufällige Assembly-Anweisungen zu erzeugen, die Ich meine nichts.

Das ist eigentlich ziemlich üblich; Siehe zum Beispiel dieses Bild:

add byte ptr [rax], al ist die versuchte Zerlegung der Bytes 00 00 , was offensichtlich keinen tatsächlichen ausführbaren Code darstellt.

    
Tibor 04.05.2015, 11:45
quelle
2

MSVC kann Binärdateien für x86, x86_64, ARM und Itanium kompilieren. Es hängt also von Ihren Ziel- und Projekteinstellungen ab.

    
Lưu Vĩnh Phúc 04.05.2015 11:54
quelle
2

Für X86 oder X86-X64 enthält Visual Studio ML.EXE (MASM 6.00 und spätere Versionen wurden in ML.EXE umbenannt) für 32-Bit-Code und ML64.EXE für 64-Bit-Code. In einem VS-Projekt können Sie mit der rechten Maustaste auf einen Dateinamen klicken, dann Eigenschaften, ... Ausgabedateien, ... Baugruppenauflistung .... Die Befehlszeilenoption für die Assemblierungsliste ist / Fa. Obwohl Assembly Only-Auflistung genannt, wird Assembly-Code erstellt.

    
rcgldr 04.05.2015 15:33
quelle

Tags und Links