2010-02-01から1ヶ月間の記事一覧

Mach-Oのシンボルテーブルを読み込む

前回に引き続き共有ライブラリの仕組を知るための準備としてMach-Oの構造を調べる。今回はシンボルテーブルを読み込んでみる。環境はx86_64。 シンボルとは 私達がソースを書く時には関数や変数に int i; i = foo(); の様に文字列の名前を付ける。しかし、CP…

Mach-Oのヘッダとロードコマンドを読み込む

動的ライブラリの仕組みを知りたかったので、その準備としてMach-Oの構造について調べてみた。環境はx86_64。 Mach-Oとは Mac OS Xでプログラムやライブラリをディスクに格納するために標準で使用されるフォーマット。中間形式(リンク前)にも最終形式(リンク…

カーネル制作体験

低レベル層に興味がある人にはインテルの、ここ(日本語資料)とか ここ(英語資料)とかにあるソフトウェア開マニュアルは非常に面白い読み物だと思う。でも実際に試してみないと分かった気がしないなーと言うことでカーネルを作ってみることにした。とりあえず…

MMX,SSE体験

アセンブラ。インストラクションリファレンスを眺めながら、「あ、これ試してみよー」みたいなのが出来て楽しいな。基本情報なんとか試験用に考案されたCOMET IIというシンプルな仮想コンピュータとそれ用のアセンブリ言語のCASL IIと言うのが有る。いきなり…

インラインアセンブラでCPUIDその4

i386用の実行ファイルでエラーが発生した原因はPICで利用するebxレジスタをcpuid命令が破壊してしまったことが原因だった。 ではなぜx86_64用の実行ファイルではエラーが発生しなかったのかを今回は調べてみる。 一時ファイルを残すようにコンパイル。 $ gcc…

インラインアセンブラでCPUIDその3

今回は前回チラっと出てきた「pic」について。 PICとはPosition Independent Codeのこと。 仮想メモリ上のどこにロードしても、何も手を加えずに動作させることのできるコードのこと。 プログラムは通常はディスクにファイルとして存在し、実行時にメモリに…

インラインアセンブラでCPUIDその2

前回のエントリ( d:id:teru_kusu:20100203 )で次のようなコードをx86_64用のコードにコンパイルすると実行しても問題ないが、i386用のコードにコンパイルすると実行時にBus Errorと言うメッセージと共にクラッシュすると言う現象が発生。 この原因を今回は調…

インラインアセンブラでCPUID

インテル系(x86)アーキテクチャのcpuid命令を使用して、 プロセッサがサポートするリニアアドレスと物理アドレスのビット幅を取得してみる。 プログラムがメモリにアクセスするためには CPUのメモリ管理機構を経由することになる。 その中でアドレス変換が行…