Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Low-Level-Programmierung und Experimenteller Kernel; Ansprechpartner: Dirty Oerti
Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von Dirty Oerti » Di Nov 25, 2008 11:15 pm

Xin hat geschrieben:Was passiert denn, wenn man ein paar Mal Return drückt!? Ist das so schlimm!?
Was verändert sich da? Es werden ein paar Zeilen eingefügt und dann macht man sie wieder weg und fertig?
Ich bin der vollkommen gleichen Ansicht :)
Nur bochs, qemu, und anscheinend der Compiler nicht...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von Xin » Di Nov 25, 2008 11:30 pm

Dirty Oerti hat geschrieben:Nur bochs, qemu, und anscheinend der Compiler nicht...
Compiler update?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von Dirty Oerti » Di Nov 25, 2008 11:34 pm

Ist, zumindest laut Synaptic auf dem neusten Stand:
daniel@linDaniel:~/Programmieren/kernel/trunk/src/bochs$ gcc --version
gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
Copyright (C) 2007 Free Software Foundation, Inc.
Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es
gibt KEINE Garantie; auch nicht für MARKTGÄNGIGKEIT oder FÜR SPEZIELLE ZWECKE.
Ich habe nun mal alle Makefiles durchgesehen und überall auf -O gestellt. Außerdem habe ich überall, wo ich es noch gefunden habe die Option -g entfernt.
Dadurch ist der Kernel von ca 45 KB auf 26 KB geschrumpft, und funktioniert einwandfrei.
Nur den Ordner habe ich noch nicht wieder auf die Tastatur gelegt (mir ist das ein echtes Rätsel, ich habe nichts verändert...bzw alles wieder rückgängig gemacht)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von Xin » Mi Nov 26, 2008 11:12 am

Dirty Oerti hat geschrieben:Ich habe nun mal alle Makefiles durchgesehen und überall auf -O gestellt. Außerdem habe ich überall, wo ich es noch gefunden habe die Option -g entfernt.
Dadurch ist der Kernel von ca 45 KB auf 26 KB geschrumpft, und funktioniert einwandfrei.
Nur den Ordner habe ich noch nicht wieder auf die Tastatur gelegt (mir ist das ein echtes Rätsel, ich habe nichts verändert...bzw alles wieder rückgängig gemacht)
Ordner können halt magisch sein. ;-)

<urban legend>
Weißt Du wie der Magier von Oz seinen Namen bekommen hat? Der Magier von Am hätte nicht so gut geklungen.
Als die Geschichte geschrieben wurden standen auf dem Regal über dem Schreibtisch zwei Ordner: A-M und O-Z... ;-)
</urban legend>
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von nufan » Mi Nov 26, 2008 7:52 pm

Xin hat geschrieben: Als die Geschichte geschrieben wurden standen auf dem Regal über dem Schreibtisch zwei Ordner: A-M und O-Z... ;-)
N gabs damals nicht? :D

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von Xin » Mi Nov 26, 2008 10:23 pm

dani93 hat geschrieben:
Xin hat geschrieben: Als die Geschichte geschrieben wurden standen auf dem Regal über dem Schreibtisch zwei Ordner: A-M und O-Z... ;-)
N gabs damals nicht? :D
Hehehe, seit meiner Kindheit finde ich 'N' irgendwie interessanter als 'M' und deswegen muss 'N' im Alphabet bei mir vor 'M' stehen. Ich kann das Alphabet aufsagen, aber wenn ich so überlegen muss, in welcher Reihenfolge die beiden Buchstaben sind, dann muss ich aufpassen ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von nufan » Mi Nov 26, 2008 10:28 pm

Xin hat geschrieben:
dani93 hat geschrieben:
Xin hat geschrieben: Als die Geschichte geschrieben wurden standen auf dem Regal über dem Schreibtisch zwei Ordner: A-M und O-Z... ;-)
N gabs damals nicht? :D
Ich kann das Alphabet aufsagen, aber wenn ich so überlegen muss, in welcher Reihenfolge die beiden Buchstaben sind, dann muss ich aufpassen ;-)
Ich war mir auch nicht sicher und hab vorher sicherheitshalber auf Wikipedia nachgeschlagen. :)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von Dirty Oerti » So Nov 30, 2008 9:52 pm

Der Sieg ist MEIN ! :mrgreen: :P

