Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: jeb am 01. April 2005, 16:57

Titel: in den kernel wechseln
Beitrag von: jeb am 01. April 2005, 16:57
also folgenden code kapier ich auch nicht:


;Springe zu diesem Kernel
mov ax, 0x1000 ; Die Adresse des Programms
mov es, ax     ; Segmentregister updaten
mov ds, ax
push ax
mov ax, 0
push ax
retf


wie wird hier zum kernel gesprungen :?:

mfg
jeb
Titel: in den kernel wechseln
Beitrag von: stultus am 01. April 2005, 17:03
Die Adresse wird halt von hand auf den Stack gepusht und dann nen retf (rückkehr nach far call) ausgeführt. nen far jump häts genauso getan ;)
Titel: in den kernel wechseln
Beitrag von: Roshl am 01. April 2005, 17:05
Also folgendes wenn du mit call in eine routine springst wird dir rücksprungadresse auf dem stack abgelegt, damit wir wissen wo wir hergekommen sind. mit ret erfolgt der rücksprung indem es die adresse vom stack holt.
retf ist der far pendant dazu, es nimmt zusätzlich noch ein segement entgegen. durch das pushen wird praktisch das call simuliert ohne ein wirkliches call durchzuführen und das retf nimmt segement und offset und springt dort hin "zurück"
Auf Intel-Architekturen gibt es viele solcher Tricks^^
Titel: in den kernel wechseln
Beitrag von: Another Stupid Coder am 01. April 2005, 17:09
Also sind Intel-Menschen doch kreativer als die Appler >)
Titel: in den kernel wechseln
Beitrag von: Roshl am 01. April 2005, 17:28
definitiv^^
Titel: in den kernel wechseln
Beitrag von: Jidder am 01. April 2005, 18:17
ich frage mich bloß, warum man sowas tut. ist es zu schwer sowas zu schreiben?
jmp 0x1000:0000
kommt aufs gleicher heraus, ist kürzer, übersichtlicher, verständlicher (sieht man ja wie einsteigerfreundlich das ist) und einfacher zu debuggen.
Titel: in den kernel wechseln
Beitrag von: jeb am 01. April 2005, 18:20
also mit nem farjump kommt das gleiche rasu. ok, aber warum denn das ganze mir retf? (nus so aus neugirde, mein problem hat sich erledigt).

mfg
jeb
Titel: in den kernel wechseln
Beitrag von: Jidder am 01. April 2005, 18:26
Wahrscheinlich von einem uralten Tutorial abgeguckt und nur eine Angewohnheit. Meine Vermutung ist, dass es früher mal Assembler gab, die Zahlenwerte in jmp-Statements nicht angenommen haben, und der Workaround mit dem retf hat sich bei einigen "alten Hasen" vielleicht eingeschliffen.
Titel: in den kernel wechseln
Beitrag von: Roshl am 01. April 2005, 18:28
manchmal macht man aus spass sowas^^ oder gerade um andere zu verwirren. Ausserdem fällt mir noch ein grund ein, aber der is mir zu kompliziert zu erklären^^
Titel: in den kernel wechseln
Beitrag von: stultus am 01. April 2005, 18:40
erklär ruhig ;)
Titel: in den kernel wechseln
Beitrag von: Jidder am 01. April 2005, 19:18
ich denke mal an solchem code erkennt man den grad der 1337ness des coders ;)
Titel: in den kernel wechseln
Beitrag von: Roshl am 01. April 2005, 19:20
wenn man den sprung nicht statisch machen will sondern dynamisch mit veränderlichen zielen, dann müsste man ja 2 register angeben , ich glaube aber das geht nicht. deswegen das pushen.
Jedenfalls mach ichs so in meinem neuen bootloader deswegen, ich hoffe du verstehst mich^^ habs kurz gefasst