Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - hrungaaz

Seiten: [1] 2
1
Lowlevel-Coding / Re:Assembler in VC++
« am: 20. October 2010, 21:44 »
Ich würde nicht unbedingt VC++ nehmen...
Ich glaube nämlich, dass man damit gar kein OS schreiben kann. MS will sich ja nicht selbst ruinieren.
Die Inline-Assembler sind auch fürn Po.

Ich empfehle dir: Nimm wie schon erwähnt einen Crosscompiler.
Und als Editor kann ich dir nur Notepad++ empfehlen, ist meiner Meinung nach der beste Editor unter Windows.

Wenn du unter Windows arbeitest, kann es durchaus sein, dass du erstmal Stundenlang an deiner Entwicklungsumgebung rumschraubst. Zumindest war es bei mir so. Aber wenn du erstmal verstehst, wie die Zahnräder inneinander greifen, läuft es schon.
Außerdem bringt das ne Menge Erfahrung für dich ein.
Ums Makefiles selberschreiben kommst du früher oder später sowieso nicht rum.
Makefiles sind ein Thema für sich, deswegen, wenns Probleme gibt, oder du was nicht verstehst einfach mal den Link anklicken, wird dich zwar erstmal überrumpeln, aber das wirst du schon verstehen: http://www.ijon.de/comp/tutorials/makefile.html

Und als Tipp, halte dich am besten an die "OS-Dev für Einsteiger"-Reihe.
Viel Glück!
2
Wow, Danke!
Werde ich mir auf jeden Fall anschauen, ist nämlich zimlich interessant, was da so alles gelinkt werden muss.

Nochmal Danke!
3
Mein Gott, bin ich dumm.
Sorry aber ich hätte den Post von PorkChicken wohl genauer lesen sollen: "[...]Stattdessen musst du im Assembler-Code[...]". Ich hab natürlich auch im C-Code den Unterstrich angefügt...
Jedenfalls funktioniert es jetzt Prima.
Meine einzige Frage ist nur, welche Bibliotheken ich linken muss, um auch mit ld linken zu können?

Danke nochmal für die Hilfen und die Erklärungen.
4
Danke, die main- und die printf-Funktionen werden nicht mehr bemängelt, wenn ich mit dem gcc linke.
Aber _factorial (auch mit Unterstrich am Anfang) will auch gcc nicht kennen...

BTW: Welche Bibliotheken werden benötigt, um das ganze mit ld zu linken? libc.a gibt's unter Windows bzw. MinGW nicht, soviel ich gesehen habe.
Und gcc ruft doch zum Linken auch nur den ld auf, somit wäre dann doch wieder alles beim Alten, oder gibt der dann noch die nötigen Libs zum linken per Parameter mit?

[EDIT]

Die Objekt-Datei mit -S und -r gedumpt:
main.o:     file format pe-i386


Disassembly of section .text:

00000000 <_main>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   83 e4 f0                and    $0xfffffff0,%esp
   6:   83 ec 20                sub    $0x20,%esp
   9:   e8 00 00 00 00          call   e <_main+0xe>
                        a: DISP32       ___main
   e:   c7 44 24 1c 05 00 00    movl   $0x5,0x1c(%esp)
  15:   00
  16:   8b 44 24 1c             mov    0x1c(%esp),%eax
  1a:   89 04 24                mov    %eax,(%esp)
  1d:   e8 00 00 00 00          call   22 <_main+0x22>
                        1e: DISP32      __factorial
  22:   89 44 24 08             mov    %eax,0x8(%esp)
  26:   8b 44 24 1c             mov    0x1c(%esp),%eax
  2a:   89 44 24 04             mov    %eax,0x4(%esp)
  2e:   c7 04 24 00 00 00 00    movl   $0x0,(%esp)
                        31: dir32       .rdata
  35:   e8 00 00 00 00          call   3a <_main+0x3a>
                        36: DISP32      _printf
  3a:   b8 00 00 00 00          mov    $0x0,%eax
  3f:   c9                      leave
  40:   c3                      ret
  41:   90                      nop
  42:   90                      nop
  43:   90                      nop

