>>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
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- GMO熊谷代表「あなたお詫びしているのにボタン開けてどうするんだ」 会見中に責任者に服装注意 記者には「申し訳ありません」 [Hitzeschleier★]
- 玉城デニー前沖縄県知事「戦争は絶対にさせない、憲法の下、大きな声に」 国会前で1万4000人デモ (主催者発表) [少考さん★]
- 【命の砂時計】GMO熊谷正寿社長の「悔し泣き会見」に分かれる賛否「悪い会見の見本」「誠意を感じる」 「流行語大賞候補」の声も [Ailuropoda melanoleuca★]
- 冷蔵冷凍庫へのサイバー攻撃、9カ国に 欧州のスーパーで温度50度 [蚤の市★]
- 【野球】清原和博氏 左膝の手術を受けたことを明かす 9月に「人工膝関節置換術」リハビリも開始「必ず復活します」 [阿弥陀ヶ峰★]
- 【アイドル】FRUITS ZIPPERら所属のカワラボ 所属アイドルのXアカウントを一律休止「今回の対応は特定の出来事によるものではなく…」 [Ailuropoda melanoleuca★]
- 【NJPW】新日本プロレスワールド part.2638
- 他サポ 2026/27-86
- 柏レイソルおにぎり実況vs 大田ハナ・シチズン ☆☆☆
- 他サポ 2026/27-85
- 地方競馬実況8770
- こいせん 全レス転載禁止
- オリアナ=トムソンは俺の嫁🏡
- 【実況】博衣こよりのえちえちホロ甲2026エキシビジョンマッチ🧪★3
- 佐天涙子、涙の帰宅🏡
- 大阪市の行政システムで個人情報漏洩、日本人「維新最高やで!」 [245325974]
- マックのポテトはまとめ食いしたほうが美味い
- 【悲報】日本人ガキ、お母さんのトンカツを台無しにする [485187932]