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 - Gawag

Seiten: [1]
1
Offtopic / Hallo???
« am: 11. March 2006, 22:54 »
Liegt vermutlich an den vielen Fehlern. :cry:

Die Seite ist zerstückelt (Tutorialbereich und Domain) und das Forumlogin ist auch nich so dolle. Nach dem Login gibt es einen "not found" error und man muss nochmal normal ins Forum rein, also über Link auf der Hauptseite oder Ähnliches.

Ich hatte erst gedacht Lowlevel wäre ganz weg, dann fand ich es doch irgendwann über Google wieder.  :P Dann war die Welt wieder halbheile...  :lol:
2
Lowlevel-Coding / Textausgabe im PMODE??
« am: 26. November 2005, 11:10 »
Juhu!  :D

Ich dacht schon es käme gar keine Antwort mehr.  :D
3
Lowlevel-Coding / Textausgabe im PMODE??
« am: 23. November 2005, 23:35 »
Also ich mach das alles ganz ohne org.

Ich hatte dasselbe Problem und habe es so gelöst, dass ich nicht wie im RM:
mov al, [esi]
sondern:
 mov al, [esi+0x10000]
benutze.

0x10000 ist bei mir die Position des Kernels also allgemein:
mov al, [esi+kernel_position]

An deinem Code war also so nichts falsch, nur die Idee fehlte ;) Passiert mir auch dauernd.

So nebenbei: ich mag org sowieso nicht, das fuscht so "blöde" rum. Ich greife lieber ueber die genauen Adressen auf den RAM zu. Also so dass 0x10000 auch 0x10000 ist und nicht irgendwie 0x20000 oder so. Da ist mir die Fehleranfälligkeit zu hoch ;) (also zumindest wenn die orgs so funktionieren wie ich das verstanden habe).

Klappts mit meiner Methode?
4
Lowlevel-Coding / rets gehen nicht (pm)
« am: 20. November 2005, 20:56 »
Ehm, ne nur das A20 Gate.

Die Sachen die ihr mir so gegeben habt haben ja nicht so geholfen.

In irgendeinem Codesnippet Verzeichniss fand ich dann was zum A20-Gate im PM Bereich. Dies brachte mich dann darauf, dass das irgendwie zusammenhänen könnte.

Im A20 Tutorial (also dem auf dieser Seite) stand dann auch noch mal irgendwie soetwas. Das war aber irgendwie verwirrend formuliert (vielleicht hab ichs auch einfach nicht ganz kapiert :P ) deswegen war ich etwas verunsichert.
Aber was solls, ich war schon ziemlich verzweifelt also wieso nicht probieren  :lol:.

Also das A20 Gate aktiviere ich jetzt direkt bevor ich den Kernel nach 0x10000 lade.

Das Einzige was mich wundert ist, das meine vorherigen RM Versuche wesentlich größer waren als der jetzige PM-Kram und trotzdem richtig funktionierten.
5
Lowlevel-Coding / rets gehen nicht (pm)
« am: 20. November 2005, 15:41 »
JUHU!
Habs geschafft!
:D

Hab jetzt mal im Bootloader das A20-Gate aktiviert und jetzt l]uft es endlich. :D

Habs jetzt auch mehrfach auf echter Hardware getestet jetzt gets eindeutig.

Am Ende hab ich mir zwar eigentlich selbst geholfen aber trotzdem Danke an alle die es versucht haben.
6
Lowlevel-Coding / rets gehen nicht (pm)
« am: 20. November 2005, 11:23 »
nah sach das doch gleich. Jetzt hab ich schon das A20-Tut durch.  :lol:

Aber erst probier ich das mit dem Kernel verlegen.

...

EDIT: das mt dem kernel verschieben hat nicht geklappt. jetzt versuch ichs mal mit dem A20-gate im Bootloader
7
Lowlevel-Coding / rets gehen nicht (pm)
« am: 20. November 2005, 11:07 »
Ehem.
Also das Problem ist noch immer nicht gelöst aber ich habe da eine Idee...

Benötigt man das A20-Gate um die Adresse 0x1FFFFF im PM anzusprechen?  :oops:

Warum fragt denn keiner nach diesem A20-Gate....
Oder sacht mir das man das braucht...

Hab mich schon gewundert warum das immer so mit zum PM sortiert wird....  :oops:

Naja ich versuchs mal mit diesem A20 Gate.  :D
8
Lowlevel-Coding / rets gehen nicht (pm)
« am: 18. November 2005, 21:50 »
Also ich hab das jetzt mal mit jump $ ausprobiert und es liegt eindeutig an den ret's.

Noch irgendwelche Ideen?
9
Lowlevel-Coding / rets gehen nicht (pm)
« am: 18. November 2005, 00:12 »
Verdammt. Hatte jetzt einen Unterschied zwischen meinem Code und dem aus dem Tutorial gefunde. Hab den ausgeglichen und in Bochs lief es dann auch perfekt. Doch als ich es auf richtiger Hardware ausprobiert habe, startete der Rechner wieder neu.

Noch irgendwelche Ideen? Ich weiß nicht mehr weiter.

Also wie ist das nun genau mit diesem EIP. Ein ret popt diesen vom Stack, also stellt ihn sozusaen wieder her. Und dieser EIP wird von einem call dort hingelegt?
IP steht soviel ich weiß für Instruction Pointer, also der Pointer der auf den aktuellen Befehl zeigt?

Man müsste doch eigentlich so ein ret durch ein
pop eip
ersetzen können doch dann sacht mir nasm was von wegen undefiniertem Symbol. Dasselbe bei IP.
Geht das denn irgendwie? Würde vielleicht weiterhelfen.
10
Lowlevel-Coding / rets gehen nicht (pm)
« am: 17. November 2005, 20:21 »
Also der Code aus Ausgabe 7 hat es nur noch schlimmer gemacht.

