Re: segmentierte Addressierung

From: Marc Santhoff <M.Santhoff(at)t-online.de>
Date: Tue, 15 Feb 2005 17:29:17 +0100

Am Di, den 15.02.2005 schrieb Oliver Fromme um 15:21:
> Marc Santhoff <M.Santhoff(at)t-online.de> wrote:
> > Also das einbauen nd aufrufen klappt prima, aber ich bekomme die zu
> > übertragene Variable nicht gesetzt. Vorgabe ist, den Zeiger auf die
> > Zielvariable für 10 Zeichen(char) in ES:BX zu übergeben:
> >
> > static struct vm86context a_vmcontext;
> >
> > int
> > sysctl_a_sernum(SYSCTL_HANDLER_ARGS) {
> >
> > struct vm86frame vmf;
> > u_char *p;
> > char s[10] = "0123456789";
> >
> > vm86_initialize();
> >
> > bzero(&vmf, sizeof(vmf));
> >
> > vmf.vmf_ah = 0xEA;
> > vmf.vmf_al = 0x01;
> > vmf.vmf_edx = 0x4648;
> > vmf.vmf_cl = 1;
> >
> > p = (u_char *)vm86_getpage(&a_vmcontext, 1);
> > error = vm86_getptr(&a_vmcontext, (vm_offset_t)p, &vmf.vmf_es, &vmf.vmf_bx);
> > if (error != 0) {
> > snprintf(s, sizeof(s),"getpointer");
> > error = SYSCTL_OUT(req, &s, max);
> > return 0;
> > }
> > error = vm86_datacall(0x15, &vmf, &a_vmcontext);
> > snprintf(s, sizeof(s), "0: %x %x %x %x", vmf.vmf_cl, vmf.vmf_es, vmf.vmf_bx, vmf.vmf_dx);
> >
> > error = SYSCTL_OUT(req, &s, max);
> >
> > return 0;
> > }
> >
> > Ausgabe bei "sysctl hw.sernum":
> > hw.sernum: 0: 0 0 0 6b6f
> >
> > Der Inhalt von DX ist 6B6F bei Erfolg. Nur die Adresse ES:BX ist immer
> > 0x0000, damit kann ich natürlich nichts anfangen, außer durch
> > dereferenzieren den Kernel in Panik zu versetzen.
>
> Hmm, bist Du sicher, daß nach Rückkehr aus dem Software-
> Interrupt ES:BX unverändert auf Deinen Speicher zeigen?
> Vielleicht ist es ja normal, daß die genullt werden.

Nein, aber ich hatte auch p geprüft und der ist ebenfalls immer 0x0000.
Copy & Paste-Fehler.

> Was steht denn danach in Deinem Speicherbereich (d.h. p)?
> Hast Du mal geguckt, ob er die gewünschte Info dorthin
> geschrieben hat?

S.o., leider hat er nicht. Aber der Aufruf des int15 selbst setzt
ansonsten seine Rückgabe in den Registern korrekt für eine erfolgreiche
Ausführung (CL=0 & DX=0x6B6F). Daran scheints nicht zu liegen.

Gruß,
Marc

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 15 Feb 2005 - 17:32:45 CET

search this site