Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » gcc->Assemblyausgabe mit C-Quellcode

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.01.2009, 11:05 Uhr
~dabudai
Gast


Hi,

besteht beim gcc die Möglichkeit den C-Code beim kompilieren in Assembler, den c-Code mit einzufügen, das man sieht wo er was macht?
Bei Visual Express besteht die Möglichkeit.
Wie sieht es beim gcc aus?

Gruß

dabudai
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.01.2009, 13:49 Uhr
~adskjlfl
Gast


Wie geht das denn beim Visual Studio?

Also beim gcc kenn ich nur diesen Befehl:

Code:
gcc -S -o file.s file.c



Da wird dann nur kompiliert, nicht aber gelinkt und assembliert. Der C Code wird allerdings nicht dazugschrieben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.01.2009, 14:14 Uhr
~dabudai
Gast


Denn Befehl bei gcc kenn ich auch, dann habe ich allerdings nur den Assembler Code, ohne den C-Code als Kommentar.

Bei Visual Studio rechte Maustaste auf das Projekt->Eigenschaften

->Konfigurationseigenschaften->C/c++->Ausgabedateien->Assembleyausgabe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.01.2009, 14:50 Uhr
Hans
Library Walker
(Operator)


Hi,

laut diesem Buch (klick) gibt es noch die Option -E, die den Compiler anweisst, keine Kommentare zu verwerfen. Demnach müsste die Kommandozeile so aussehen:

Code:
gcc -S -E -o file.s file.c


Vielleicht ist das ja die Lösung des Problems. (Kann es selber nicht ausprobieren, weil ich keinen gcc installiert habe.)

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 18.01.2009 um 15:06 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.01.2009, 17:28 Uhr
0xdeadbeef
Gott
(Operator)


-E sagt dem Compiler, dass er aufhören soll, sobald der Präprozessor fertig ist.

Ich bin mir nicht sicher, ob ein solches Feature existiert, weil ich das VC-Feature nicht kenne. ICh habe aber so meine Zweifel; gerade in optimiertem asm-Code mit inline-Funktionen und allem, was da so zusammenkommt, dürfte das schnell ziemlich unübersichtlich werden. Vielleicht findest du unter den RTL-Dump-Optionen etwas, was dir weiterhilft, frag mal deine Manpage (Option -dA ff.).
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.01.2009, 18:19 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von 0xdeadbeef:
-E sagt dem Compiler, dass er aufhören soll, sobald der Präprozessor fertig ist.

das hab ich inzwischen auch heraus gefunden (Klick!). Demnach ist das Büchlein inzwischen wohl arg überholt. - Ist ja auch erst 10 Jahre alt...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.01.2009, 21:25 Uhr
Hans
Library Walker
(Operator)


Hi,

vom Borlandcompiler (Kommandozeilenversion) kenn ich noch die Option -B, die ebenfalls dazu dient, Assemblerquelltext zu erzeugen, wobei die jeweils übersetzten C-Codezeilen als Kommentar davor stehen. Das sieht dann z.B. so aus:

Code:
    .386p
    ifdef ??version
    if    ??version GT 500H
    .mmx
    endif
    endif
    model flat
    ifndef    ??version
    endm
    endif
_TEXT    segment dword public use32 'CODE'
_TEXT    ends
_DATA    segment dword public use32 'DATA'
_DATA    ends
_BSS    segment dword public use32 'BSS'
_BSS    ends
DGROUP    group    _BSS,_DATA
_TEXT    segment dword public use32 'CODE'
_main    proc    near
?live1@0:
   ;    
   ;    int main()
   ;    
    push      ebp
    mov       ebp,esp
   ;    
   ;    {
   ;       printf("Hallo, World\n");
   ;    
@1:
    push      offset s@
    call      _printf
    pop       ecx
   ;    
   ;    
   ;       return 0;
   ;    
    xor       eax,eax
   ;    
   ;    }
   ;    
@3:
@2:
    pop       ebp
    ret
_main    endp
_TEXT    ends
_DATA    segment dword public use32 'DATA'
s@    label    byte
    ;    s@+0:
    db    "Hallo, World",10,0
    align    4
_DATA    ends
_TEXT    segment dword public use32 'CODE'
_TEXT    ends
    public    _main
extrn   _printf:near
    end


(Das ist das klassische "Hello World" nach K&R.)

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 18.01.2009 um 21:29 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.01.2009, 16:15 Uhr
Pablo
Supertux
(Operator)


-g CFLAGS in gcc setzen und die Binaries nicht über strip laufen lassen.

Mit 'objdump -D -S <object Datei bzw. binary>' bekommst du den Assembler code mit dem beigefügten Code.

Für

C++:
#include <stdio.h>

int main(void)
{
    printf("Hello World\n");
    return 0;
}



kommt bspsweise sowas aus:


Code:
...
080483b4 <main>:
#include <stdio.h>

int main(void)
{
80483b4:    8d 4c 24 04              lea    0x4(%esp),%ecx
80483b8:    83 e4 f0                 and    $0xfffffff0,%esp
80483bb:    ff 71 fc                 pushl  -0x4(%ecx)
80483be:    55                       push   %ebp
80483bf:    89 e5                    mov    %esp,%ebp
80483c1:    51                       push   %ecx
80483c2:    83 ec 04                 sub    $0x4,%esp
    printf("Hello World\n");
80483c5:    83 ec 0c                 sub    $0xc,%esp
80483c8:    68 c8 84 04 08           push   $0x80484c8
80483cd:    e8 2a ff ff ff           call   80482fc <puts@plt>
80483d2:    83 c4 10                 add    $0x10,%esp
    return 0;
80483d5:    b8 00 00 00 00           mov    $0x0,%eax
}
80483da:    8b 4d fc                 mov    -0x4(%ebp),%ecx
...


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: