Autor Thema: Batch - Dateiverwaltung  (Gelesen 19447 mal)

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 03. January 2013, 14:55 »
Ja, ein C-Compiler kann auch Assembler-Quelltext hinten rauswerfen, statt ein Objectfile draus zu bauen. Nein, es ist nicht sinnvoll, da durch die Optimierungen der erzeugte Code meist sehr schwer verständlich ist. Wenn du den Code ohne Optimierungen erzeugen lässt, ist er langsam.

Der vollständige Weg, um Quelltext in Binär zu verwandeln, ist folgender:
ASM-Quelltext -> Assembler -> Object (Datei) -> Linker -> Binary (Datei)
C-Quelltext -> Compiler -> Object (Datei) -> Linker -> Binary (Datei)

Du benutzt wahrscheinlich den kürzeren Weg ASM-Quelltext -> Assembler -> Binary, wenn es nur eine Quelltextdatei (oder mehrere, die mit INCLUDEs eingebunden werden) gibt. Der ist für komplexere Projekte nicht mehr besonders sinnvoll.

Lerne C.

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 03. January 2013, 15:05 »
Ich habe doch mal hier im Thema irgendwo gelesen dass ein C compiler den C code in Assembler verwandelt, wenn ich es richtig verstanden habe.
C -> Assembler -> 101 ist es so richtig?
Der gcc macht das. Eine menschenlesbare Form des Maschinencodes(Assembler) zwischen zu schalten ist aber nicht zwingend notwendig, da im normal Fall ja kein Mensch mehr drüber schaut. Andere Compiler machen das also gegebenenfalls anders.
Zitat
wenn ja könnte man dann dazwischen den Assembler teil abzapfen? sozusagen dass man C in Asm umwandeln kann. Dass würde doch theoretisch gehen, und wäre praktisch :D Oder gibt es sowas schon als richtiges Programm?
Bei gcc ist das Abzapfen kein Problem. "gcc -S" und je nach dem wie sehr du deinen C-Code wieder erkennen willst noch die passenden Optimierungsflags. (siehe unten).
Aber da Assembler ja wie gesagt nur eine menschenlesbare Form von Maschinencode ist, kann man sich den generierten Code immer auch wieder von einem Disassembler zurück dolmetschen lassen. Mit ein paar Abstrichen bei der Lesbarkeit, da z. B. ein jz und ein je das selbe sind, und Lebles zum Großteil fehlen.

Beispielsweise generiert dir "gcc -S -O3" für ein
Code: (test.c) [Auswählen]
int div10(int a) { return a / 10; }
Code: (test.s) [Auswählen]
.file "test.c"
.text
.p2align 4,,15
.globl div10
.type div10, @function
div10:
.LFB0:
.cfi_startproc               ; [EDIT] nach Intel-Syntax übersetzt
movl %edi, %eax           ; mov eax, edi
movl $1717986919, %edx    ; mov edx, 1717986919
sarl $31, %edi            ; sar edi, 31
imull %edx                 ; imul edx
sarl $2, %edx             ; sar edx, 2
subl %edi, %edx           ; sub edx, edi
movl %edx, %eax           ; mov eax, edx
ret
.cfi_endproc
.LFE0:
.size div10, .-div10
.ident "GCC: (GNU) 4.7.2 20120921 (Red Hat 4.7.2-2)"
.section .note.GNU-stack,"",@progbits
Ab und zu guck ich mir mal den generierten Code an, aber sinnvoll damit arbeiten kann man IMO nicht wirklich.

Und wegen der Performance C vs. ASM: der Generierte Code ist mit Sicherheit besser als ein "div". Wärst du darauf gekommen?
« Letzte Änderung: 03. January 2013, 15:23 von MNemo »
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 03. January 2013, 21:29 »
geht auch mit:
objdump -d XYZ.o :-D

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 03. January 2013, 22:27 »
Lerne C.
Ich kann das nur bestätigen.
Zitat von: Linus Torvalds(Linux Erfinder)
Ein Problem lässt sich in C 100 mal schneller lösen als in Assembler
(oder so was ähnliches ^^)
Mehr muss ich dazu nicht sagen.

Oder vllt, dass man C auch 100mal schneller erlernen kann wie ASM. Die Syntax ähnelt teilweise sehr anderen High-Level Sprache(z.B Python, Java).

ASM Kenntnisse können trotzdem sehr hilfreich sein.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 04. January 2013, 15:12 »
Zitat
Oder vllt, dass man C auch 100mal schneller erlernen kann wie ASM.
TASM kann ich ja schon dass ist nicht dass Problem
Dass heist alles spricht dafür als nächstes C zu lernen, da ein OS pur aus ASM nicht viel Sinn macht.
Könnt ihr da evt. ein gutes buch empfehlen?

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 04. January 2013, 17:24 »
Hallo,


Dass heist alles spricht dafür als nächstes C zu lernen, da ein OS pur aus ASM nicht viel Sinn macht.
Ja.

Könnt ihr da evt. ein gutes buch empfehlen?
Auch wenn das hier wohl einige Leute anders sehen so empfehle ich da eher das man wenigstens mal ein paar normale Programme entwickelt (mit ansteigendem Schwierigkeitsgrad) um mit den erforderlichen Werkzeugen auch den sicheren Umgang zu üben bevor man sich an ein eigenes OS macht. Bücher über C gibt es ne Menge, wimre gab es da mal ne Liste im Wiki.


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

 

Einloggen