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

動的ライブラリの観察その2

今回は動的ライブラリの関数呼び出しの様子を観察してみる。動的ライブラリで定義されている関数のアドレスは動的ライブラリがメモリにロードされるまで決定しない。そのどこに有るかわからない関数をどのようにして呼び出すのかが見どころ。 動的ライブラリ…

動的ライブラリの観察その1

今回からは動的ライブラリが利用される様子を観察してみる。 ライブラリとは リンク可能なオブジェクトファイルの集まり。ライブラリには静的ライブラリと動的ライブラリが有る。 静的ライブラリ 実行形式ファイルには必要なコードが全てコピーされる 実行形…

C++のprivateプロパティを改竄する

前回、C++(gcc)のインスタンスの正体はインスタンス変数(プロパティ)を格納するための記憶領域だと言うことがわかったので、それを元にチョットお遊び。 ソース(Hoge9.cpp) #include <stdio.h> class Hoge9 { private: int hoge; public: void printHoge(); }; void H</stdio.h>…

C++のインスタンスとは

オブジェクト指向の入門書の冒頭にはこういう説明がよく出てくる。 クラスはオブジェクトの設計図 オブジェクトはデータと振舞いをカプセル化したもの インスタンスはオブジェクトの実体 これが C++ ではどのように実現されているかを今回は観察してみる。 …

OS Xの「現在非使用中」のメモリを開放する

自分のマックはメモリが 4GB の MacBook Pro。ちなみにこれがMacデビュー機。VMWareを2個以上起動するとMacの動きもVMWareの動きもカクカクカクカクで使い物にならなくなる。三万円くらいの8GBメモリがネットに有ったので換装してみた。Micron製のMT16JSS512…

Mach-Oのリロケーション情報を読み込む

引き続き、共有ライブラリの仕組を知るための準備でMach-Oの構造を調べる。今回はリロケーション情報を読み込んでみる。環境はx86_64 リロケーションとは 最終形式にリンクされる前の中間形式のMach-Oファイルにはコードやデータが含まれているが、コードに…

__PAGEZEROセグメントでヌルぽ体験

前回、Mach-Oのセグメント定義をロードしたときに__PAGEZEROセグメントと言うのが出てきた。興味を引かれたのでもうちょっと触ってみる。環境はx86_64。 __PAGEZEROセグメントに関して、アップルのリファレンスにはこう書いてある。 __PAGEZEROセグメントは…

Mach-Oのセグメント&セクション定義を読み込む

今回も引き続き共有ライブラリの仕組を知るための準備としてMach-Oの構造を学習。今回はセグメントとセクションに関する情報を読み込んでみる。環境はx86_64 セグメントとセクション 図1のように、Mach-Oファイルにはロードコマンドに続いてセグメントと呼…