hallo,
wie schaffe ich es einen anderen Sector auszuführen? Ich bekomm das einfach net hin... Man muss doch den IP verändern, oder?
Ich hab einfach mal euren Code genommen:
;Lade unseren Kernel
call execute
;Springt zum Kernel
mov ax, 0x2000 ; Die Adresse des Programms
mov es, ax ; Segmentregister updaten
mov ds, ax
push ax
mov ax, 0
push ax
retf
; Lade den Kernel vom Bootlaufwerk
execute:
; Diskdrive reset (Interrupt 13h, 0)
push ds ; Sichere DS
mov ax, 0 ; Die gewünschte Funktion (reset)
mov dl, 0 ; Dieses Laufwerk ist gewünscht
int 13h ; Den Interrupt ausführen
pop ds ; DS wiederherstellen
jc execute ; Geht nicht? -> Noch mal!
execute1:
mov ax,0x2000 ; ES:BX = 20000
mov es,ax
mov bx, 0
; Sektoren lesen (Interrupt 13h, 2)
mov ah, 2 ; Funktion 2 (Lesen)
mov al, 1 ; Lese 1 Sektor
mov cx, 2 ; Cylinder=0, Sector=2
mov dx, 0 ; Head=0, Laufwerk=0
int 13h ; ES:BX = Daten vom Laufwerk
jc execute1 ; Fehler? Noch mal!
Was geht daran nicht? Wo würde dieser Sector hingespeichert? Ist der Arbeitsspeicher sowas wie ein Quadrat, also das Programm dann an Stelle 2000x2000? Die Shell liegt bei 1000x1000, stimmts?
Bitte helft mir
wie schaffe ich es einen anderen Sector auszuführen? Ich bekomm das einfach net hin... Man muss doch den IP verändern, oder?
Ich hab einfach mal euren Code genommen:
;Lade unseren Kernel
call execute
;Springt zum Kernel
mov ax, 0x2000 ; Die Adresse des Programms
mov es, ax ; Segmentregister updaten
mov ds, ax
push ax
mov ax, 0
push ax
retf
; Lade den Kernel vom Bootlaufwerk
execute:
; Diskdrive reset (Interrupt 13h, 0)
push ds ; Sichere DS
mov ax, 0 ; Die gewünschte Funktion (reset)
mov dl, 0 ; Dieses Laufwerk ist gewünscht
int 13h ; Den Interrupt ausführen
pop ds ; DS wiederherstellen
jc execute ; Geht nicht? -> Noch mal!
execute1:
mov ax,0x2000 ; ES:BX = 20000
mov es,ax
mov bx, 0
; Sektoren lesen (Interrupt 13h, 2)
mov ah, 2 ; Funktion 2 (Lesen)
mov al, 1 ; Lese 1 Sektor
mov cx, 2 ; Cylinder=0, Sector=2
mov dx, 0 ; Head=0, Laufwerk=0
int 13h ; ES:BX = Daten vom Laufwerk
jc execute1 ; Fehler? Noch mal!
Was geht daran nicht? Wo würde dieser Sector hingespeichert? Ist der Arbeitsspeicher sowas wie ein Quadrat, also das Programm dann an Stelle 2000x2000? Die Shell liegt bei 1000x1000, stimmts?
Bitte helft mir

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert
