引っ張りすぎ感があるけど
前回eipの書換法の欠陥に気づいた。
一見するとちょっとテクニカルでかっこいい手法でナイスアイデアに思えるのだが・・・。
001 void mouseHandler() ★(2) 002 { 003 // 何らかの処理 004 } 005 006 int main() 007 { 008 /* IRQ12のハンドラを登録 */ 009 syscall_set_irq_handler(12, (void*)mouseHandler); 010 011 for (;;) 012 { 013 // 大事なお仕事 ★(1) 014 } 015
前回説明した通り、irqハンドラは大事なお仕事 ★(1)の実行を中断して処理され、処理終了後また大事なお仕事 ★(1)に復帰するのだ。
つまり、処理を中断して別の作業が終了したら元の状態に復帰しなければならないのである。
そこで気づいた・・・
レジスタが破壊されて復帰しないじゃねぇかぁー・・・・・・・orz。
Monaのカーネル知識を総動員して、プロセスのメモリイメージにpusha/popaのオペコード?を挿入することも不可能ではないけど非現実的だ・・・。
ここまで苦労して来たものがすべて水の泡に・・・。
そんな時、失意のどん底で呆然とするわたしに一筋の光が! (続く)