main hat 3 Unterstriche, _factorial einen zusätzlichen und printf auch einen...
5
Danke für die Antwort, aber das funktioniert leider auch nicht:

ld main.o fact.o -o TEST -fno-leading-underscore -shared
Cannot export factorial: symbol not defined
main.o:main.c:(.text+0xa): undefined reference to `__main'
main.o:main.c:(.text+0x1e): undefined reference to `factorial'
main.o:main.c:(.text+0x36): undefined reference to `printf'
mingw32-make: *** [TEST] Error 1

Nachdem mir ld folgendes mitgeteilt hat: ld: -f may not be used without -shared
musste ich den genannten Parameter noch dazunehmen, hilft aber auch nicht mehr...

[EDIT]
Warum findet der Linker die Funktionen nicht? Sie sind ja immerhin in den Objekt-Dateien enthalten...
6
Servus,

Ich möchte wie bei Teil 2 im Wiki (das letzte Beispiel) eine C-Quelldatei und eine Assembler-Quelldatei kompilieren und linken.
Ich benutze das "normale" MinGW unter Windows.

Folgendermaßen kompiliere, bzw. linke ich das ganze:
gcc main.c -c -o main.o
as fact.S -o fact.o
ld main.o fact.o -o TEST
main.o:main.c:(.text+0xa): undefined reference to `__main'
main.o:main.c:(.text+0x1e): undefined reference to `factorial'
main.o:main.c:(.text+0x36): undefined reference to `printf'
mingw32-make: *** [TEST] Error 1

Kompilieren klappt ja offensichtlich wunderbar, aber beim Linken krachts dann.

Ich weiß nicht warum die drei Funktionen angeblich undefiniert seien, der Quellcode ist ja komplett aus dem Wiki kopiert (ich habe sogar noch die Kommentare drinstehen  8-)).
Oder muss da noch irgendeine (standart) Bibliothek gelinkt werden? Wenn ja - welche?

Könnt ihr mir da weiterhelfen?
Danke schonmal.

mfg rungaaz

[EDIT]

Die Objekte schauen folgendermaßen aus:

fact.o:     file format pe-i386


Disassembly of section .text:

00000000 <factorial>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   8b 45 08                mov    0x8(%ebp),%eax
   6:   09 c0                   or     %eax,%eax
   8:   75 07                   jne    11 <recurse>
   a:   b8 01 00 00 00          mov    $0x1,%eax
   f:   eb 10                   jmp    21 <out>

00000011 <recurse>:
  11:   48                      dec    %eax
  12:   50                      push   %eax
  13:   e8 e8 ff ff ff          call   0 <factorial>
  18:   83 c4 04                add    $0x4,%esp
  1b:   8b 55 08                mov    0x8(%ebp),%edx
  1e:   0f af c2                imul   %edx,%eax

00000021 <out>:
  21:   89 ec                   mov    %ebp,%esp
  23:   5d                      pop    %ebp
  24:   c3                      ret
  25:   90                      nop
  26:   90                      nop
  27:   90                      nop


main.o:     file format pe-i386


Disassembly of section .text:

00000000 <_main>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   83 e4 f0                and    $0xfffffff0,%esp
   6:   83 ec 20                sub    $0x20,%esp
   9:   e8 00 00 00 00          call   e <_main+0xe>
   e:   c7 44 24 1c 05 00 00    movl   $0x5,0x1c(%esp)
  15:   00
  16:   8b 44 24 1c             mov    0x1c(%esp),%eax
  1a:   89 04 24                mov    %eax,(%esp)
  1d:   e8 00 00 00 00          call   22 <_main+0x22>
  22:   89 44 24 08             mov    %eax,0x8(%esp)
  26:   8b 44 24 1c             mov    0x1c(%esp),%eax
  2a:   89 44 24 04             mov    %eax,0x4(%esp)
  2e:   c7 04 24 00 00 00 00    movl   $0x0,(%esp)
  35:   e8 00 00 00 00          call   3a <_main+0x3a>
  3a:   b8 00 00 00 00          mov    $0x0,%eax
  3f:   c9                      leave
  40:   c3                      ret
  41:   90                      nop
  42:   90                      nop
  43:   90                      nop
