Editor Fachwissen bezüglich c unter Linux



  • Richtig ! Allerdings kommt jetzt die Meldung:

    sokonord@ubuntu:~/Arbeitsfläche/Trplc$ objdump -D Groessenvergl.s
    sokonord@ubuntu:~/Arbeitsfläche/Trplc$ objdump -D Groessenvergl.exe
    objdump: 'Groessenvergl.exe': No such file
    sokonord@ubuntu:~/Arbeitsfläche/Trplc$ 
    
    ??...
    
    bzw.:
    sokonord@ubuntu:~/Arbeitsfläche/Trplc$ objdump -D Groessenvergl.s
    sokonord@ubuntu:~/Arbeitsfläche/Trplc$
    

    keine Ausgabe?

    Zu Veranschaulichung das Vz:

    sokonord@ubuntu:~/Arbeitsfläche/Trplc$ ls
    a.out                    endlicherzahlenkfunc2.c~      Groessenvergl2.c~       pointerschalter3.c~
    array2.c                 endlicherzahlenkfunc.c        Groessenvergl.c         pointerschalter.c~
    array2.c~                endlicherzahlenkfunc.c~       Groessenvergl.c~        struct2.c
    array.c                  Entscheidungsstruktur2.c      Groessenvergl.s         struct2.c~
    array.c~                 Entscheidungsstruktur2.c~     kalender2.c             struct.c
    do_Schleife2.c           Entscheidungsstruktur.c       kalender2.c~            struct.c~
    do_Schleife.c            Entscheidungsstruktur.c~      kalender.c              test.c
    do_Schleife.c~           Formelimpl Zinsen extern2.c~  kalender.c~             test.c~
    endlicherzahlenk2.c      gesch_Schleife2.c             kalenderTrpl.c~         zinsberechnung2.c
    endlicherzahlenk2.c~     gesch_Schleife.c              pointermechanik.c~      zinsberechnung.c
    endlicherzahlenk.c       Gleichungsalgorithmus2.c      pointermechanikTrpl.c~  zinsen2.c
    endlicherzahlenk.c~      Gleichungsalgorithmus.c       pointerschalter2.c~     zinsen2.c~
    endlicherzahlenkfunc2.c  Groessenvergl2.c              pointerschalter3-1.c~   zinsen.c
    sokonord@ubuntu:~/Arbeitsfläche/Trplc$ objdump -D Groessenvergl.s
    sokonord@ubuntu:~/Arbeitsfläche/Trplc$ objdump -D Groessenvergl.exe
    objdump: 'Groessenvergl.exe': No such file
    sokonord@ubuntu:~/Arbeitsfläche/Trplc$
    


  • du musst natürlich zuerst das programm kompilieren.

    unter ubuntu gibt es keine exe dateien.



  • "a.out"? Gibt das einfach mal ein...



  • Hallo liebe Freunde der Programmiersprachen, Ich habe das Problem mit eurer Hilfe ---vorerst--- so gelöst:

    gcc -S Groessenvergl.c
      objdump -D Groessenvergl.s
      as -o Groessenvergl.o Groessenvergl.s
      ld -o Groessenvergl.x Groessenvergl.o
      ./Groessenvergl.x
        cat Groessenvergl.s
    

    Welche der Systemanweisungen vor der mit letzten mit cat... entscheidend ist muss
    Ich noch durchtesten. In As habe Ich zwar kein lauffähiges Programm erhalten,
    Der AS fragt nach der Funktiona scanf... aber Ich erhalte folgende Ausgabe mit
    dem letzten Befehl cat nach

    sokonord@ubuntu:~/Arbeitsfläche/Trplc$ cat Groessenvergl.s
    	.file	"Groessenvergl.c"
    	.section	.rodata
    .LC0:
    	.string	"x eingeben: "
    .LC1:
    	.string	"%i"
    .LC2:
    	.string	"y eingeben: "
    .LC3:
    	.string	"z eingeben: "
    .LC4:
    	.string	"Die groesste Zahl ist %i \n"
    	.text
    	.globl	main
    	.type	main, @function
    main:
    .LFB0:
    	.cfi_startproc
    	pushl	%ebp
    	.cfi_def_cfa_offset 8
    	.cfi_offset 5, -8
    	movl	%esp, %ebp
    	.cfi_def_cfa_register 5
    	andl	$-16, %esp
    	subl	$32, %esp
    	movl	$.LC0, %eax
    	movl	%eax, (%esp)
    	call	printf
    	movl	$.LC1, %eax
    	leal	20(%esp), %edx
    	movl	%edx, 4(%esp)
    	movl	%eax, (%esp)
    	call	__isoc99_scanf
    	movl	$.LC2, %eax
    	movl	%eax, (%esp)
    	call	printf
    	movl	$.LC1, %eax
    	leal	24(%esp), %edx
    	movl	%edx, 4(%esp)
    	movl	%eax, (%esp)
    	call	__isoc99_scanf
    	movl	$.LC3, %eax
    	movl	%eax, (%esp)
    	call	printf
    	movl	$.LC1, %eax
    	leal	28(%esp), %edx
    	movl	%edx, 4(%esp)
    	movl	%eax, (%esp)
    	call	__isoc99_scanf
    	movl	20(%esp), %edx
    	movl	24(%esp), %eax
    	cmpl	%eax, %edx
    	jle	.L2
    	movl	28(%esp), %edx
    	movl	20(%esp), %eax
    	cmpl	%eax, %edx
    	cmovge	%edx, %eax
    	jmp	.L3
    .L2:
    	movl	28(%esp), %edx
    	movl	24(%esp), %eax
    	cmpl	%eax, %edx
    	cmovge	%edx, %eax
    .L3:
    	movl	$.LC4, %edx
    	movl	%eax, 4(%esp)
    	movl	%edx, (%esp)
    	call	printf
    	leave
    	.cfi_restore 5
    	.cfi_def_cfa 4, 4
    	ret
    	.cfi_endproc
    .LFE0:
    	.size	main, .-main
    	.ident	"GCC: (Ubuntu/Linaro 4.6.2-7ubuntu1) 4.6.2"
    	.section	.note.GNU-stack,"",@progbits
    

    Da muss man wohl bisschen dran arbeiten... Danke für die Tipps!



  • Hö?

    Du weißt doch hoffentlich, dass du diese Schritte nicht alle selbst machen musst, oder?

    gcc Groessenvergleich.c -o Groessenvergleich.x

    Und schon hast du deine executable.



  • Und was soll der Aufruf
    objdump -D Groessenvergl.s

    Du scheinst nicht genau zu verstehen, Groessenvergl.s ist eine TEXTDATEI, die du mit jedem x-beliebigen Texteditor öffnen und betrachten kannst.

    objdump prüft BINÄRDATEIEN.
    Du muss zuerst das Programm kompilieren und kannst am Ende das PROGRAMM (!!!) mit objdump auseinandernehmen.

    Außerdem brauchst du eigentlich garnicht den assembler-output. Das macht alles der gcc für dich.



  • Es ging mir ursprünglich darum ein c Programm in As Code auszugeben, weil Ich davon ausgegangen bin, dass C sich in As auflöst.

    "Definition: DerAssembler ist ein Übersetzter für Befehle in Maschinensprache
    Ein Befehl in einer höheren Sprache ist eine Gruppe von Befehlen in Maschinen-
    sprache bzw. Assembler."
    Dies hatte Ich am Anfang des Diskussionstitels mit dem c-Programm erklärt.

    Die von dir in der letzten Anmerkung zitierte durchaus richtige Terminalanweisung
    für den C-Compiler

    gcc Groessenvergleich.c -o Groessenvergleich.x
    

    tut dies nicht . In dem jeweiligen Verzeichnis wird kein
    Programm/Datei mit der Endung Groessenvergleich.s erzeugt sondern der Befehl den Teilnehmer Elise mir vorschlug mit

    gcc -S Groessenvergl.c
    

    erzeugt diese Datei erst.
    Nun hatte Ich aber das Problem, das Ich diese so gezeugte Datei nicht mit dem
    Befehl cat im Terminal

    cat Groessenvergl.s
    

    und auch nicht durch einen Editor --konkret gedit-- öffnen konnte,
    die Anmerkung von dir verstehe Ich , Ich hatte versucht diese Datei mit gedit
    zu öffnen -- ging nicht ?
    erst nachdem Ich die so gezeugte Assembler Datei
    mit den Terminal Anweisungen

    1.
    objdump -D Groessenvergl.s
    
    2.
    as -o Groessenvergl.o Groessenvergl.s
    ld -o Groessenvergl.x Groessenvergl.o
    

    (eine Datei xyz.s muss ja dafür existieren) habe convertieren lassen;
    funktionierte das Anzeigen mit dem Terminal Befehl cat ...
    Welche der Anweisungen entscheidend war weiss Ich nicht aber, es hat erst danach
    funktioniert.
    Warum ? Keine Ahnung ...



  • Ich habe Abends nochmal in Ruhe am Rechner gearbeitet und muss dem
    Sozialistischen Demokraten recht geben ,die

    mit dem Befehl gcc -S Groessenvergleich.c
    gezeugte Datei lässt sich schon in erster Instanz mit Gedit anzeigen

    War also wohl ein Fehler von mir oder das netbook hats nicht gepackt sorry

    (Anders gesagt:
    Mir ging es eingentlich nur darum, ein c-Programm als Assembler Quelltext
    darzustellen , weil Ich davon ausgehe, dass sich laut Definitionen, die
    Befehle und Funktionen von C in Assembler Befehle auflösen ! ?)



  • also:

    wenn du dein c programm als assembler code sehen willst:
    gcc -S datei.c

    danach führst du immer selbst diese as und ld schritte aus, das brauchst du aber nicht, das macht alles der gcc für dich:
    gcc datei.c -o datei.x

    anschließend kannst du das programm "datei.x" mit objdump disassemblen:
    objdump -D datei.x

    alles klar? 😉



  • Ja Danke!!


Anmelden zum Antworten