よもぎのOS自作入門 21日目/30日
はじめに
これは2020年夏休み企画「30日でOS自作してみよう!」21日目の記事です。
企画についてはこちら
今日やったことを書いていきます。30日やるのって難しいですね……
今日の進捗
不正なセグメントで実行するアプリケーションに対して、例外処理をしてエラーを吐き出せるようにしました。一般保護例外です。
今日やったこと
わりと見た目的な面白さが少ない回だったと思います。もうちょっと自分の中で咀嚼しないと……
前回はアプリケーションをアセンブリ言語*1で書いていたわけですが、今度はC言語で書いてみます。 できた。
文字を引数にとって表示する関数の部分はint 0x40
での割り込み処理が必要で、アセンブリ言語で書きましたが、大枠はCで書いています。
ここでメモリの中でファイルの情報があるあたりをぶち壊しするプログラムを作ります。
void HariMain(void) { *((char *)0x00102600) = 0; return; }
これに対して、OSが動くセグメントとアプリケーションを動かすセグメンテーションを切り分ける、切り替えるようにします
この切替をOSが提供するので、知らねぇ!ってかんじで無視するアプリケーションを動かしてみます。 lsコマンドがぶっ壊れます。
[INSTRSET "i486p"] [BITS 32] MOV EAX,1*8 MOV DS,AX MOV BYTE [0x102600],0 RETF
これに対して、x86ではセグメント定義の際に、アクセス権に0x60
を足すことで、アプリケーション用のセグメントということにできます。
OSのセグメントを触れようとした際に例外を起こしてくれます。
こうして例外が起きたものが今日の進捗に挙げた感じになってます。
今日の範囲はなるほどなぁとなりきれてないので今後の自分に期待します。
明日も一日頑張るぞい!