Ich glaube ich habe die Ursache für so einige Probleme gefunden:

Der Heap sollte ja ursprünglich so ca 2,5 MB groß sein. Das würde heißen, dass der Heap so ca 3 MB verbrauchen würde. Nun war das Problem, dass ich mich anscheinend mit den Stellen "etwas" vertan hatte...anstatt 3 MB zu besetzen waren für den Heap 30 MB angesetzt...außerdem habe ich in der Zählweise beim Allokieren einen Fehler drinngehabt. Das führte dazu, dass die 4 fache Menge des Speichers angefordert wurde: 120 MB alleine für den Heap.
Bei insgesamt 128 MB etwas problematisch...

Dann wurde zunächst das aber gar nicht verbraucht.
Grund war:
Anstatt von
MapVirtPhys(tmp,(unsigned int)K_alloc(),PG_RW | PG_USER | PG_PRESENT);
habe ich
MapVirtPhys(tmp,(unsigned int)K_alloc,PG_RW | PG_USER | PG_PRESENT);
geschrieben.
Das führte dazu, dass der komplette Heap auf den Codebereich, in dem die Funktion K_alloc liegt gemappt wurde...
also mitten hinein in den Kernelcode.
Bei einem Zugriff auf diese Strukturen (wie z.B. beim Taskwechsel...) wurde damit auch der Code an dieser Stelle verändert. War in dem Bereich also etwas, was nocheinmal benutzt wurde (K_alloc), dann ist Käse und Wurst dabei herausgekommen...

:D

Es kann wieder vorwärts gehen..
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von Xin » So Nov 30, 2008 10:48 pm

Dirty Oerti hat geschrieben:Grund war:
Anstatt von
MapVirtPhys(tmp,(unsigned int)K_alloc(),PG_RW | PG_USER | PG_PRESENT);
habe ich
MapVirtPhys(tmp,(unsigned int)K_alloc,PG_RW | PG_USER | PG_PRESENT);
geschrieben.
Dieses Casten ist gefährlich. Nimm einen C++ Compiler und verwende static_cast<>(), das ist, was Du hier tun möchtest. Der Compiler wird dann meckern, weil Du das hier nicht getan hast.
Der C-Cast erlaubt eine derartige Unterscheidung nicht.
Dirty Oerti hat geschrieben:Das führte dazu, dass der komplette Heap auf den Codebereich, in dem die Funktion K_alloc liegt gemappt wurde...
also mitten hinein in den Kernelcode.
Bei einem Zugriff auf diese Strukturen (wie z.B. beim Taskwechsel...) wurde damit auch der Code an dieser Stelle verändert. War in dem Bereich also etwas, was nocheinmal benutzt wurde (K_alloc), dann ist Käse und Wurst dabei herausgekommen...

:D
Ein klassischer Stirnklatscher ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Aktuelle Bugs: Wer ihn findet, darf ihn behalten!

Beitrag von Dirty Oerti » Mo Dez 01, 2008 12:04 am

Xin hat geschrieben:Dieses Casten ist gefährlich. Nimm einen C++ Compiler und verwende static_cast<>(), das ist, was Du hier tun möchtest. Der Compiler wird dann meckern, weil Du das hier nicht getan hast.
Der C-Cast erlaubt eine derartige Unterscheidung nicht.
Naja, auf C++ wollte ich eigentlich nicht umsteigen.
Der Kernel selbst soll möglichst in C geschrieben werden :)

Ich habe den Cast nun einfach entfernt bzw die Notwendigkeit dazu entfernt (aus dem Pointer in den Parametern einfach ein unsigned int gemacht^^).
Xin hat geschrieben:Ein klassischer Stirnklatscher ;-)
Aber was für einer...

Das, was ich gemacht habe, könnte man so umschreiben:

Code: Alles auswählen


void myFunc()
{
    int a = 1;
    a++;
    a--;
}


void main()
{
    unsigned int* killer = (unsigned int*)&myFunc;
    *killer = 0xF4;
    killer++;
    *killer = 0x00;
    myFunc();
}
Müsste eigntl einen General Protection Fault auf jedem normalen PC hervorrufen.
Ich übernehme keine Haftung, falls es jemand ausprobiert.
Anmerkung: 0xF4 ist der Assembler Befehl "hlt", der die CPU anhält. Dürfte nur der Kernel des laufenden Betriebssystems ausführen können...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Antworten