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

Seiten: [1] 2 3 4
1
Lowlevel-Coding / Fragen zur segmentierung
« am: 08. February 2007, 10:39 »
Hi!

ich moechte nun die segmentierung(und in weiterem sinne auch das laden von binarys) implementieren. ich hab auch schon die globale segment tabelle angelegt nun hab ich aber ein paar fragen zur addressierung:

1.) ich schreibe mein os in C und moechte nun zuerst ein segment fuer mein programm anlegen und dann eben mein programm dorthin laden. wie kann ich nun in C z.B das 5te segment am offset 0x1234 ansprechen(mit nem pointer.... aber wie komm ich auf die addresse)?

2.) ist mir das mit dem datensegment noch nicht so klar... waenn ich mein programm lade lade ich sie natuerlich ins cs aber wie sieht das mit dem datensegment aus wie weis ich in welchen datensegment ich die sachen laden muss btw was ich dorthin laden muss?

waer nett waenn ihr mir da helfen koenntet!!

mfg noob alias hazelnoot
2
Offtopic / Re: D
« am: 04. January 2007, 11:57 »
mal sehen wie sich die sprache entwickelt... werde sie erst hernehemen waenn sie mal etwas "ausgetestet" wurde...

mfg noob alias hazelnoot
3
Offtopic / Re: Problem mit Toaster
« am: 03. January 2007, 20:14 »
hi!

also ich finde das auch scheisse von euch toaster zu verbannen... man sollte nicht alles so ernst nehemen... toaster ist doch immer hilfsbereit und auch so ein kleverer bursche wieso also immer die negativen sachen sehen? einfach mal cool bleiben und auch ueber so manche sachen einfach drueberstehen...

tja TAKE IT EASY

mfg noob alias hazelnoot
4
Lowlevel-Coding / wie ladet ihr binarys
« am: 25. June 2006, 13:53 »
hi!

super danke termite so wie du das gesagt hast funkts bei mir teilweise schaut euch mal meinen code an:


struct Process{
    unsigned short buf_ax;
    unsigned short buf_cx;
    unsigned short buf_dx;
    unsigned short buf_bx;
    unsigned short buf_sp;
    unsigned short buf_bp;
    unsigned short buf_si;
    unsigned short buf_di;
    unsigned short buf_ds;
    unsigned short buf_es;
} process;


int readBin(int seg, int head,int track,int startSector,int anz){

   bx = seg;                 /*segment*/
   cl = startSector;            /*sectroNumber*/
   dl = DRIVE;                  /*drive number 0 == floppy*/
   al = anz;                    /*number of sectors to read*/
   ch = track;                  /*track number*/
   dh = head;                   /*head number*/  

    asm{
        mov ah, 0x2;
        int 0x13
        setc bx
    }
   
    return bx;
}


int loadBin(char *paht){
    int seg = 0;
    int lsn = analytePath(paht);
    int i;

printf("%d\n", lsn);
   
    asm{
        mov ax, 0x4000
        mov es, ax
    }

    for(i = 0; i < 7; i++){
        readBin(seg, ((lsn) / 18) % 2, (lsn) / 36, ((lsn) % 18) +1, 1);
        seg+=512;
        lsn++;
    }

    /*save all registers*/
    process.buf_ax = ax;
    process.buf_cx = cx;
    process.buf_dx = dx;
    process.buf_bx = bx;
    process.buf_sp = sp;
    process.buf_bp = bp;
    process.buf_si = si;
    process.buf_di = di;
    process.buf_ds = ds;
    process.buf_es = es;
   
    asm {
        fcall 0x4000,0x0000
    }

    printf("_\n");

    return -1;
}

int interruptHandler(void){
    /*restore all registers*/
    ds = process.buf_ds;
    es = process.buf_es;
    ax = process.buf_ax;
    cx = process.buf_cx;
    dx = process.buf_dx;
    bx = process.buf_bx;
    sp = process.buf_sp;
    bp = process.buf_bp;
    si = process.buf_si;
    di = process.buf_di;

    printf("hallo\n");
    getKonsoleInput();

    //while(1);

   // asm{
   //     siret
   // }
}

