OSも守ろう
1) 文字列表示APIを今度こそ
- 前回の hello2 は CS のベースがあってなかったため,ちゃんと動作しかなった
- 0xfe8という特定の場所を取る方法でかいけつ
2) アプリケーションをC言語で作ってみたい
- アプリケーション用のAPIを作る
[FORMAT "WCOFF"] ; オブジェクトファイルを作るモード
[INSTRSET "i486p"] ; 486の命令まで使いたいという記述
[BITS 32] ; 32ビットモード用の機械語を作らせる
[FILE "a_nask.nas"] ; ソースファイル名情報
GLOBAL _api_putchar
[SECTION .text]
_api_putchar: ; void api_putchar(int c);
MOV EDX,1
MOV AL,[ESP+4] ; c
INT 0x40
RET
- C 言語でもプログラム
void api_putchar(int c);
void HariMain(void)
{
api_putchar('A');
return;
}
- Cでコンパイルしたものはそのままはまだ使えないので、最初の6バイトをE8 16 00 00 00 CB に書き換える
3) OS を守ろう1
- あるメモリを書き換えるだけて dir コマンドを破壊
4) OS を守ろう2
- セグメントと割り込みを守る
- アプリ専用のメモリを割り当てて、そこで実行させる
- (ここのアセンブリはまたじっくり読むことにする)
5) OS を守ろう3
- アセンブリで攻撃する方法はあった
6) OS を守ろう4
- 終了APIを追加
- アプリケーションに特定のINT命令を許可 (0x60のところ)
set_gatedesc(idt + 0x40, (int) asm_hrb_api, 2 * 8, AR_INTGATE32 + 0x60);
- ちゃんと例外が投げられました
今日はここまで。寝よう