Re: segmentierte Addressierung

From: Simon 'corecode' Schubert <corecode(at)fs.ei.tum.de>
Date: Tue, 15 Feb 2005 14:48:39 +0100

On 15.02.2005, at 08:20, Marc Santhoff wrote:

> static struct vm86context a_vmcontext;

wird das mal initialisiert? oder braucht man das nicht? genullt reichts
scheinbar ja auch.

> int
> sysctl_a_sernum(SYSCTL_HANDLER_ARGS) {
>
> struct vm86frame vmf;
> u_char *p;
> char s[10] = "0123456789";
>
> vm86_initialize();

das brauchst du vermutlich nicht. das passiert schon in init386().

> 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);

schon mal p ueberprueft? ich geh davon aus, dass das 0 zurueckliefert.
vermutlich musst du erst ein vm86_addpage() machen.

> error = vm86_getptr(&a_vmcontext, (vm_offset_t)p, &vmf.vmf_es,
> &vmf.vmf_bx);
> if (error != 0) {

die logik ist falschrum. error == 1 -> alles ok, error == 0 -> mapping
nicht gefunden.
ab hier gehts natuerlich nicht mehr sinnvoll...

> snprintf(s, sizeof(s),"getpointer");
> error = SYSCTL_OUT(req, &s, max);
> return 0;
> }
> error = vm86_datacall(0x15, &vmf, &a_vmcontext);

fehlerueberpruefung?

> 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.
>
> Sieht jemand den Fehler?

ich geh mal davon aus, dass die funktion in es:bx die adresse erwartet,
wo sie die daten hinschreiben kann, und nicht dass sie in es:bx die
adresse der daten zurueckliefert (sonst waers ja auch nicht sinnvoll
speicher zu reservieren).

... und dann steht das ergebnis vermutlich in der ge'addpage()'ten
seite.

alles nur reine spekulation, ich verwende kein freebsd-5

gruesse
   simon

-- 
/"\
\ /
  \     ASCII Ribbon Campaign
/ \  Against HTML Mail and News

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 - 14:50:00 CET

search this site