>>143
>>180
ソースを少し調べてみたので報告。コンパイルできるようなら以下の変更箇所確認して試してみるとよいかも。
それと、少し古いソース(np21w-0.86-rev26beta)で調べたので行数は違うかもです。
修正箇所はia32/cpu_mem.cの220行目からの関数cpu_stack_push_check内の229、230行目
start = sp - len;
limit = is32bit ? 0xffffffff : 0x0000ffff;
を
sp = (sp - 1) & (SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff);
start = (sp - len) & (SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff);
limit = sdp->u.seg.g ? 0xffffffff : 0x0000ffff;
に変更。SEG_IS_32BIT(sdp)のところは、意味的にはis32bitの方がよいのかも?(計算上は同じです)
一応変更の根拠としては、
まず検証環境として、config.sysに以下を追加
device=a:\ERCACHE.EXE /HM /M=A5-A7,D0-D3 /HSB-
これで、修正前のnp21wでtriple faultが発生するのを確認。
この状況でこの関数に入ってくるとき、sp=0x0000、len=0x0028になっており、修正前だとstartが0xffffffd8になって、
その後の(start > sp)の条件に引っかかってしまいます。
しかし、スタックのプッシュ処理は最初に格納するサイズ分減算し、そこからサイズ分書き込むので、
実際にはアドレス0x0000に書き込まれることはなくそういう意味では保護範囲のチェックとしては必ずしも適切ではないといえます。
ということで、変数spを実際に値が書かれる最終アドレスに書き換えてその上でアドレス判定をするように変更しています。
ついでに、limitの上限値の判定がセグメントディスクリプタのD/Bビットと見受けたので、Gビットに変更しています。
これについては関連して他の場所も直した方がよいのでは?と思うところがいくつかあったのですが、
十分に検証できていないのでそのままにしています。
PC-98エミュを語ろう17 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/09/11(月) 20:24:55.93ID:4N63lD/F0
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市早苗首相「私自身の声がAIでこんな風に使われるのかと思った」「週刊誌の記事が正しいという印象操作、大変心外。秘書を信じる」 ★3 [Hitzeschleier★]
- 【江別大学生集団暴行死】川村葉音被告(21)に無期懲役を求刑 判決は25日 ★3 [Hitzeschleier★]
- 【旭川】内田梨瑚被告「本当に申し訳ございません」涙ながらに謝罪→検察「なぜ泣いたんですか?」→内田被告「・・・・・・」 ★2 [Hitzeschleier★]
- 【平和教育】「学ぶ機会を奪わないで…」「辺野古沖転覆事故」きっかけに考える…信州から沖縄へ修学旅行を前に高校生と教育現場 [少考さん★]
- 【野球】「プロ野球選手を40人抱えている」と豪語…ゾンビたばこ密売の38歳容疑者、実母が明かす「米国挑戦」と「タバコ嫌い」 [Ailuropoda melanoleuca★]
- 【セブンイレブン】揚げ物半額セール、“想定を上回る売れ行き”に謝罪 SNS「現場の人がかわいそう」「店員に感謝しかない」 [樽悶★]
- 【言霊】高市早苗「木下は元気わよ!」高市早苗「私の秘書はステージ4の末期がんわよ!」高市「言葉の力で木下が末期がんになったわよ! [784319933]
- 【高市解散】高市「秘書の木下がステージ4の膵臓癌で」 新事実公表 議事録に記録 癌患者「はっ倒すぞコラァ!」★4 [617981698]
- 自民党・閣僚経験者「高市総理の答弁は無理があるよね」 [256556981]
- 【悲報】女が考える男の顔面点数公開→ケンモメンは全員0点なことが判明wwwwwwwwwwwwwwwwwwww [802034645]
- 👶🏿👶🏿😲🏡
- 【速報】川村葉音(21)、無期懲役wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww [226460578]