es ist so dass ich aus einem programm das genau einen sektor gross ist wieder fabelhaft wieder zurueckspringen kann das ist kein prob aber dann funkt das diskettenzugriff nichtmehr(nachdem ich das prog ausgefuerht habe) will ich aber einprogramm ausfuerhen das 6sektoren hat gehts nicht mehr :-( bochs sagt mir dann:
Zitat von: bochs
fails bounds test


mfg noob
5
Lowlevel-Coding / wie ladet ihr binarys
« am: 20. June 2006, 21:20 »
super noooooooos also was mich genau intressiert:

was funkt bei mir:
 + also ich kann meinen interrupthandler installieren und das funkt auch
 + ich kann die binary an einen bestimmten platz im speicher laden und dahin springen
 + ich kann mit hilfe des interrupts auch wieder zurueckspringen in den kernel
 
nur dann tut der kernel seine arbeit nicht mehr richtig weil der stack im arsch ist... was mich nun intressiert wie kann ich den stack und alle register an ne bestimmte stelle im speicher komplett sichern und wie kann ich den dann im interrupthandler dann wiederherstellen.

also nochmal was ich will und was noch nicht funkt

installiere interrupthandler ---- funkt
speichere stack und register an eine stelle im arbeinsspeicher ----- FUNKT NICHT
springe in externe binary ------- funkt
springe wieder zurueck in den kernel mit hilfe des interrupts ----- funkt
stelle stack wider her ------- FUNKT NICHT
fahre im kernel wie gewohnt weiter --- FUNKT NICHT
6
Lowlevel-Coding / wie ladet ihr binarys
« am: 20. June 2006, 11:29 »
@termite kannst du mir eventl deinen code zeigen? waer super nett danke!!!
7
Lowlevel-Coding / wie ladet ihr binarys
« am: 20. June 2006, 08:17 »
tja das mitn laden hab ich schon hinbekommen ich komm auch wieder zurueck in den kernel aber ich hab noch ein problem und zwar ich will im kernel wieder so weitermachen wie ich aufgehoert habe... dazu muesste ich den ganzen stack an irgendeine addresse laden... bzw irgendwie die register sichern... und das bekomm ich einfachnicht hin...

danke
noob
8
Lowlevel-Coding / wie ladet ihr binarys
« am: 19. June 2006, 13:11 »
nee nur wie man binarys laedt!!!
9
Lowlevel-Coding / wie ladet ihr binarys
« am: 18. June 2006, 18:42 »
danke fuer deine antwort mich intressiert aber eher wie ihr das macht mit dem stack sichern und den stack dann wieder zurueckspielen das funkt naemlich bei mir nicht!!
10
Lowlevel-Coding / wie ladet ihr binarys
« am: 17. June 2006, 18:08 »
hi!
ich bekomm es einfach nicht hin die binary korrekt zu laden es geht bei mir nur waenn der stack nicht manipuliert wird... koennt ihr mir eventl beispielcode zeigen wie ihr das macht?

waer super nett danke

mfg noob!!!
11
Lowlevel-Coding / binarys laden...
« am: 27. May 2006, 14:19 »
hi!

laden tu ich die bin folgendermassen:


int loadBin(char *paht){
    int seg = 0;
    int lsn = analytePath(paht);
    int i;

printf("%d\n", lsn);
   
    asm{
        mov ax, 0x8000
        mov es, ax
    }

    for(i = 0; i < 20; i++){
        readBin(seg, ((lsn) / 18) % 2, (lsn) / 36, ((lsn) % 18) +1, 1);
        seg+=512;
        lsn++;
    }

    asm {
        fcall 0x8000,0x0000
    }

    printf("_\n");

    return -1;
}


so das prog wird auch richtig geladen...

aber wie bekomm ich meine Einstellungen (stack,etc...) wieder zurueck?

danke...
12
Lowlevel-Coding / VESAmode streikt
« am: 19. May 2006, 20:15 »
Ich teste unter Bochs kann es sein das bochs dieses VESA zeugs nicht richtig unterstuetzt? 0x4f00 hab ich schon probiert aber irgendwie will das auch nicht.
13
Lowlevel-Coding / VESAmode streikt
« am: 19. May 2006, 19:56 »
Ich versuche zurzeit fuer ein kleines OS einen VESA mode im Real mode zu initialisieren. Doch irgendwie will das so gar nicht.
Der Kernel ist in C und ich verwende folgenden inline assembler Code:

asm {
     mov ah, 0x4f
     mov al, 0x02
     mov bx, 0x113
     int 0x10
}


Im register bx hab ich schon saemtliche mods durchprobiert, doch keiner funktioniert.
Wuerde mich ueber eure hilfe freuen.

mfg
noob
14
Lowlevel-Coding / binarys laden...
« am: 19. May 2006, 19:53 »
hi!

ich hab nun alles ausprobiert aber es funkt leider nicht :-( aber ich habe eine idee! immer waenn ich den interrupt aus dem kernel heraus aufrufe dann kann ich einfach mit konsole(); in meine konsole zurueckspringen und es funkt wunderbar... aber waenn ich das aus der applikation herausmache dann geht es nicht :-( nun stellt sich fuer mich die frage was anedert sich und ich bin zu dem schluss gekommen das es irgendwie was mit dem stack hat... wie kann ich den nach dem aufruf wieder in den originalzustand zurueckversetzen?

danke!
15
Lowlevel-Coding / binarys laden...
« am: 19. May 2006, 11:40 »
Zitat von: bitmaster
@noob: Sorry, aber scheinst noch nicht viel mit OS Programmierung am Hut zu haben.
bitmaster


tja aber es ist einfach so dass ich gerne nachfage... ausserdem kann man sich das ganze ja so nicht wirklich aus tutorials lernen kann... :-( tja und mit dem os will ich mich in die os entwicklung ja einarbeiten!!!

mfg noob
16
Lowlevel-Coding / PC ausschalten
« am: 18. May 2006, 20:59 »
tja bei mythbusters glaub ich wars so dass sie die cd nur sehr schwer zum zerfetzen gegracht haben der motor musste extrem stark sein(viel schneller als ein CD laufwerk) und die cd musste vorher schonmal in der microwelle gewesen sein.... also glaub ich nicht das von cdlaufwerken so viel gefahr ausgeht
17
Lowlevel-Coding / binarys laden...
« am: 18. May 2006, 20:55 »
Zitat von: PorkChicken

printf("Initialisiere Interrupts...");
   
    int buffer = ds;

    asm {
         jmp skip_wrapper
wrapper:
         pusha
         push ds
         push es
         push fs
         push gs
         call interruptHandler
         pop gs
         pop fs
         pop es
         pop es
         popa
         iret ; <------- das iret in dem handler brauchst du dann nicht mehr
skip_wrapper:
    }

    edx=(cs<<16)+wrapper;
    asm{
        mov cx,0x0
        mov ds,cx
        mov dword ptr[0xC4], edx
    }

    ds = buffer;

    printf("OK\n");



erstmal danke PorkChicken fuer deine antwort aber eins verstehe ich nicht... mit jmp skip_wrapper ueberspringst du ja alle pushs und popps? weiters frage ich mich warum muss ich alle segment register sichern ich nehm doch nur ds her... tja und wo genau soll ich diesen wrapper hernehmen? waenn ich den interrupt aufrufe? das kann ich mir nicht vorstellen denn ich brauch ja sowieso wieder einen anderen stack im kernel ich will ja von meinem interrupt aus nicht mehr zurueck in das programm...

tja... entschuldigt meine begriffstutzigkeit aber ich kann erst was programmieren waenn ichs verstehe...

danke nochmal fuer eure super hilfe!!
18
Lowlevel-Coding / binarys laden...
« am: 17. May 2006, 20:36 »
ich hab noch ne frage wie geb ich den interrupt in der IVT genau an ich wollte den interrupt

0x31 haben den hab ich folgendermassen in der IVT registriert:

 printf("Initialisiere Interrupts...");
   
    int buffer = ds;

    edx=(cs<<16)+interruptHandler;
    asm{
        mov cx,0x0
        mov ds,cx
        mov dword ptr[0xC4], edx
    }

    ds = buffer;

    printf("OK\n");


kann das so stimmen?

waenn ich dann in den interrupt springe und die ausgabe aufrufe:

int interruptHandler(void){
    konsole_main();

    printf("hallo\n");

    asm{
        siret
    }
}

kommen lauter so komische zeichen die eingabe funkt aber komischerweise nur irgendwo aufm bildschirm wird der curser gesetzt und dann kann man weiterschreiben...... was kann ich machen damit ich da sauber wieder rauskomme? ich glaub da muss ich irgendwas aufm stack aendern damit das ganze wieder passt oder? bidde bidde helft mir...
danke!

@nore tschuldigung aber ich kann dir nicht ganz folgen... ich will vom int aus ja gar nicht mehr zurueckspringen ich will wieder in den kernel springen
19
Das Wiki / Tutorial ueber Real Mode os ist feddich!
« am: 13. May 2006, 14:51 »
so hab das tut etwas kultiviert und es ist als pdf verfuegbar:

http://hazelnoot.ha.funpic.de/tut/osTut.pdf

zum leichteren durchlesen!!!! :-)
20
Das Wiki / Tutorial ueber Real Mode os ist feddich!
« am: 12. May 2006, 19:48 »
vl koennt ihr ja mein tut in eurem neuem magazin unterbringen :-) ich aenders auch gern nach euren wuenschen ab*gg*
Seiten: [1] 2 3 4

Einloggen