7
Ok, Danke, damit wäre das geklärt.
8
Erstmal Danke für die Antworten.
Macht Sinn, aber int64_t ist z.B. als long long definiert.
Und da long ja nicht auf jeder Plattform gleich groß ist, würde das ja bedeuten, dass es hier auch wieder Differenzen geben würde. Oder hat das etwas damit zu tun, dass long doppelt vorkommt?

Wenn ich jedoch unter Windows zwei Variablen definiere - eine als long int und die andere als long long int - und jeweils deren größe mit sizeof() ausgebe, dann ist die long int-Variable 4 Byte (32Bit) groß und die long long int-Variable 8 Byte (64Bit) groß. Soweit, so gut.
Wenn ich das jetzt aber auf einem 64Bit-Linux machen würde, auf dem - wie du gesagt hast, ein long 64Bit groß ist - dann wäre doch die long long int-Variable 16Byte und somit 128Bit groß - oder?
Oder wird das dann durch die ganzen Defines, welche noch in der stdint.h vorhanden sind geregelt?
9
Servus,

eine Frage die mich schon ewig quält ist: Was bringen eigentlich die ergänzenden Typen (uint8_t, int8_t, ...) in C?
Ich mein, statt uint8_t kann man genauso unsigned char schreiben.
In der stdint.h ist das ja sowieso genau so definiert: typedef unsigned char uint8_t;

Gibt es da irgendwelche, mir nicht bekannte, Vorteile?
Der einzige "Vorteil", den ich darin sehe ist, dass uint8_t kürzer ist als unsigned char. Aber das wars auch schon.

Sorry wenn ich so eien banale Frage stelle, aber das musste einfach mal raus  :-)

mfg rungaaz
10
Lowlevel-Coding / Re:Funktion für Eingabe
« am: 15. September 2010, 12:10 »
Vielen Dank, ich werd mir mal alles reindrücken.
11
Lowlevel-Coding / Re:Funktion für Eingabe
« am: 15. September 2010, 12:07 »
Danke, ich werd mir das nötige mal durchlesen.
Warum ich im Anfall geistiger Umnachtung nicht auf folgenden Artikel gestoßen bin weiß ich leider nicht: http://www.lowlevel.eu/wiki/KBC
12
Lowlevel-Coding / Funktion für Eingabe
« am: 15. September 2010, 11:54 »
Servus,

da ich jetzt meine eigene printf()-Funktion - so wie es in Teil 4 des Wikis verlangt wird - geschrieben habe, und diese auch einwandfrei funktioniert, möchte ich jetzt einen Schritt weiter gehen, und eine Eingabefunktion schreiben.
Leider habe ich absolut keine Ahnung, wie ich das anstellen soll. Beim Thema Schnittstellenprogrammierung habe ich NULL Erfahrung.
Ich habe mir auch schon die Tyndur Source angeschaut, aber Headerdateien wie z.B 'stdio.h' kann ich da in den include-Verzeichnissen garnicht finden und das ganze ist dann noch dazu 100x zu komplex für mich.
Im Wiki selbst habe ich zu diesem Thema - soweit ich gesehen habe - nichts gesehen.

Könnt ihr mir sagen, wo und wie ich da anfangen soll, bzw. wo steht das?
mfg rungaaz
13
Softwareentwicklung / Re:Linker für Windows 7 gesucht
« am: 14. September 2010, 20:12 »
Werd mal NOCH unkonkreter, bitte. :-)

Das wäre kontraproduktiv :D
14
Softwareentwicklung / Re:Linker für Windows 7 gesucht
« am: 14. September 2010, 20:01 »
Also ohne Crosscompieler kommst du womöglich nicht weiter...
Kommt auch ein wenig darauf an, in welcher Sprache du dein - ich nehme mal an - OS schreiben willst.
Aber wie schon gesagt wurde, etwas mehr Infos.
15
tyndur / Re:0.3 - Ideen und Ziele
« am: 11. September 2010, 23:23 »
[EDIT]
Ich habe gerade einen kleinen Bug in Tyndur enddekt, glaube ich.
Hier ein Paar Screens:
Welche Version bzw. welches Dateisystem ist das denn? Eine 0.2.1-Floppy, d.h. FAT?

