Ubuntu 18.04.1 LTSでやる 30日OS本 〜21日目〜

Ubuntu 18.04.1 LTSでやる 30日OS本、21日目です。 他の章へのリンクはここにあります。

1. 文字列表示APIを今度こそ

本の通りにやると動くようになりました。

2. アプリケーションをC言語で作ってみたい

リンカスクリプトbootpack.hrbを作ったものをここでは流用しました。 また、先頭6 byteの書き換えはバイナリエディタで編集する以外にもリンカスクリプトを書き換えることでも達成できます。

(前略)
.head 0x0 : {
        LONG(64 * 1024)       /*  0 : stack+.data+heap の大きさ(4KBの倍数) */
        LONG(0x69726148)      /*  4 : シグネチャ "Hari" */
(後略)

↑これをこう↓

(前略)
.head 0x0 : {
        LONG(0x000016E8)
        LONG(0x6972CB00)
(後略)

この節の最後でcmd_appに細工をしたら、これは元に戻します。

また、api_putcharに関数をa_nask.nasにあたるファイルを作成して記述する代わりに、インラインアセンブラで書いてしまうこともできます。

void api_putchar(char c){
    __asm__ volatile(
        "mov edx, 1\n"
        "mov al, %0\n"
        "int 0x40\n"
        :
        :"r"(c)
        :"edx", "eax"
    );
    return;
}

void app_main(){
    api_putchar('A');
    return;
}

intel記法を用いているので、コンパイラオプションに-masm=intelが必要です。また、gccではこれで良いのですが、 clangでは更に__asm__の中に.intel_syntax noprefixを書いてやる必要があるらしいです。

ただ、今後のことを考えると何らかのファイルに分離するべきな気がします。

3. OSを守ろう(1)

確かにcrack1を実行するとファイルが読めなくなる?ようです。

4. OSを守ろう(2)

本では実行しても何もおこらないとなっていますが、手元の環境ではHaribote OSが再起動しました (どこかを間違えている可能性は排除できませんが)。

5. 例外をサポートしよう

本ではQEMUのバグで例外が出ないとありますが、そのバグは修正されているようで例外が出ることを確認できました。

6.・7. OSを守ろう(3)・(4)

(3)で作ったcrack2でも(4)の作業によって例外が出るようになりました。