LoginSignup
0
0

More than 5 years have passed since last update.

メモ:「30日でできる!OS自作入門 」21日目

Posted at

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);
  • ちゃんと例外が投げられました

スクリーンショット 2018-12-25 0.57.52.png

今日はここまで。寝よう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0