Ja, genau.
16
tyndur / Re:0.3 - Ideen und Ziele
« am: 10. September 2010, 18:54 »
Ihr könnt es ja so wie in "normalen" Editoren wie Notepad++ machen, eine externe Datei anlegen, welche Schlüsselwörter enthält, die gehighlighted werden sollen und in welcher Farbe. Dann kann es jeder nach seinem Belieben ändern.
Ein bisschen mehr als Schlüsselwörter gehört schon dazu. Zum Beispiel gehen Strings oder Kommentar in jeder Sprache anders.

Ja, das stimmt, aber schaut euch vielleicht mal so eine XML-Datei von NP++ an, das ist vll. ne gute Vorlage.
Gut das Teil auslesen lassen ist vielleicht ein Projekt für sich.

[EDIT]
Ich habe gerade einen kleinen Bug in Tyndur enddekt, glaube ich.
Hier ein Paar Screens:


Hier lege ich den Dateinamen fest:

Nachdem ich Kedit beendet habe:


Was nicht wirklich ein Bug ist, aber auch nicht sooo schön aussieht ist, dass ich den String "Dateiname: " in Kedit einfach mit Backspace wegmachen kann:
17
tyndur / Re:0.3 - Ideen und Ziele
« am: 10. September 2010, 15:21 »
Zitat
Wenn du konkret nach kedit fragst, fehlen mit da zwar keine Syntaxhighlightings mehr (aber dir vielleicht, keine Ahnung?)

Ihr könnt es ja so wie in "normalen" Editoren wie Notepad++ machen, eine externe Datei anlegen, welche Schlüsselwörter enthält, die gehighlighted werden sollen und in welcher Farbe. Dann kann es jeder nach seinem Belieben ändern.

Zitat
Die furchteinflößende Liste ist die hier.
Das haut mal rein!
18
tyndur / Re:0.3 - Ideen und Ziele
« am: 10. September 2010, 15:12 »
Was ist denn los mit eucht?  :-o
Ihr entwickelt ein OS mit allen Raffinessen, und ich gammel noch bei meinem Hello World rum :-D

Respekt!
19
tyndur / Re:0.3 - Ideen und Ziele
« am: 10. September 2010, 15:02 »
Ich hab ne Tastatur mit Power knop. 6 Sekunden drücken PC aus. ;)

Programm Noob

Ja, aber ich meinte eigentlich grob gesagt, dass ich durch knopfdurck von mir geschriebenen Code ausführt, welcher den Rechner runterfährt.
Die PC-durch-EinschaltPowerknopf-ausschalten-Variante war mir bisher ein wenig suspekt, da ich immer an Datenverlust denken muss. Doch da die komplexität meines "OS"-es nahe dem Nullpunkt angesiedelt ist, und ich sowieso nur in den RAM-Speicher schreibe, welcher beim Beenden eh gelehrt (EDIT: Vor allem "gelehrt". Deutsche Sprache schwere Sprache  :-D) wird, ist das auch eine möglichkeit.
Aber wie oben shcon gesagt, möchte ich das ganze mit selbst geschriebenen Code bewerkstelligen. Bis mein Wissensstand soweit ist, muss ich aber auf die Holzhammermethode zurückgreifen  :-D

@Topic
Gibt es in Týndur eigentlich soetwas wie einen Internet-Text-Browser?

mfg rungaaz
20
tyndur / Re:0.3 - Ideen und Ziele
« am: 10. September 2010, 09:51 »
Ohne größen Afwaand geht im PMode nicht. Du musst einen ACPI Treiber schreiben. Auserdem schon wieder off topic und falschen Forum.

Programm Noob

Das war kein Aufruf zur Hilfe, sondern lediglich eine Anmerkung  :wink:
Aber du hast Recht, es ist trozdem Off-Topic.

Zitat
Wozu? Drückst du auf den Knopf, dann geht der Computer aus.

Ja gut, aber per Knopfdruck auf der Tastatur ist hald irgendwie schöner  :-D
Seiten: [1] 2

Einloggen