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)の作業によって例外が出るようになりました。