30日OS自作入門27日目(Win10)
はじめに
LDTとライブラリをやるようです。
目次
LDTとライブラリ
まずはバグを直そう(harib24a)
×ボタンが動かなかった理由は、コンソールのタスクをスリープになっていたのに、終了処理等がコンソールタスクに依存していたのが原因のようです。
実行すると
30日自作OS本(harib23a)
— 猫(1010) (@Wagahaiha_toto) 2020年2月19日
Xボタンのバグが治った。 pic.twitter.com/VBbARpbzUg
アプリ実行中でもコンソールを閉じたい(harib24b)
修正箇所が多かったので、見返しやすいように箇条書き
・コンソールの×ボタンが押されたら、とりあえず非表示
・2024~2279割り当てを、コンソールのみ閉じるに割り当て
・カーソル関連をcons.shtの管理に変更
・hrb_apiにFIFOバッファを受け付けるようにして、4が来たら終了処理を行わせる
実行すると
30日自作OS本(harib24b)
— 猫(1010) (@Wagahaiha_toto) 2020年2月19日
アプリケーションを起動したままコンソールを閉じれるようになった pic.twitter.com/CCSRNQowXR
アプリケーションを守ろう(1)(harib24c)
これはアプリケーションと判定したら、そのアプリケーションのデータセグメントを攻撃しているようです。自分は調べるまでデータセグメントということに気付かなかったのですが、以下の方のブログがわかりやすかったです。
実行してみると
30日自作OS本(harib24c)
— 猫(1010) (@Wagahaiha_toto) 2020年2月19日
壊れちゃった…アプリケーションのデータセグメント… pic.twitter.com/5YjFduDnQY
アプリケーションを守ろう(2)(harib24d)
アプリケーションから、他のセグメントへアクセスできてしまうことが問題なため、そこをできないようにするようです。そのために使用するのがLDTで、GDTとの違いは以下のようになっています。
名前 | 違い |
---|---|
GDT | すべてのタスクからアクセス可能なセグメント |
LDT | 一部のタスクからのみアクセス可能なセグメント |
実行すると
30日自作OS本(harib24d)
— 猫(1010) (@Wagahaiha_toto) 2020年2月19日
crack7はLDTによって閉じ込められました。(crack7sは自分を攻撃してしまうコード) pic.twitter.com/V1IWzAzTzs
アプリケーションのサイズ改善(harib24e)
api関連のファイルを細かく分けて、必要なAPIだけ連結させるように修正したようです。
ここはVScodeの一括置換を使えば楽にできます。
実行すると
おぉ…!小さくなった
ライブラリ(harib24f)
・ライブラリという者は前節で上げたような、objファイルを繋げたものになる
・ライブラリアンという、ライブラリを管理するツールが必要
・sprintfとrandはztool/hariboteにあるらしい
実行すると
make環境の整理(harib24g)
・APP関連のディレクトリのMakefileはアプリケーションをビルドするのに使用する
・中間生成物を消す場合は、clean_fulか各ディレクトリのMakeでcleanする
・haribote.rulは著者のhari24gじゃないとエラーが出ていた(自分の入力ミスの可能性もあるので、後日確認)
これに書いてありました…
Makefileと同様に、ディレクトリの指定等をするファイルなので、ディレクトリ指定が間違えていたようです。
整理し終わると
メモ
・リンカはくっつけるかくっつけないかしかできない
・最初は、大きなプログラムを作るだけの手法だった。その後、コードという部品を使いまわすべく構造化プログラングという手法が登場して、ライブラリが生まれた。そして現在の、管理できないほど多くなった関数を管理するためにオブジェクト指向が生まれた。