[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1711] Re: VMware error.



小柳です。

Hidemi KAWAI wrote:
> 
>   こんにちは、川合です。
> 
> Koyanagi Masaaki さんは 2001/05/05 17:49:13 の「[OSASK 1705] Re:
>  VMware error.」で書きました:
> 
> >create_task() 内の4090行の
> >LLDT(DX);
> >において VMware が "Internal Monitor error" を出すことが分かりました。
>
>   そうなると、僕が知りたいのはDXの値です。つまり、LLDT(DX);を実
> 行する直前のEDXの値はいくつでしょうか?INT(0x03);を入れて、EDXを
> 値を調べて教えてください。

INT 0x03 Break Point
CS:EIP = 10:21EB
EAX = 396
ECX = 60
EDX = 0
EBX = 0
ESP = FFFFCFA4
EBP = 0
ESI = 1000
EDI = C00
tss = 55AA55AA
TR = 0

EDX は 0です。VMware 上ではなく通常起動でもこれと全く同じ結果
になりました。
インテル・アーキテクチャ・ソフトウェア・ディベロッパーズ・マニュアルの
LLDT を見ると、

>ソース・オペランドが0である場合は、LDTRは無効とマークされ、
>LDT内のディスクリプタへのすべての参照(LAR、VERR、VERW、または
>LSL命令によるものを除く) によって一般保護例外(#GP) が発生する。

と書いてあるので、不思議な気がします。

>   僕の予想では、VMware上では、4073行目にあるSLDT(DX);が正しく実
> 行されていないのではないかと想像しています。そのせいで、LLDTした
> ときにエラーが出るのでしょう。

SLDT(DX) の直後に INT 0x03 を入れてみたのですが、VMware 上でも
通常起動でもやはり EDX = 0 でした。

-- 
小柳 雅明(Koyanagi.Masaaki !Atmark! nifty.ne.jp)
「人の足を止めるのは"絶望"ではなく"諦観"
  人の足を進めるのは"希望"ではなく"意志"」
                  -- ARMS