Jetzt mal den kompletten Code.
Das ist übrigens so ne art abgewandfelte Form des Codes aus dem PM-Tutorial.

[Bits 16]

call pm_start ; go into pm

mov eax, cr0 ;last step to pm
or eax, 1
mov cr0, eax

db 0xea ;jump to pmode
dw pmode
dw 0x8

;---------------------------

bootdrv db 0

desc_null:
dd 0
dd 0

desc_code:
dw 0xFFFF
dw 0
db 0
db 0x9A
db 0xCF
db 0

desc_data:
dw 0xFFFF
dw 0
db 0
db 0x92
db 0xCF
db 0

gdt:
limit dw 0
base dd 0

;------------------------------

pm_start: ; loads the gdt
cli
mov eax, cs
mov ds, ax
shl eax, 4
mov [desc_code+2], ax
mov [desc_data+2], ax
shr eax, 16
mov [desc_code+4], al
mov [desc_data+4], al

mov eax, cs
shl eax, 4
add eax, desc_null
mov [base], eax
mov [limit], word gdt - desc_null - 1

lgdt [gdt]
ret

[Bits 32] ; we are in the pm!

pmode:
mov word [desc_code+2], 0
mov word [desc_data+2], 0
mov byte [desc_code+4], 0
mov byte [desc_data+4], 0

mov eax, 2
shl eax, 3

mov ds, ax
mov es, ax
mov ss, ax
mov eax, 0
mov fs, ax
mov gs, ax
mov esp, 0x1FFFFF

mov al, 0x00
mov dx, 0x03F2
out dx, al                         ;stop the floppy-motor

jmp 0x8:0x10000 + pmode2

;------------------------------------------------------------------------------

pmode2: ; now we can do what we want

call test_call

mov edi, 0x000B8400
mov al, 0x5F
call print_number       ; dies drückt das Byte in al als hexadezimale Zahl aus

loop_end:
mov al, ah
jmp loop_end

;times 512-($-$$) db 0 ;darf man das auskommentieren?


test_call:
mov ah, al    ;ist nur eine Testfunktion
ret



Das ist jetzt der eigentliche Kernel. Es gibt noch ein paar andere Dateien aber die haben nichts mit dem PM-Kram zu tun.
11
Lowlevel-Coding / rets gehen nicht (pm)
« am: 16. November 2005, 23:14 »
Aha. Danke schonmal. :-)

Das Problem ist doch noch nicht gelöst. Hab den kleinen Unterschied erst jetzt bemerkt.

Also bei einem ret startet der Rechner neu.
Bei einem retd springt er zu einer ganz anderen Stelle/Funktion als er eigentlich hin sollte.

Ich vermute bei einem ret springt er ebenfalls zu einer ganz anderen Stelle die ihn eben neustarten lässt.

Hat jemand ne Idee warum er ganz woanders landet? Kann das wirklich an einer falschen GDT oder nem falschen Stack liegen?

Alle anderen Funktionen scheinen übrigens zu funktionieren. z.B. Schreibzugriff auf den Bildschirmspeicher.

Ich geb euch mal den Code der den Stack betrifft, den kompletten Code kann ich euch leider erst morgen zeigen.
Ist übrigens aus dem PM Tutorial.

mov eax, 2
shl eax, 3

mov ds, ax
mov es, ax
mov ss, ax
mov eax, 0
mov fs, ax
mov gs, ax
mov esp, 0x1FFFFF
12
Lowlevel-Coding / rets gehen nicht (pm)
« am: 16. November 2005, 21:53 »
Ach da wa ja ne Antwort.  :D
Also das Problem ist jetzt behoben aber das mit den Rets verstehe ich noch nicht ganz genau. Also iret bzw. iretd braucht man nur bei einer Interruptfunktion (also bei denen aus der IDT)?

Und was ist nun mit den beiden ret's mit einem d am Ende?
13
Lowlevel-Coding / rets gehen nicht (pm)
« am: 16. November 2005, 21:50 »
hm....

also irgendwie ist das mit dem Neustart weg... scheint zu gehen.

Ich hatte im Kernel erst einen 16Bit Bereich, dann einen 32Bit und dann wieder einen 16Bit und noch einen 32Bit Bereich. Jetzt hab ich das mal anders sortiert so dass die beide zusammen liegen (also erst der ganze 16 Bit Code und dann der ganze 32Bit Code).

Aber was ist nen nun der Unterschied zwischen den vielen ret's?
Hab da irgendwie nichts von in nem Tutorial gesehen.
14
Lowlevel-Coding / rets gehen nicht (pm)
« am: 16. November 2005, 21:31 »
Hi
Also irgendwie funktionieren im PM die ret's nicht.

im RM konnte ich ganz einfach sowas machen:


...
call print
...
print:
...
ret

und nach dem ret landete ich dann wieder direkt nach dem call.
im PM startet der Rechner einfach nur neu.
Die Funktion wird richtig ausgeführt, nur das ret zurück geht eben nicht.

Muss man das im PM irgendwie anders machen?

Ich hab übrigens auch andere ret's wie iret und iretd probiert, genau dasselbe.

Bin übrigens erst seit etwa zwei Tagen mit dem PM zugange also noch ziemlich unerfahren.  :)

EDIT: Achja das wollte ich ja auch noch fragen: Was ist eigentlich der Unterschied zwischen den verschiedenen ret's? also iret, iretd und retd.
Seiten: [1]

Einloggen