Assembler Code aus *.C erstellen

Hallo allerseits,

ich habe eine Testdatei, in der ich eine Laufzeit validiere. Nun möchte ich zusätzlich in den ASM-Code gucken und würde gerne die verwendeten Funktionen nachvollziehen können. Aktuell baue ich die ASM-Datei exakt so, wie die Outputdateien (gleiche Befehle), jedoch mit einem "-S" und "-o test.asm"

Innerhalb der ASM tragen die "Adressen" (Korrekte Bezeichnung für den Sprung-Trigger?) nun Namen, wie "LVL-0" bis 80 oder höher, und ähnliche Bezeichnungen.

Gibt es eine Möglichkeit als Sprungbezeichner die Funktionsnamen zu nutzen? Ich hänge mal den ASM-Code an. Verwendet wird eine Funktion "GF_p_mult", diese führt eine Polynommultiplikation mit anschließendem Aufruf von "mult_mod_p" aus. Ich würde gerne sehen, wie diese Funktionen in ASM übersetzt werden.

Da die Datei etwas zu groß zum Anhängen ist, hier ein Dropboxlink auf den Ordner, der die Datei enthält.
Dropbox - asm


EDIT:
Die datei "test.c" nutzt Funktionen aus einer anderen C-Funktion. Sagen wir: funktionen.c
Theoretisch ist ja
Code:
gcc -S test.c -o test.asm
die Option für ASM. Ich würde aber gerne exakt den Code betrachten, den meine Funktionen erzeugen, bei meiner "Compiler-Optionenliste". Da ich hier genauer sehen kann, warum eine Funktion so teuer ist..
 
Zuletzt bearbeitet:
Hallo allerseits,

ich habe eine Testdatei, in der ich eine Laufzeit validiere. Nun möchte ich zusätzlich in den ASM-Code gucken und würde gerne die verwendeten Funktionen nachvollziehen können. Aktuell baue ich die ASM-Datei exakt so, wie die Outputdateien (gleiche Befehle), jedoch mit einem "-S" und "-o test.asm"
gcc -fverbose-asm -S -masm=intel
Wurde zudem in gcc 7 ziemlich verbessert:
GCC 7 Release Series — Changes, New Features, and Fixes
- GNU Project - Free Software Foundation (FSF)

Code:
-fverbose-asm now gives output similar to this for the function body (when compiling for x86_64, with -Os):
       .text
       .globl  test
       .type   test, @@function
test:
.LFB0:
       .cfi_startproc
# example.c:4:   int total = 0;
       xorl    %eax, %eax      # <retval>
# example.c:6:   for (i = 0; i < n; i++)
       xorl    %edx, %edx      # i
.L2:
# example.c:6:   for (i = 0; i < n; i++)
       cmpl    %edi, %edx      # n, i
       jge     .L5     #,


Alternativ:
gcc -g -c mycode.c
objdump -M intel -d -S mycode.o
Allerdings, sobald -O2 im Spiel ist, passt die Ausgabe von gcc 5/6 vorn und hinten nicht.
Clang liefert hier wesentlich bessere Ergebnisse.
 
Zurück
Oben