>>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
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 都立高の教諭が生徒2人と窃盗未遂疑いで逮捕「おりんは高く売れる…」などと助言か「肝試し的な感覚だった」と供述 [ポンコツ★]
- 【実況】ショートスリーパー堀大輔の7日間LIVE 本日最終日★36 [爆笑ゴリラ★]
- 「ゼロ打ちで勝つ準備をしていたのに」 スター戦術押し切れず デニー(氏)人気の衰退に気付くも時遅し (沖縄タイムス) [少考さん★]
- 牛肉に手が出なかった女性、消費税1%なら「控えていた外食に」…1万5000品目の値札を貼り替えるスーパー「従業員は疲弊」 [ぐれ★]
- ミャンマー人が《円安ニッポンの介護》を選ぶ深い理由…ベトナム人が「日本離れ」する裏で約2倍に急増、送金額は3倍に [煮卵★]
- 【文春】TBSがひた隠すVIVANT・福澤克雄監督(62)の“骨折パワハラ”《全治1カ月も激アマ処分》 [Ailuropoda melanoleuca★]
- (ヽ´ん`)「スカートめくれてるよ❤」「セックスしたことある?❤」JK「いい歳して恥ずかしくないんですか?」 [977261419]
- 【訃報】19歳の四国電力社員、パワハラ被害で飛び降り自殺、遺書には「俺を生んでくれてありがとう」 [339035499]
- 客「おまんじゅう5個のを5個」、店「5個入りのお饅頭を5つ、25個ですね」、客「5個のを2つだよ💢」 [256556981]
- 伊藤忠商事会長「しばらくはサウジ経由の石油は出てこなくなるが、日本にはアメリカがある。石油備蓄も多く、まだ1年くらいは大丈夫」 [256556981]
- コイに性的加害を加えた男を逮捕「泳ぐ姿を見て興奮した 前科も複数
- 【正論】レジェンドマンガ家「編集にみせて、なんか言われたから訂正して、それで売れなかったら責任って取ってくれんの?」 [591180291]