Re: segmentierte Addressierung

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Tue, 15 Feb 2005 15:21:05 +0100 (CET)

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.

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

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
With Perl you can manipulate text, interact with programs, talk over
networks, drive Web pages, perform arbitrary precision arithmetic,
and write programs that look like Snoopy swearing.
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 - 15:22:35 CET

search this site