Autor Thema: in den kernel wechseln  (Gelesen 7126 mal)

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« 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

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #1 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 ;)
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #2 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^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 01. April 2005, 17:09 »
Also sind Intel-Menschen doch kreativer als die Appler >)

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #4 am: 01. April 2005, 17:28 »
definitiv^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 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.
Dieser Text wird unter jedem Beitrag angezeigt.

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #6 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

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #7 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.
Dieser Text wird unter jedem Beitrag angezeigt.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #8 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^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 01. April 2005, 18:40 »
erklär ruhig ;)
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 01. April 2005, 19:18 »
ich denke mal an solchem code erkennt man den grad der 1337ness des coders ;)
Dieser Text wird unter jedem Beitrag angezeigt.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #11 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
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

 

Einloggen