風景といいつつ覚書
マウス割込みの中でページディレクトリを切り替えることにより、ターゲットプロセスのスタックをほげほげする。んでもってフックに利用しようという腹なのだが。(これだけで通じるか?)
切り替えるとあっさりお亡くなりになる。そんなときはbochs君の登場だ。
あとページディレクトリ切り替えもアセンブラでちょいと書き直して不確定条件を減らそう。
とりあえずMonaの起動シーケンスから考えてターゲットページディレクトリはの物理アドレスはほぼ静的に決まるので以下の感じで調べてみた。
arch_set_cr3: push eax mov eax, 0x22D000 ' 即値で突っ込んじゃえー mov cr3, eax pop eax ret
ここに無限ループを入れるとどうやら最後のretで死ぬらしい。
つーことは。スタックを取り出してbochsのレジスタを見てみよう。(Monaが盛大に死ぬのでレジスタをMona上でダンプすることはとりあえず諦める。)
arch_set_cr3: push eax mov eax, 0x22D000 mov cr3, eax pop eax pop ebx ' ここでret先をebxにいれて forever: ' 無限ループー。bochsをここで停止すればebxを見ることが出来る。 jmp forever ret
すると思いがけない事実が!! (続く)