本発明は、コンピュータ上で実行される種々の実行バイナリイメージを作成する情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体に関するものである。
Linux(登録商標)やWindows(登録商標)などのようなマルチタスク型のOS(オペレーティングシステム)が搭載されている機器やコンピュータでは、多くの場合、動的ローディングシステムを採用している。これは、実行バイナリプログラムの実行時に初めて、そのプログラム本体や使用する共有ライブラリのアドレスを決定するシステムであり、再配置処理、すなわち使用するシンボルのアドレス解決を行う必要がある。そのため、実行バイナリプログラムの情報の中に、再配置情報やシンボル情報が含まれる。プログラムを実行すると、動的ローダがこれらの再配置情報やシンボル情報を使用して、関数や変数のアドレスを確定するので、これらの情報は動的ローディングシステムの実行バイナリプログラムでは必須であった。したがって、実行バイナリプログラムの実行コードであるテキスト情報やデータ情報などとともに、それらの再配置情報やシンボル情報を、実行バイナリイメージの中に含める必要があった。
上記背景のもとで、ROM(リードオンリメモリ)のサイズ削減のための従来技術として、組み込んだローダを用いて一度プログラムを実行した上で、共用ライブラリのアドレス解決に必要な構造を、ROMとは別の記憶装置に保存し、かつ実行バイナリプログラムからその構造を削除した上で、二度目に実行する際には、記憶装置に保存されたアドレス解決に必要な情報を使用して、ポインタを再配置してアドレス解決を行う技術が開示されている(例えば、特許文献1参照)。
しかしながら、前記従来の技術では、共用ライブラリのアドレス解決に必要な構造を、外部あるいは別の記憶装置に持つという点で、ROMに載せる実行バイナリプログラムのデータサイズを減らしてはいるが、別途構造データを保持する記憶容量が必要になる。そのため、結局余分な記憶領域を使用するという問題が残る。
また、動的ローディングシステム上で動作させるためには、実行バイナリプログラムが持つ再配置情報やシンボル情報のうち、どのような条件下でどの箇所を本当に削除できるのか明らかではないという課題があった。
さらに、上記問題とは別に、実行バイナリプログラムの情報を一部編集してしまったり削除してしまったりすることによって、実行バイナリプログラムの内部構成が変化して、実行コード本体であるテキスト情報やデータ情報の配置アドレスが変化する可能性がある。その場合、全ての実行バイナリプログラムの中で、元々変化が生じた実行バイナリプログラムを利用するためにその位置を指していた箇所を検出し、変化した分だけアドレスを補正する必要が生じる。この補正がないと実行バイナリプログラムはプログラムとして動作しない。しかしながら、実行バイナリプログラムが、変化したアドレス位置を検出することは非常に困難であり、単純に実行バイナリプログラムの持つ再配置情報やシンボル情報を削除できないという課題があった。
特開平10−228381号公報
本発明は、上記の問題を解決するためになされたもので、実行バイナリイメージのデータ量を削減することができる情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とするものである。
本発明の一局面に係る情報処理システムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
本発明の他の局面に係る情報処理方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
本発明の他の局面に係る実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備える。
本発明の他の局面に係る実行バイナリイメージ作成方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含む。
本発明の他の局面に係る実行バイナリイメージ作成プログラムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる。
本発明の他の局面に係る実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる実行バイナリイメージ作成プログラムを記録している。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
本発明の他の局面に係る実行バイナリイメージ実行装置は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
本発明の他の局面に係る実行バイナリイメージ実行方法は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
本発明の他の局面に係る実行バイナリイメージ実行プログラムは、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる。
本発明の他の局面に係る実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる実行バイナリイメージ実行プログラムを記録している。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶される。そして、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
本発明によれば、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
本発明の目的、特徴及び利点は、以下の詳細な説明と添付図面とによって、より明白となる。
本実施の形態における実行バイナリイメージ作成装置の構成を示すブロック図である。
実行バイナリプログラムの内部構成の一例を示す図である。
実行バイナリプログラムの代表的なセクションについて説明するための図である。
実行バイナリ読み取り部が管理する実行バイナリプログラムの情報の内部管理構造の一例を示す図である。
シンボルのアドレス解決の処理の流れを説明するための模式図である。
アドレス解決済みである実行バイナリプログラムの関数呼び出しについて説明するための模式図である。
“.rel”系セクションと“.dynsym”セクションと“.dynstr”セクションとの関係を示す図である。
シンボル情報の内部管理構造の一例を示す図である。
実行バイナリプログラムの複数のシンボルが文字列を共用する場合の動作を説明するための模式図である。
シンボル情報の内部管理構造を作成する処理手順の一例を示す第1のフローチャートである。
シンボル情報の内部管理構造を作成する処理手順の一例を示す第2のフローチャートである。
実行バイナリ書き換え部が特定データに書き換える領域を集約しない場合の動作を説明するための模式図である。
実行バイナリ書き換え部が特定データに書き換える領域を集約する場合の動作を説明するための模式図である。
実行バイナリ書き換え部が特定データに書き換える領域を実行バイナリプログラム全体で集約する場合の動作を説明するための模式図である。
(A)は、2つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの一例を示す図であり、(B)は、共用ページを利用した実行バイナリイメージの一例を示す図である。
共用ページを利用した実行バイナリイメージと、実行バイナリプログラムが実行される際のアドレス空間との関係を説明するための模式図である。
本実施の形態における情報処理システムの構成を示す図である。
本実施の形態における情報処理システムの別の構成を示す図である。
以下、本発明の実施の形態について、図面を参照しながら説明する。
図1は、本実施の形態における実行バイナリイメージ作成装置の構成を示すブロック図である。本実施の形態における実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムを入力とし、実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部1と、実行バイナリ読み取り部1で読み取られた実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部2と、削除可能領域検出部2において検出された実行バイナリプログラムの削除可能領域を、特定のデータに書き換えて実行バイナリプログラムを再構成する実行バイナリ書き換え部3と、実行バイナリ書き換え部3から受け取った少なくとも一つの実行バイナリプログラムをコンピュータ上で認識し実行できる形式に変換する実行バイナリイメージ作成部4とを備えて構成される。
なお、本明細書における実行バイナリプログラムは、バイナリ形式の実行コード及び実行データを含む。また、本実施の形態において、実行バイナリ読み取り部1が実行バイナリ読み取り部の一例に相当し、削除可能領域検出部2が削除可能領域検出部の一例に相当し、実行バイナリ書き換え部3が実行バイナリ書き換え部の一例に相当し、実行バイナリイメージ作成部4が実行バイナリイメージ変換部の一例に相当する。さらに、本実施の形態において、実行バイナリイメージ作成プログラムが例えばROM(リードオンリメモリ)に記憶されており、実行バイナリイメージ作成プログラムが実行バイナリ読み取り部1、削除可能領域検出部2、実行バイナリ書き換え部3及び実行バイナリイメージ作成部4としてCPU(中央演算処理装置)を機能させる。
以上のように構成された実行バイナリイメージ作成装置について、その構成の詳細と動作とを以下に述べる。まず、実行バイナリ読み取り部1は、コンピュータ上で動作する実行バイナリプログラム、すなわち実行形式のファイルを入力とする。まず、この実行バイナリプログラムの形式に関して以下に説明する。
現在、種々の実行形式が存在する。例えば、ELF(Executable and Linking Format)形式、a.out形式、COFF(Common Object File Format)形式、ECOFF(Extended COFF)形式、及びPE(Portable Executable)形式などが代表的な実行形式である。これから本実施の形態の説明を容易にするために、Unix(登録商標)やLinux(登録商標)で使用され、実行形式として代表的なELF形式の実行バイナリプログラムを例に挙げて説明を行うが、本実施の形態はELF形式の実行バイナリプログラムに限定されるものではなく、他の実行形式に対しても同様に実施することができる。
実行バイナリプログラムの内部構成を、ELF形式の構成を例にして図2を用いて説明する。図2は、実行バイナリプログラムの内部構成の一例を示す図である。実行バイナリプログラムの先頭には、実行バイナリプログラム全体の情報を管理するELFヘッダ101が存在する。このELFヘッダには、アプリケーションプログラムか共有ライブラリかを区別する情報や、後続するプログラムヘッダ102やセクションヘッダ104へのオフセット情報や、その他実行バイナリプログラム全体に関わる情報が格納されている。
後続するプログラムヘッダ102には、複数のセグメントと呼ばれる領域を管理する情報が格納されている。この各セグメントには、1つあるいは複数のセクションが属する構成になっている。そして、実行バイナリプログラムの実データとなるセクション103が、役割ごとにセクション1からセクションNまで複数個存在し、それらの各セクションを管理するためのセクションヘッダ104が存在する。
ここで、実行バイナリプログラムの実データとなる代表的な各セクションについて説明する。図3は、実行バイナリプログラムの実データとなる代表的な各セクションについて説明するための図である。図3のセクション名111は、各セクションの名称を表している。セクションの概要112は、各セクション名111に対応する各セクションの働きを説明している。動的ローディングシステムは、プログラムの実行時に初めて、使用する実行バイナリプログラムである共有ライブラリのアドレスを決定するシステムである。そのため、動的ローディングシステムでは、再配置処理、すなわち使用するシンボルのアドレス解決を行う必要がある。この再配置処理や、シンボルのアドレス解決のために、図3に示す複数のセクションが利用される。
例えば、その中でも代表的なセクションを挙げて説明すると、“.dynstr”セクションは、実行バイナリプログラム中の動的リンクに使用するシンボルの文字列そのものを保持する。“.dynsym”セクションは、実行バイナリプログラム中の動的リンクに関するシンボル情報を、各シンボルに対して管理していて、“.dynstr”セクションに存在する文字列を指し、その他のシンボル情報(値やサイズ情報)なども保持している。“.rel”の接頭語から成り立つ一連のセクションは、再配置情報を管理する再配置セクションであり、実行バイナリプログラム中の再配置すべき領域を指し、また再配置の対象となるシンボルを特定するために“.dynsym”セクションの所定のエントリを指している。また、その他、シンボルを検索するための“.hash”セクションや、各シンボルのバージョンタイプを示す“.gnu.version”系のセクションなどがシンボル情報に関連するセクションである。
なお、ELF形式の実行形式を例に挙げて説明したが、他の実行形式でも同様の構成を採用しており、同様の働きを持つセクションから構成されている。
実行バイナリ読み取り部1は、これまでに述べた構成を持つ実行バイナリプログラムが入力されると、実行バイナリプログラムの情報を実行形式に応じて読み取り、その構造を内部で管理する。これにより、実行バイナリプログラムを解析しやすく、あるいは再構成しやすくなる。図4は、実行バイナリ読み取り部1が管理する実行バイナリプログラムの情報の内部管理構造の一例を示す図である。
図4に示す通り、実行バイナリ読み取り部1は、実行バイナリプログラムの中に一つしかないELFヘッダやプログラムヘッダの情報を各々読み取って、実行バイナリプログラム全体に関わる情報を管理する。また、複数存在するセクションに対しては、実行バイナリ読み取り部1は、セクションごとに生成するセクション管理構造121を利用して各セクションを管理する。このセクション管理構造121は、独自セクション管理情報122、セクションヘッダ123及びセクションデータ管理部124で構成される。セクションデータ管理部124は、セクションの実データが存在するセクションデータ部125を管理する。独自セクション管理情報122は、セクションデータ管理部124及びセクションデータ部125とセクションヘッダ123とを含めてセクションに関わる情報を管理する。
なお、ここで挙げた実行バイナリプログラムの内部管理構造は、あくまで一例に過ぎず、実行バイナリプログラム全体に関わる情報や、各セクションを管理できる構造であれば他の構造でもかまわない。
実行バイナリ読み取り部1は、実行バイナリプログラムが入力されると実行バイナリプログラムの内部の構成情報を読み取り、図4に例示するように実行バイナリプログラムの内部情報の内部管理構造を構築して削除可能領域検出部2に渡す。この内部管理構造によって、削除可能領域検出部2は、各セクションの情報を取得し解析することが可能になる。
削除可能領域検出部2は、実行バイナリ読み取り部1から実行バイナリプログラムの内部の構成情報(内部管理構造)を受け取り、シンボルのアドレス解決に利用される再配置情報やシンボル情報を解析し、それらのうち削除可能な領域を検出して、実行バイナリプログラムの内部の構成情報とともに削除可能と検出した情報を、実行バイナリ書き換え部3に渡す。
通常、一般的な動的ローディングシステムにおいて、実行バイナリプログラムの実行時に初めて、そのプログラム本体や使用する共有ライブラリのアドレスを決定し、シンボルのアドレス解決を行う。シンボルのアドレス解決を行う際に、再配置情報やシンボル情報を利用するため、通常それらの情報を削除すると、プログラムとして動作しなくなる恐れがある。
図5を用いて、シンボルのアドレス解決の処理の流れを説明する。図5は、シンボルのアドレス解決の処理の流れを説明するための模式図である。あるプログラムAが共有ライブラリAに存在するliba_func関数134を呼ぶ場合、プログラムAが実行されるまで共有ライブラリAのアドレス空間上の位置は不定である。プログラムAが実行されて、共有ライブラリAの位置が決定されると、初めてliba_func関数134の位置が決定される。そこで、プログラムAの中でliba_func関数を呼んでいる領域131が、プログラムAの再配置情報やシンボル情報132により特定され、さらに共有ライブラリAの中にあるliba_func関数の位置が、共有ライブラリAの再配置情報やシンボル情報133によって決定される。そして、プログラムAから正しくliba_func関数にジャンプできるように設定される。
上記のようにシンボルのアドレスが未解決の実行バイナリプログラムでは、再配置情報やシンボル情報をプログラムの実行時に使用する可能性がある。しかし、本実施の形態の実行バイナリ読み取り部1では、すでにシンボルのアドレス解決を実施済みの実行バイナリプログラムを入力とすることができる。
また、実行バイナリ読み取り部1は、実行バイナリプログラムが入力された時に、その実行バイナリプログラムがすでにアドレス解決済みであるか否かを確認し、アドレス解決済みであるか否かを表すアドレス解決情報を削除可能領域検出部2に渡す。削除可能領域検出部2は、実行バイナリ読み取り部1によって読み取られたアドレス解決情報がアドレス解決済みであるか否かを判定し、実行バイナリプログラムがアドレス解決済みでないと判定された場合、その実行バイナリプログラムの再配置情報やシンボル情報を削除可能領域として検出しない。
そのような実行バイナリプログラムの関数呼び出しの例について説明する。図6は、アドレス解決済みである実行バイナリプログラムの関数呼び出しについて説明するための模式図である。図6のプログラムBでは、元々共有ライブラリBのlibb_func関数144を呼ぶ領域141がある。しかしながら、プログラムBや共有ライブラリBを実行する前に、あらかじめ共有ライブラリBのアドレス空間上の位置が決定している。そのため、プログラムBの関数呼び出し領域141には、実行する前にlibb_func関数にジャンプするためのアドレス(図6では“0x????????”)が直接書かれている。したがって、この場合、図5においてアドレス解決のために利用していたプログラムBの再配置情報やシンボル情報142、及び共有ライブラリBの再配置情報やシンボル情報143を使用することはない。
したがって、実行バイナリ読み取り部1にシンボルのアドレス解決を実施済みの実行バイナリプログラムが入力され、削除可能領域検出部2がシンボルのアドレス解決に必要な再配置情報やシンボル情報の一部を削除可能な領域として検出して、実行バイナリ書き換え部3に渡しても、実行バイナリ書き換え部3は正常に動作する実行バイナリプログラムを出力する。
なお、本実施の形態では、関数呼び出しに関して例を挙げて説明したが、変数参照のためのアドレス解決やその他のアドレス解決なども関数呼出しと同様の仕組みによって実施される。
シンボルのアドレス解決を実施済みの実行バイナリプログラムは、元々動的ローディングシステム用に作成された実行バイナリプログラムを利用して作成することが可能である。シンボルのアドレス解決が実施済みの実行バイナリプログラムを作るための方法の一例を以下に示す。
まず、全ての共有ライブラリのアドレス空間を重複しないようにあらかじめ定める必要がある。なぜなら、共有ライブラリは複数のアプリケーションプログラムや別の共有ライブラリから参照される可能性があり、共有ライブラリのアドレス空間上の位置はシステム全体で一意に定める必要があるためである。もし、複数の共有ライブラリのアドレス空間が重複すると、それらを利用するアプリケーションプログラムが特定のアドレス空間を指した時に、いずれの共有ライブラリを指しているのか判別できなくなり、共有ライブラリのアドレスの再配置が必要になる。
もちろん、全てのアプリケーションプログラムが特定のアドレス空間を指した時に、共有ライブラリが一意に特定できるのであれば、一部の共有ライブラリのアドレス空間が重複していてもかまわない。
また、全ての共有ライブラリのアドレス空間を重複しないようにするだけではなく、全てのアプリケーションプログラムのアドレス空間を重複しないように設定しても良いし、逆にアプリケーションプログラムのアドレス空間は重複するように設定してもかまわない。
全ての共有ライブラリのアドレス空間が設定されると、共有ライブラリの持つシンボルなどのアドレスが全て決まるので、全ての実行バイナリプログラム(アプリケーションプログラムと共有ライブラリ)のシンボルのアドレス解決を事前に行うことができる。
実施方法の一例を挙げると、アプリケーションプログラムをアドレス空間上にロードし、さらにそのアプリケーションプログラムが使用する共有ライブラリもアドレス空間上にロードする。そして、実際にアプリケーションプログラムの持つ再配置情報やシンボル情報、及びロードしている共有ライブラリの再配置情報やシンボル情報を利用して、事前に設定したアドレス通りにシンボルのアドレス解決を行う。アドレス解決を行った結果を実行バイナリプログラムの情報に書き戻せばよい。これを全てのアプリケーションプログラムに対して実施し、アドレス解決を行った結果を全ての実行バイナリプログラムの情報に書き戻せばよい。上記方法により、図6に示すようなシンボルのアドレス解決を実施済みの実行バイナリプログラムを得ることができる。
削除可能領域検出部2は、実行バイナリ読み取り部1から実行バイナリプログラムの内部構成情報を取得し、まず再配置情報やシンボル情報を解析し、削除可能かどうかの判定条件に照らし合わせて削除可能領域を検出する。
削除可能かどうかの判定は、基本的にシンボルのアドレス解決に使用される再配置情報やシンボル情報であるかどうかに基づいて行われる。再配置情報であり、“.rel”の接頭語から始まるセクションである“.rel”系セクションと、シンボル情報を管理する“.dynsym”セクションと、シンボル名となる文字列を持つ“.dynstr”セクションとの関係の例を図7に示して、削除可能かどうかの判定条件に関して説明する。図7は、“.rel”系セクションと“.dynsym”セクションと“.dynstr”セクションとの関係を示す図である。
図7の例では、“.rel”系セクションに3つのエントリ151が存在し、それぞれ別々の“.dynsym”セクションのエントリを指している。また、“.dynsym”セクションのエントリは、シンボルの文字列を特定するために“.dynstr”セクションの文字列を指している。
図7の例では、“.rel”系セクションのエントリ152は、“.dynsym”セクションのエントリ153を指し、“.dynsym”セクションのエントリ153は、“.dynstr”セクションの文字列“XYZ”を指している。
削除可能領域検出部2は、シンボルのアドレス解決に使用される再配置情報である“.rel”系セクションの全てのエントリを削除可能領域として検出する。また、その“.rel”系セクションからたどることが可能な“.dynsym”セクションの全てのエントリも削除可能領域として検出する。さらに、削除可能と検出された“.dynsym”セクションが指している“.dynstr”セクションの文字列を削除可能領域として検出する。
図7の例では、3つのエントリからなる“.rel”系セクション151と、そこから指されている“.dynsym”セクションの3つのエントリ153,154,155と、そこから指されている“.dynstr”セクションの3つの文字列“ABC”,“XYZ”,“DEF”とが削除可能領域として検出される。
削除可能領域検出部2は、上記の通り“.rel”系セクションからたどって“.dynstr”セクションの文字列を参照し、その文字列がアルファベット以外から始まる文字列であった場合に、その文字列とその文字列を指していたセクションを削除可能領域と見なさないという判定条件を備えることも可能である。これは、アンダースコア“_”のようにアルファベット以外から始まる文字列は内部生成用のものであり、シンボルのアドレス解決と関係ない可能性があるからである。文字列の削除可能領域の検出に関するこの削除対象外とする基準は、今後同様に文字列の削除を考える時に実施することが可能である。
また、削除可能領域検出部2は、さらに上記再配置情報である“.rel”系セクションからたどって得られたシンボル情報だけではなく、“.rel”系セクションからは指されず“.dynsym”セクションから直接指される“.dynstr”セクションの文字列と、それを指している“.dynsym”セクションのエントリとを削除可能領域として検出する判定条件を備えることも可能である。
この場合、“.dynsym”セクションのエントリには、実行バイナリプログラム自身が持つ関数を、外部の別の実行バイナリプログラムが使用できるようにエクスポートしているシンボルが登録されている。このシンボルは、別の実行バイナリプログラムからシンボルのアドレス解決の際に検索される対象となる。したがって、アドレス解決のためのシンボル情報として上記の通り“.dynsym”セクションから直接指される文字列と、その“.dynsym”セクションを削除可能と見なすことができる。
ただし、“.dynsym”セクションには、実行バイナリプログラムに固有でアドレス解決とは無関係のシンボル情報も存在する。したがって、“.dynsym”セクションから直接指される文字列と、その“.dynsym”セクションを削除可能領域とする判定条件を用いる際には、アドレス解決とは無関係のシンボル情報を削除対象外とすればよい。例えば、シンボルのタイプ属性が“NOTYPE”のものを削除対象外とする方法が考えられる。また、シンボルのタイプ属性がデータオブジェクトあるいはコードオブジェクトのシンボル情報のみを削除可能領域として検出してもよい。
その他にも例えば、グローバルスコープのシンボルであること、あるいは関連セクションが“.text”、“.rodata”、“.data”及び“.bss”のいずれかのセクションであることなどを削除可能であることの判定条件にしてもよい。
また、削除可能領域検出部2は、上記に述べてきた通りシンボル情報が削除可能領域かどうかの判定を容易にするために、実行バイナリプログラムのシンボル情報を解析し管理することもできる。
シンボル情報を削除するためには、1つのシンボルに対する情報を管理すると、シンボルの削除可能かどうかの判定やシンボル情報に対する操作を管理しやすくなる。また、このシンボル情報の内部管理構造がある場合、実行バイナリ書き換え部3は、実行バイナリプログラムを書き換えて容易に再構成することができる。
図8は、シンボル情報の内部管理構造の一例を示す図である。図8に示すシンボル情報の内部管理構造は、あるシンボルに対するシンボル情報を管理するものであり、次のシンボル情報の内部管理構造へのポインタ166を持ち、各シンボル情報の内部管理構造をリンク構造でつないでたどることができる。
図8のシンボル情報の内部管理構造には、シンボル削除可能かどうかの可否情報161がある。シンボル情報が削除可能かどうかの判定条件にしたがって、管理するシンボル情報が削除可能かどうかの可否情報161を更新し管理することができる。
また、シンボル情報の内部管理構造には、何のシンボルに関して管理しているかを判別するために、シンボル文字列へのポインタ162がある。そして、シンボルを参照しているセクションに関する情報163及びそのセクションのセクション内における位置情報164を備える。これらの情報により、今管理しているシンボルがどのセクションから参照されているか、またセクションのどの位置から参照されているかを管理することができる。
このシンボル情報の内部管理構造には、さらに、文字列を他のシンボルと共用していることを判断するための情報を備えることができる。これは、複数のシンボルが、実行バイナリプログラムの“.dynstr”セクションにある文字列を共用する可能性があるためである。図9は、実行バイナリプログラムの複数のシンボルが文字列を共用する場合の動作を説明するための模式図である。
図9では、実行バイナリプログラムのシンボルの文字列そのものを保持する“.dynstr”セクションに、“unsetenv”という文字列が存在する。そして、この実行バイナリプログラムには、“setenv”というシンボル172及び“unsetenv”というシンボル173が存在する。この場合、“setenv”というシンボル172は、“unsetenv”というシンボル173の末尾部分の文字列と一致する。このように、実行バイナリプログラムでシンボルの文字列を共用する場合がある。
文字列を共用する場合、図9に示す通り“unsetenv”というシンボル173は、通常通り実行バイナリプログラムのシンボルの文字列“unsetenv”の先頭171を指すが、“setenv”というシンボル172はシンボルの文字列“unsetenv”のうちの“setenv”の先頭174を指す。
以上のように、複数のシンボルが実行バイナリプログラムにある文字列を共用する場合、一方のシンボルのみが削除可能と判定できても、他方のシンボルが削除可能と判定されていなければ、実行バイナリプログラムにあるシンボルの文字列及び関連するシンボル情報は削除できない。例えば、図9の例では、“unsetenv”というシンボル173が削除可能と判定されても、実行バイナリプログラムのシンボルの文字列“unsetenv”を削除してしまうと、文字列を共用しているシンボル“setenv”の指すべき文字列がなくなるという問題が起こる。
上記問題を解決するために、シンボル情報の内部管理構造は、文字列を他のシンボルと共用していることを判断するための共用情報165を持つ。例えば、その文字列を共用しているシンボルの数を記録しても良いし、文字列の先頭から指しているか途中から指しているかを管理してもよい。削除可能領域検出部2は、削除可能であるかどうかを判定する際に、シンボル情報の内部管理構造にあるこの文字列の共用情報165を参照し、文字列を共用している全てのシンボルに対して削除可能であると判定した時に、それらのシンボル情報を削除可能として検出する。その他にも、共用している文字列全体のうち一部の部分文字列に関して削除可能であると判定した時に、その部分の文字列とそれに関するシンボル情報とを削除可能領域として検出することも可能である。
ここで、削除可能領域検出部2が、実行バイナリ読み取り部1から実行バイナリプログラムの内部の構成情報を受け取って、シンボル情報の内部管理構造を作成する処理について説明する。図10及び図11は、シンボル情報の内部管理構造を作成する処理手順の一例を示すフローチャートである。
まず、削除可能領域検出部2は、実行バイナリ読み取り部1から実行バイナリプログラムの構成情報を取得する(ステップS1)。そして、削除可能領域検出部2は、“.dynstr”セクションを解析し文字列単位でシンボル情報の内部管理構造を作成する(ステップS2)。これにより、実行バイナリプログラムが保持する文字列一つ一つに対するシンボル情報の内部管理構造が作成される。
そして、次に削除可能領域検出部2は、シンボル情報の内部管理構造によってシンボルを参照するセクション情報を管理するために、各セクションからアクセスするシンボル名との照合を行う。
まず、削除可能領域検出部2は、“.dynsym”セクションを解析し、得られたシンボル名をシンボル情報の内部管理構造の中で検索する(ステップS3)。そして、削除可能領域検出部2は、“.dynsym”セクションからアクセスするシンボル名と完全一致する文字列がシンボル情報の内部管理構造の中にあるかどうかを判定する(ステップS4)。シンボル名と完全一致する文字列が存在する場合(ステップS4でYES)、削除可能領域検出部2は、シンボル情報を削除できるようにするため、一致した文字列を管理するシンボル情報の内部管理構造に、“.dynsym”セクションからの参照があることを表す参照情報及び参照元の位置を表す位置情報を記録する(ステップS5)。
一方、シンボル名と完全一致する文字列が存在せず部分一致する場合(ステップS4でNO)、このシンボルは他のシンボルと文字列を共用していると見なすことができる。そこで、削除可能領域検出部2は、文字列に部分一致するシンボルのために新規に内部管理構造を作成する(ステップS6)。そして、削除可能領域検出部2は、部分一致したシンボルの双方の内部管理構造に“.dynsym”セクションからの参照情報及び参照位置とともに共用に関する情報を記録する(ステップS7)。
なお、削除可能領域検出部2は、“.rel”系セクションに対しても、“.dynsym”セクションに対して行ったステップS4からステップS7の処理と同様の処理を行う。すなわち、削除可能領域検出部2は、まず“.rel”系セクションを解析し、得られたシンボル名をシンボル情報の内部管理構造の中で検索する(ステップS8)。
そして、削除可能領域検出部2は、“.rel”系セクションから“.dynsym”セクション経由でアクセスするシンボル名と完全一致する文字列がシンボル情報の内部管理構造の中にあるかどうかを判定する(ステップS9)。シンボル名と完全一致する文字列が存在する場合(ステップS9でYES)、削除可能領域検出部2は、シンボル情報を削除できるようにするため、一致した文字列を管理するシンボル情報の内部管理構造に、“.rel”系セクションからの参照があることを表す参照情報及び参照元の位置を表す位置情報を記録する(ステップS10)。必要であれば、削除可能領域検出部2は、アクセスの際に経由した“.dynsym”セクションの情報も記録する。
一方、シンボル名と完全一致する文字列が存在せず部分一致する場合(ステップS9でNO)、このシンボルは他のシンボルと文字列を共用していると見なすことができる。そこで、削除可能領域検出部2は、文字列に部分一致するシンボルのために新規に内部管理構造を作成する(ステップS11)。そして、削除可能領域検出部2は、部分一致したシンボルの双方の内部管理構造に“.rel”系セクションからの参照情報及び参照位置とともに共用に関する情報を記録する(ステップS12)。必要であれば、削除可能領域検出部2は、アクセスの際に経由する“.dynsym”セクションに関する情報も記録する。
最後に、削除可能領域検出部2は、削除可能かどうかの判定条件にしたがって削除可能かどうかの可否情報を、シンボル情報の内部管理構造に記録する(ステップS13)。
なお、削除可能かどうかの判定条件によっては、図10に示す“.dynsym”セクションに関するステップS3からステップS7までの一連の処理、あるいは図11に示す“.rel”系セクションに関するステップS8からステップS12までの一連の処理のどちらか一方の処理のみでもかまわない。
例えば、削除可能かどうかの判定条件が、“.rel”系セクションからたどれるシンボル情報であり、かつ共有しているシンボル全てが削除できる場合という条件であれば、図10の処理のうち“.dynsym”セクションに関するステップS3からステップS7までの一連の処理を行わなくてよい。また、逆に他のセクションに関して、図10の“.dynsym”セクションに関するステップS3からステップS7までの一連の処理と同様の処理を、図11に示すステップS13の処理の前に追加することも可能である。
すなわち、プログラムの実行時にシンボルにアクセスする他のセクションに関して、同様の一連の処理を追加して、そのセクションからの参照情報をシンボル情報の内部管理構造に記録しておくことが有効となる。なぜなら、そのようなセクションは、シンボルのアドレス解決とは関係なくプログラムの実行時にシンボル情報にアクセスする。そのため、そのシンボル情報が例えば“.rel”系セクションから参照されているという理由のみで削除すると、プログラムの実行時にシンボルが存在しないため動作しなくなる恐れがある。具体的にそのようなセクションの例を挙げると、種々の動的リンク情報を管理している“.dynamic”セクションや、シンボルのバージョンを管理する“.gnu.version”系セクションや、ライブラリ情報を保持する“.gnu.liblist”セクションなどがある。
削除可能領域検出部2は、削除可能かどうかの判定条件として、上記のようなセクションからの参照があるシンボル情報を削除対象外とする条件を採用することができ、より精密なシンボル情報の削除を行うことができる。
削除可能領域検出部2は、削除可能かどうかの判定条件として、さらに他の実行バイナリプログラムからの参照があるシンボル情報を削除対象外とすることもできる。例えば、事前にシンボル情報を使用する実行バイナリプログラムのリストがあり、実行バイナリ読み取り部1は、そのリストの実行バイナリプログラムを読み取る。削除可能領域検出部2は、その実行バイナリプログラムのシンボル情報を受け取って解析し、参照する他の実行バイナリプログラムのシンボル情報を検出して、削除対象外とする。
削除可能領域検出部2は、以上に述べた種々の判定条件を用いることができ、設定された判定条件を満たしたシンボル情報の内部管理構造に、シンボル削除可能であることを記録し、そのシンボル情報の内部管理構造を実行バイナリ書き換え部3に渡す。
なお、削除可能領域検出部2で実行バイナリプログラムのシンボル情報の解析を容易にするために上記のシンボル情報の内部管理構造を説明したが、再配置情報やシンボル情報をたどって解析できればよく、その他の方法を採用しても本発明の実施に問題はない。
実行バイナリ書き換え部3は、これまでに解析した実行バイナリプログラムの情報と、削除可能領域として検出した情報とを削除可能領域検出部2から取得する。実行バイナリ書き換え部3は、削除可能領域の情報として、例えばこれまでに説明したシンボル情報の内部管理構造と、そこに記録されている削除可能かどうかの可否情報とを受け取る。
実行バイナリ書き換え部3は、受け取った実行バイナリプログラムの情報と削除可能領域の情報とに基づいて、削除可能な再配置情報やシンボル情報を特定できる。例えば、実行バイナリ書き換え部3は、実行バイナリプログラムの各セクション及び各セクション内の削除可能領域であるシンボル情報の内部管理構造を1要素ずつ取得して、削除可能かどうかの可否情報を確認する。そのシンボル情報に対して削除可能である情報があれば、シンボル情報の内部管理構造に記録されている参照セクションの情報やシンボル文字列へのポインタをたどって、実行バイナリプログラムの中で削除すべき領域を特定できる。それをシンボル情報の内部管理構造の全ての要素に対して行えば、1つの実行バイナリプログラムに対する削除可能領域を全て特定できる。
しかし、実行バイナリプログラムの中で削除可能領域の実データそのものを削除してしまうと、実行バイナリプログラムの内部構成が変化して、実行バイナリプログラムのコード本体であるテキスト情報やデータ情報の配置アドレスが変化する可能性がある。ある実行バイナリプログラムのテキスト情報やデータ情報は、別の複数の実行バイナリプログラムから参照されている可能性がある。したがって、全ての実行バイナリプログラムの中で、配置アドレスの変化が生じた実行バイナリプログラムを参照する領域を検出し、変化した分だけ参照するアドレスを補正する必要が生じる。この補正がないと実行バイナリプログラムはプログラムとして動作しない。しかし、実行バイナリプログラムのコードの中から、別の実行バイナリプログラムの特定のアドレスを参照しているかどうかを検出することは非常に困難であるという問題があった。
そのような配置アドレスの変化が好ましくないセクションを例に挙げると、セクション属性が“PROGBITS”であるセクション、あるいはそのような情報がなければ、実行バイナリプログラムの実データを形成する“.plt”、“.text”、“.fini”、“.rodata”、“.data”、“.ctors”、“.dtors”、“.got”及び“.bss”などのセクションが代表的なものである。
上記問題に対処するため、実行バイナリ書き換え部3は、削除可能領域として検出された再配置情報及びシンボル情報に対して、実データそのものを削除するのではなく、特定データに書き換える。
例えば、実行バイナリ書き換え部3は、削除可能と検出されているシンボル情報の内部管理構造を取得して、そこから参照するセクション、参照元を示す位置及びシンボル文字列の位置を取得できれば、実行バイナリプログラム中のその領域を特定データで書き換える。ここで、特定データは、ある同一のデータ、例えば0あるいは0xFFなどでよい。また、特定データは、ある一定の規則に基づくデータでもかまわない。
実行バイナリ書き換え部3が、実行バイナリプログラムの中の実データそのものを削除するのではなく、特定データに書き換えることにより、実行バイナリプログラムのテキスト情報やデータ情報の配置アドレスが変化しなくなり、上記問題を回避できる。
また、最終的に実行バイナリイメージ作成部4は、実行バイナリ書き換え部3によって書き換えられた実行バイナリプログラムを機器やシステム上で認識可能な実行バイナリイメージに変換する。この実行バイナリイメージを、圧縮技術を用いて作成すれば、特定データ例えば同一データで書き換えられた領域は、他のデータと比較して一般的に圧縮率が高くなるので、実行バイナリイメージのデータサイズを削減することができる。
また、実行バイナリ書き換え部3は、実行バイナリプログラムの削除可能領域を特定データで書き換えて、実行バイナリ読み取り部1で読み取った実行バイナリプログラムの内部構成であるELFヘッダやプログラムヘッダや各セクション構造を構成し直して、実行バイナリプログラムの形式で出力する。
一つ一つの実行バイナリプログラムが、実行バイナリ読み取り部1に入力されて、再配置情報及びシンボル情報が削除可能な状態になって、実行バイナリ書き換え部3から出力される。次に、実行バイナリイメージ作成部4は、これらの実行バイナリプログラムを、機器やシステム上で動作できる状態にするために実行バイナリイメージを作成する。例えば、ファイルシステムなどが導入され、そのファイルシステム用の実行バイナリイメージが作成される。
この実行バイナリイメージを作成するにあたって、圧縮技術を用いれば、上述した通り、特定データに書き換えた領域の圧縮率が高まり、実行バイナリイメージのデータサイズを削減することができる。例えば、実行バイナリプログラムを圧縮することができるファイルシステムを導入することが考えられる。ファイルシステムについては、FAT(File Allocation Table)、VFAT(Virtual FAT)、FAT32、NTFS(NT File System)、HFS(High−performance File System)、ext2、ext3、ReiserFS、JFS(Journaling File System)、XFS、JFFS(Journaling Flash File System)2、CRAMFSなどが使用できる。その他、独自の圧縮技術、あるいは独自のファイルシステムを使用してもかまわない。
これまで実行バイナリ書き換え部3が、実行バイナリプログラムの削除可能領域を特定データに書き換える方式を説明してきたが、それだけではなく、さらに実行バイナリプログラムの削除可能領域、すなわち特定データに書き換える領域をセクション内で集約することも可能である。特定データへの書き換え領域を集約することにより、圧縮技術によってより高い圧縮率による実行バイナリイメージのサイズ削減の効果が得られる。書き換え領域を集約する例について、図12及び図13の例を用いて説明する。
図12は、実行バイナリ書き換え部3が特定データに書き換える領域を集約しない場合の動作を説明するための模式図である。図13は、実行バイナリ書き換え部3が特定データに書き換える領域を集約する場合の動作を説明するための模式図である。
図12において、“.rel”系セクションの3つのエントリ181は、それぞれ“.dynsym”セクションの3つのエントリ182,183,184に対応付けられている。“.dynsym”セクションのエントリ182は、“.dynstr”セクションの文字列“XYZ”を指しており、エントリ183は文字列“ABC”を指しており、エントリ184は文字列“DEF”を指している。図12において、実行バイナリ書き換え部3は、シンボル情報が削除可能であることを表す可否情報にしたがって、“.dynsym”セクションのエントリ182,183,184、及び“.dynstr”セクションの3つの文字列を特定データに書き換えることになる。この場合、特定データは、“.dynsym”セクション及び“.dynstr”セクションの中で複数領域に分散してしまう。
そこで、図13に示すように、実行バイナリ書き換え部3は、特定データに書き換える“.dynsym”セクションの3つのエントリ185,186,187を一箇所に集約する。また、実行バイナリ書き換え部3は、“.dynstr”セクションの3つの文字列も一箇所に集約する。なお、図13の例では、書き換える領域を各セクションの末尾に集約しているが、一箇所に集約するのであれば、セクション内のどの位置でもかまわない。また、特定データへの書き換えと、書き換え領域の集約との処理順序は問わない。
実行バイナリ書き換え部3が、特定データに書き換える領域を一箇所に集約することによって、セクション内の残りのデータも位置が変化する可能性がある。そこで実行バイナリ書き換え部3は、残りのデータの位置が変化すると、それに関連するセクションの参照先を補正する。
まず、“.dynstr”セクション内の書き換え領域を集約する場合、実行バイナリプログラムの残りの文字列の位置が変化することに伴って、その文字列を参照するセクションの各エントリの位置を補正する。これは、削除可能領域検出部2から取得したシンボル情報の内部管理構造から、そのシンボル文字列を参照するセクションの情報を取得して、それぞれのセクションの位置を変更すればよい。
例えば、“.dynstr”セクションの書き換え領域が集約されて文字列の位置が変更されると、実行バイナリ書き換え部3は、文字列を参照している“.dynsym”セクションや“.rel”系セクションの各エントリの位置を補正する。また、実行バイナリ書き換え部3は、その他、動的リンク情報を管理している“.dynamic”セクション、シンボルのバージョンを管理している“.gnu.version”系セクション、ライブラリ情報を保持する“.gnu.liblist”セクション、及びシンボル文字列を検索するためのハッシュ構造を管理する“.hash”セクションなどにおいて、文字列を参照している領域の位置を補正する。
実行バイナリ書き換え部3は、さらに実行バイナリプログラムの削除可能領域、すなわち特定データに書き換える領域をセクション内だけではなく、実行バイナリプログラム全体で集約することも可能である。特定データへの書き換え領域を実行バイナリプログラム全体で集約することにより、セクション単位で集約するよりもさらに大きく集約することができる。さらに、書き換え領域が実行バイナリプログラム全体で集約された実行バイナリイメージを圧縮した場合、セクション単位で集約された実行バイナリイメージを圧縮するよりも、実行バイナリイメージのデータサイズをより削減することができる。ここで、書き換え領域を実行バイナリプログラム全体で集約する例を、図14を用いて説明する。
図14は、実行バイナリ書き換え部が特定データに書き換える領域を実行バイナリプログラム全体で集約する場合の動作を説明するための模式図である。図14では、例として“.dynsym”セクションと“.dynstr”セクションと“.gnu.version”系セクションとを、削除可能領域を特定データに書き換えるセクションとして挙げている。この3つのセクションの中で、実行バイナリ書き換え部3が特定データに書き換える部分をそれぞれ領域191,192,193とすると、それらを実行バイナリプログラム全体で集約すると領域194に集約される。ただし、この時実行バイナリプログラムの中にあるテキスト情報やデータ情報に関しては、配置アドレスを変化させない。
実行バイナリプログラム全体で特定データの書き換え部分を集約する方法としては、例えば、直前のセクションの末尾(セクションの特定データではない部分の末尾)に続いて次のセクションを配置するように、対象セクションの位置を補正し、その際セクションの移動によって上書きされた特定データの部分(削除可能領域)を、移動後のセクションの末尾に特定データのデータサイズ分まとめて書き出せばよい。実行バイナリ書き換え部3は、この動作を全てのセクションに対して行えばよい。セクションの位置の補正は、例えばセクションヘッダ等にあるセクションの位置情報を変更すればよい。なお、ここに挙げた方法は一例であり、特定データを実行バイナリプログラム全体で集約する図14に示す動作が実現できれば他の方法でもかまわない。
実行バイナリ書き換え部3が実行バイナリプログラム全体で書き換え領域を集約する場合、各セクションの位置が変化する可能性がある。そこで、実行バイナリ書き換え部3は、セクションの位置の変化にしたがって、実行バイナリプログラム全体の情報を補正する必要がある。
例えば、セクションヘッダにはセクションの配置アドレスとオフセットとが存在するので、実行バイナリ書き換え部3は、セクションの位置の変化にしたがって、それらを補正する必要がある。また、プログラムヘッダもそのプログラムヘッダに属するセクションサイズの合計値を求め、求めた合計値に基づいてプログラムヘッダに含まれるファイルサイズ及びメモリサイズを必要あれば補正する。
その他にも、実行バイナリ書き換え部3は、削除可能領域検出部2から取得した削除可能領域の情報で、あるセクション全てが削除可能になっている場合、セクションそのものを削除することができる。この場合にも上述した実行バイナリプログラム全体に関して情報を補正する必要があれば行う。また、各セクションには他のセクションを参照することを示す情報があるので、実行バイナリ書き換え部3は、この情報を必要があれば補正する。その他にもELFヘッダは存在するセクション数を管理しているので、実行バイナリ書き換え部3は、セクション数の情報を補正する必要がある。
これまで、実行バイナリ書き換え部3が削除可能領域を特定データに書き換えることにより、圧縮率を高めて、実行バイナリイメージのデータサイズを削減する方法を説明してきた。その方法とは別に、実行バイナリイメージ作成部4は、さらに特定データで書き換えられた一定のメモリ領域単位(ページ単位)を、ある実行バイナリプログラムの中で、あるいは全ての実行バイナリプログラムで共用してもよい。この場合、実行バイナリイメージのサイズをより削減することが可能である。この方法に関して、図15の例を用いて説明する。
図15は、特定データに書き換えられたページを全ての実行バイナリプログラムで共用する動作について説明するための模式図である。図15(A)は、2つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの一例を示す図であり、図15(B)は、共用ページを利用した実行バイナリイメージの一例を示す図である。図15(A)では、実行バイナリプログラムAと実行バイナリプログラムBの2つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの例を挙げている。実行バイナリプログラムのファイルデータは、ページ単位で管理されている。そして、実行バイナリプログラムA及び実行バイナリプログラムBともに図15(A)では“0”で表されている特定データに書き換えられたページ201を持つ。通常、実行バイナリイメージは、この“0”で表されたページ201を含む所定のサイズのファイルデータ202,203から成り立つ。
しかし、本実施の形態における実行バイナリイメージ作成部4は、図15(B)に示す通り共用ページを利用した実行バイナリイメージを作成することが可能である。実行バイナリイメージ作成部4は、実行バイナリプログラムのファイルデータをページ単位で管理するためのページ管理情報204を作成し、作成したページ管理情報204を各実行バイナリプログラムに持たせる。実行バイナリイメージ作成部4は、特定データで書き換えられたページ(図15(A)で“0”と表されているページ)が、1つの実行バイナリプログラムの複数の領域から共用される一つの共用ページ206を指すようにページ管理情報204を設定し、また他の実行バイナリプログラムからもページ管理情報204によって同一の共用ページ206を指すようにページ管理情報204を設定して、実行バイナリイメージを作成する。
ここで、ページ管理情報204は、ページ単位ではなく、何らかの物理メモリの管理単位に従って管理すればよい。また、必ずしも特定データで書き換えられたページ(図15(A)で“0”と表されているページ)個々に対して共用ページへのポインタを管理する必要はない。例えば、ファイルデータの中で、共用ページに割り当てる領域を、ファイルの先頭からのアドレスのオフセット値によって範囲を指定してもよいし、絶対アドレス値によって範囲を指定してもよい。
そのように設定することにより、従来5ページ分のサイズのファイルデータ202,203を含めていた実行バイナリイメージが、2ページ分のサイズのファイルデータ205,207と1ページ分のサイズの共用ページ206とを含めるだけでよく、実行バイナリイメージのサイズを削減することができる。
プログラムを実行する際には、以上のように作成した実行バイナリイメージを、機器やシステムが認識する必要がある。典型的には、オペレーティングシステム(OS)や基本ソフトウェアと呼ばれるソフトウェアが、記憶媒体に格納されている実行バイナリイメージを読み取って解析し、実行するための実行バイナリプログラムを認識して実行のための環境を整える。
図16は、共用ページを利用した実行バイナリイメージと、実行バイナリプログラムが実行される際のアドレス空間との関係を説明するための模式図である。図16の実行バイナリプログラムAが起動されると、OSは実行バイナリプログラムAの情報や実体が、実行バイナリイメージが持つ管理情報、例えば、図16のinode211から特定される。ページ管理情報212は、前述した通り、実行バイナリプログラムの実体を指し示す管理情報、あるいは共用ページ213を使用する領域を特定するための情報を含む。
OSは、ページ管理情報212を読み取り、実行バイナリイメージの物理的な領域を、プログラムを実行するアドレス空間に割り当てる。ここで、プログラムのアドレス空間上で、実行バイナリプログラムの“.text”セクションなどの位置を変えないために、仮想記憶管理機構214により仮想的なアドレス空間が作成される。すなわち、仮想記憶管理機構214は、実行バイナリプログラムに対して特定データで書き換えたページ領域と、書き換えていないページ領域とを認識し、仮想的なアドレス空間上で元の実行バイナリプログラムの実体の配置を実現する。
ここで、具体的な例について図16を用いて説明する。実行バイナリプログラムAを仮想的なアドレス空間に展開する場合、OSは、ファイルデータ218の最初のページを、プログラムの仮想的なアドレス空間上における最初の位置215に割り当てるように仮想記憶管理機構214を設定する。そして、OSは、ページ管理情報212を参照し、後続する3つのページが共用ページ213を使用していることを認識する。OSは、仮想的なアドレス空間上における2番目から4番目の位置217にそれぞれ共用ページ213を割り当てるように仮想記憶管理機構214を設定する。そして、OSは、ファイルデータ218の最後のページを、仮想的なアドレス空間上における最後の位置216に割り当てるように仮想記憶管理機構214を設定する。実行プログラムAは、仮想記憶管理機構214が管理する仮想的なアドレス空間上で動作する。
同様に、実行バイナリプログラムBを仮想的なアドレス空間に展開する場合、OSは、ページ管理情報212を参照し、1番目と2番目のページが共用ページ213を使用していることを認識する。OSは、仮想的なアドレス空間上における1番目と2番目の位置219にそれぞれ共用ページ213を割り当てるように仮想記憶管理機構214を設定する。次に、OSは、ファイルデータ223の最初のページを、プログラムの仮想的なアドレス空間上における3番目の位置220に割り当てるように仮想記憶管理機構214を設定する。そして、OSは、ページ管理情報212を参照し、後続する4番目のページが共用ページ213を使用していることを認識する。OSは、仮想的なアドレス空間上における4番目の位置221に共用ページ213を割り当てるように仮想記憶管理機構214を設定する。そして、OSは、ファイルデータ223の最後のページを、仮想的なアドレス空間上における最後の位置222に割り当てるように仮想記憶管理機構214を設定する。実行プログラムBは、仮想記憶管理機構214が管理する仮想的なアドレス空間上で動作する。
以上の動作により、例えば、図16の仮想的なアドレス空間上の位置216に実行バイナリプログラム中の実行コード本体であるテキスト情報やデータ情報が配置されるので、アドレス空間上の配置アドレスを変化させることなくテキスト情報やデータ情報を配置することができ、他の実行コードからも問題なくアクセスすることが可能になる。
なお、図16の例では、仮想記憶管理機構214は、仮想的なアドレス空間上における位置217に、物理的な実行バイナリイメージの共用ページ213を割り当てているが、共用ページに全くアクセスしないことが予めわかっている場合、仮想的なアドレス空間上の位置217を共用ページの物理的な領域に割り当てなくても動作に問題はない。また、どのプログラムも特定データで書き換えたページ領域にアクセスしないことがわかっている場合、さらに実行バイナリイメージの中から共用ページを除くことも可能である。
本実施の形態における実行バイナリイメージ作成装置は、情報機器、AV機器、通信機器及び家電機器などの種々の機器に搭載されるコンピュータで実行される実行バイナリプログラムに適用するものであり、コンピュータが認識するための実行バイナリイメージを出力する。
図17は、本実施の形態における情報処理システムの構成を示す図である。図17に示す情報処理システム10は、実行バイナリイメージ作成装置11とコンピュータ12とを備える。実行バイナリイメージ作成装置11の構成は、図1に示す実行バイナリイメージ作成装置と同じである。コンピュータ12は、記憶部21及びプログラム実行部22を備える。
記憶部21は、例えばROM等で構成され、実行バイナリイメージ作成装置11によって作成された実行バイナリイメージを記憶する。プログラム実行部22は、例えばCPU等で構成され、記憶部21に記憶されている実行バイナリイメージを仮想アドレス空間に展開して実行する。なお、本実施の形態において、記憶部21が実行バイナリイメージ記憶部の一例に相当し、プログラム実行部22が実行部の一例に相当する。また、本実施の形態において、実行バイナリイメージ実行プログラムが例えばROMに記憶されており、実行バイナリイメージ実行プログラムが記憶部21及びプログラム実行部22としてCPU及びEEPROMを機能させる。
図17に示すように、実行バイナリイメージ作成装置11はコンピュータ12の外部にあり、実行バイナリイメージ作成装置11から出力される実行バイナリイメージをコンピュータ12上で認識し動作せることが可能である。
また、別の実施の形態として、実行バイナリプログラムが実行されるコンピュータ上で、実行バイナリイメージ作成装置と同様の機能を動作させることも可能である。図18は、本実施の形態における情報処理システムの別の構成を示す図である。図18に示すコンピュータ12’は、実行バイナリイメージ作成処理部11’、記憶部21、プログラム実行部22及び通信部23を備える。情報処理システム10’は、実行バイナリイメージ作成処理部11’、記憶部21及びプログラム実行部22で構成される。なお、図18に示す情報処理システム10’において、図17に示す情報処理システム10と同じ構成については同じ符号を付し、説明を省略する。
通信部23は、例えばインターネットなどのネットワークを介して実行バイナリプログラムを受信し、受信した実行バイナリプログラムを実行バイナリイメージ作成処理部11’の実行バイナリ読み取り部1へ出力する。実行バイナリイメージ作成処理部11’及びプログラム実行部22は、例えばCPU等で構成され、記憶部21は、例えばEEPROM(Electrically Erasable Programmable Read Only Memory)等で構成される。実行バイナリイメージ作成処理部11’の構成は、図1に示す実行バイナリイメージ作成装置の構成と同じである。
このように、ネットワークを介して実行バイナリプログラムが受信され、コンピュータ内で実行バイナリイメージが作成されるので、実行バイナリイメージをアップデートすることができる。
なお、本実施の形態ではネットワークを介して実行バイナリプログラムを受信して実行バイナリイメージを作成しているが、本発明は特にこれに限定されず、CD−ROMなどのコンピュータ読み取り可能な記録媒体から実行バイナリプログラムを読み出して実行バイナリイメージを作成してもよい。この場合、コンピュータ12’は、記録媒体を駆動する記録媒体駆動部を備える。記録媒体駆動部は、記録媒体から実行バイナリプログラムを読み出し、読み出した実行バイナリプログラムを実行バイナリイメージ作成処理部11’の実行バイナリ読み取り部1へ出力する。
以上、本実施の形態では、実行バイナリプログラムの形式としてELF形式を代表例に挙げて説明してきたが、ELF形式の実行バイナリプログラムのみに実施の範囲を限定するものではなく、他の実行バイナリプログラムの形式においても、これまで説明した再配置情報とシンボル情報とを同様に備え、これまでの説明通り同様に実施することができる。
また、本実施の形態では、実行バイナリイメージ作成装置を中心に説明してきたが、情報処理システム、情報処理方法、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体に関しても、同様に実施することができる。
さらにまた、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
また、例えば、実行バイナリ読み取り部1、削除可能領域検出部2、実行バイナリ書き換え部3及び実行バイナリイメージ作成部4のうちの少なくとも1つが、1チップ化されたLSI(大規模集積回路)に含まれ得る。実行バイナリ読み取り部1、削除可能領域検出部2、実行バイナリ書き換え部3及び実行バイナリイメージ作成部4のうちの少なくとも1つをLSIに含めることによって、実行バイナリイメージ作成装置の製造工程を容易にすることができる。
なお、上述した具体的実施形態には以下の構成を有する発明が主に含まれている。
本発明の一局面に係る情報処理システムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
本発明の他の局面に係る情報処理方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
したがって、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリ読み取り部は、シンボルのアドレス解決を実施済みの前記実行バイナリプログラムを読み取ることが好ましい。
この構成によれば、シンボルのアドレス解決を実施済みの実行バイナリプログラムが読み取られるので、シンボルに関するシンボル情報及びシンボルのアドレス解決に使用される再配置情報を削除することができる。
また、上記の情報処理システムにおいて、前記特定のデータは、前記実行バイナリプログラム内の他のデータよりも圧縮率の高いデータであり、前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムを圧縮することが好ましい。
この構成によれば、実行バイナリプログラムを実行バイナリイメージに変換する際に、削除可能領域が特定のデータに書き換えられた実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量を削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域は、前記セクション内の所定の領域であり、前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラムのセクション単位で集約することが好ましい。
この構成によれば、実行バイナリプログラムは、セクション単位で分割され、削除可能領域は、セクション内の所定の領域であり、特定のデータに書き換えた領域が実行バイナリプログラムのセクション単位で集約され、実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける集約された特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量をさらに削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域は、前記セクションであり、前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラム全体で集約することが好ましい。
この構成によれば、実行バイナリプログラムは、セクション単位で分割され、削除可能領域は、セクションであり、特定のデータに書き換えた領域が実行バイナリプログラム全体で集約され、実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける集約された特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量をさらに削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって特定のデータに書き換えられた領域を削除するとともに、前記実行バイナリプログラム内で共用する前記特定のデータを格納した共用領域を作成し、削除された前記領域の前記実行バイナリプログラム内における位置と前記共用領域とを関連付けて管理する管理情報を作成することが好ましい。
この構成によれば、実行バイナリプログラムを実行バイナリイメージに変換する際に、特定のデータに書き換えられた領域が削除されるとともに、実行バイナリプログラム内で共用する特定のデータを格納した共用領域が作成され、削除された領域の実行バイナリプログラム内における位置と共用領域とを関連付けて管理する管理情報が作成される。したがって、特定のデータに書き換えられた領域が削除され、特定のデータが共用領域にのみ格納されるので、実行バイナリイメージが含む特定のデータのデータ量を削減することができ、実行バイナリイメージ全体のデータ量を削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開する際に、前記管理情報を参照し、削除された前記領域の前記実行バイナリプログラム内における位置を認識し、認識した位置に対応する前記仮想的なアドレス空間に、前記共有領域に格納されている特定のデータを割り当てることが好ましい。
この構成によれば、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開される際に、管理情報が参照され、削除された領域の実行バイナリプログラム内における位置が認識され、認識された位置に対応する仮想的なアドレス空間に、共有領域に格納されている特定のデータが割り当てられる。したがって、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、仮想的なアドレス空間に実行バイナリイメージを配置することができる。
また、上記の情報処理システムにおいて、前記実行バイナリ読み取り部は、前記実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報を前記実行バイナリプログラムから読み取り、前記削除可能領域検出部は、前記実行バイナリ読み取り部によって読み取られた前記アドレス解決情報がアドレス解決済みであるか否かを判定し、アドレス解決済みでないと判定された場合、前記実行バイナリプログラムの中から削除可能領域を検出しないことが好ましい。
この構成によれば、実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報が実行バイナリプログラムから読み取られ、読み取られたアドレス解決情報がアドレス解決済みであるか否かが判定され、アドレス解決済みでないと判定された場合、実行バイナリプログラムの中から削除可能領域が検出されない。したがって、アドレス解決済みであると判定された場合にのみ、削除可能領域を検出することができ、シンボル情報や再配置情報を削除可能領域として検出することができる。
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報を削除の対象外とすることが好ましい。
この構成によれば、実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報が削除の対象外とされるので、他のセクションから参照される情報は削除されずに残り、参照先のデータが存在しないという不具合を防止することができる。
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、複数の実行バイナリプログラムを含み、前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報を削除の対象外とすることが好ましい。
この構成によれば、実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報が削除の対象外とされるので、他の実行バイナリプログラムから参照される情報は削除されずに残り、参照先のデータが存在しないという不具合を防止することができる。
また、上記の情報処理システムにおいて、前記削除可能領域検出部は、前記実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることを検出し、文字列を共用しているシンボル全てが削除可能である場合にのみ、前記複数のシンボル及び前記文字列に対応する領域を削除可能領域として検出することが好ましい。
この構成によれば、実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることが検出され、文字列を共用しているシンボル全てが削除可能である場合にのみ、複数のシンボル及び文字列に対応する領域が削除可能領域として検出される。複数のシンボルが実行バイナリプログラム内の文字列を共用している場合、一のシンボルが削除可能と判定されても、他のシンボルが削除可能と判定されていなければ、実行バイナリプログラム内のシンボルの文字列及びシンボル情報は削除されない。したがって、一のシンボルが削除可能と判定されて文字列が削除されてしまい、文字列を共用している他のシンボルが文字列を指定することができないという不具合を防止することができる。
本発明の他の局面に係る実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備える。
本発明の他の局面に係る実行バイナリイメージ作成方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含む。
本発明の他の局面に係る実行バイナリイメージ作成プログラムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる。
本発明の他の局面に係る実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる実行バイナリイメージ作成プログラムを記録している。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
したがって、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
本発明の他の局面に係る実行バイナリイメージ実行装置は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
本発明の他の局面に係る実行バイナリイメージ実行方法は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
本発明の他の局面に係る実行バイナリイメージ実行プログラムは、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる。
本発明の他の局面に係る実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる実行バイナリイメージ実行プログラムを記録している。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶される。そして、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。したがって、データ量が削減された実行バイナリイメージが記憶されるので、実行バイナリイメージを記憶するために必要な記憶容量を削減することができる。
本発明に係る情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行されるプログラムのデータサイズを削減することができ、コンピュータを搭載する種々の機器において、メモリサイズを抑えることができるので産業上有用である。
本発明は、コンピュータ上で実行される種々の実行バイナリイメージを作成する情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体に関するものである。
Linux(登録商標)やWindows(登録商標)などのようなマルチタスク型のOS(オペレーティングシステム)が搭載されている機器やコンピュータでは、多くの場合、動的ローディングシステムを採用している。これは、実行バイナリプログラムの実行時に初めて、そのプログラム本体や使用する共有ライブラリのアドレスを決定するシステムであり、再配置処理、すなわち使用するシンボルのアドレス解決を行う必要がある。そのため、実行バイナリプログラムの情報の中に、再配置情報やシンボル情報が含まれる。プログラムを実行すると、動的ローダがこれらの再配置情報やシンボル情報を使用して、関数や変数のアドレスを確定するので、これらの情報は動的ローディングシステムの実行バイナリプログラムでは必須であった。したがって、実行バイナリプログラムの実行コードであるテキスト情報やデータ情報などとともに、それらの再配置情報やシンボル情報を、実行バイナリイメージの中に含める必要があった。
上記背景のもとで、ROM(リードオンリメモリ)のサイズ削減のための従来技術として、組み込んだローダを用いて一度プログラムを実行した上で、共用ライブラリのアドレス解決に必要な構造を、ROMとは別の記憶装置に保存し、かつ実行バイナリプログラムからその構造を削除した上で、二度目に実行する際には、記憶装置に保存されたアドレス解決に必要な情報を使用して、ポインタを再配置してアドレス解決を行う技術が開示されている(例えば、特許文献1参照)。
特開平10−228381号公報
しかしながら、前記従来の技術では、共用ライブラリのアドレス解決に必要な構造を、外部あるいは別の記憶装置に持つという点で、ROMに載せる実行バイナリプログラムのデータサイズを減らしてはいるが、別途構造データを保持する記憶容量が必要になる。そのため、結局余分な記憶領域を使用するという問題が残る。
また、動的ローディングシステム上で動作させるためには、実行バイナリプログラムが持つ再配置情報やシンボル情報のうち、どのような条件下でどの箇所を本当に削除できるのか明らかではないという課題があった。
さらに、上記問題とは別に、実行バイナリプログラムの情報を一部編集してしまったり削除してしまったりすることによって、実行バイナリプログラムの内部構成が変化して、実行コード本体であるテキスト情報やデータ情報の配置アドレスが変化する可能性がある。その場合、全ての実行バイナリプログラムの中で、元々変化が生じた実行バイナリプログラムを利用するためにその位置を指していた箇所を検出し、変化した分だけアドレスを補正する必要が生じる。この補正がないと実行バイナリプログラムはプログラムとして動作しない。しかしながら、実行バイナリプログラムが、変化したアドレス位置を検出することは非常に困難であり、単純に実行バイナリプログラムの持つ再配置情報やシンボル情報を削除できないという課題があった。
本発明は、上記の問題を解決するためになされたもので、実行バイナリイメージのデータ量を削減することができる情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とするものである。
本発明の一局面に係る情報処理システムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
本発明の他の局面に係る情報処理方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
本発明の他の局面に係る実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備える。
本発明の他の局面に係る実行バイナリイメージ作成方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含む。
本発明の他の局面に係る実行バイナリイメージ作成プログラムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる。
本発明の他の局面に係る実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる実行バイナリイメージ作成プログラムを記録している。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
本発明の他の局面に係る実行バイナリイメージ実行装置は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
本発明の他の局面に係る実行バイナリイメージ実行方法は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
本発明の他の局面に係る実行バイナリイメージ実行プログラムは、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる。
本発明の他の局面に係る実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる実行バイナリイメージ実行プログラムを記録している。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶される。そして、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
本発明によれば、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
本発明の目的、特徴及び利点は、以下の詳細な説明と添付図面とによって、より明白となる。
本発明によれば、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
以下、本発明の実施の形態について、図面を参照しながら説明する。
図1は、本実施の形態における実行バイナリイメージ作成装置の構成を示すブロック図である。本実施の形態における実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムを入力とし、実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部1と、実行バイナリ読み取り部1で読み取られた実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部2と、削除可能領域検出部2において検出された実行バイナリプログラムの削除可能領域を、特定のデータに書き換えて実行バイナリプログラムを再構成する実行バイナリ書き換え部3と、実行バイナリ書き換え部3から受け取った少なくとも一つの実行バイナリプログラムをコンピュータ上で認識し実行できる形式に変換する実行バイナリイメージ作成部4とを備えて構成される。
なお、本明細書における実行バイナリプログラムは、バイナリ形式の実行コード及び実行データを含む。また、本実施の形態において、実行バイナリ読み取り部1が実行バイナリ読み取り部の一例に相当し、削除可能領域検出部2が削除可能領域検出部の一例に相当し、実行バイナリ書き換え部3が実行バイナリ書き換え部の一例に相当し、実行バイナリイメージ作成部4が実行バイナリイメージ変換部の一例に相当する。さらに、本実施の形態において、実行バイナリイメージ作成プログラムが例えばROM(リードオンリメモリ)に記憶されており、実行バイナリイメージ作成プログラムが実行バイナリ読み取り部1、削除可能領域検出部2、実行バイナリ書き換え部3及び実行バイナリイメージ作成部4としてCPU(中央演算処理装置)を機能させる。
以上のように構成された実行バイナリイメージ作成装置について、その構成の詳細と動作とを以下に述べる。まず、実行バイナリ読み取り部1は、コンピュータ上で動作する実行バイナリプログラム、すなわち実行形式のファイルを入力とする。まず、この実行バイナリプログラムの形式に関して以下に説明する。
現在、種々の実行形式が存在する。例えば、ELF(Executable and Linking Format)形式、a.out形式、COFF(Common Object File Format)形式、ECOFF(Extended COFF)形式、及びPE(Portable Executable)形式などが代表的な実行形式である。これから本実施の形態の説明を容易にするために、Unix(登録商標)やLinux(登録商標)で使用され、実行形式として代表的なELF形式の実行バイナリプログラムを例に挙げて説明を行うが、本実施の形態はELF形式の実行バイナリプログラムに限定されるものではなく、他の実行形式に対しても同様に実施することができる。
実行バイナリプログラムの内部構成を、ELF形式の構成を例にして図2を用いて説明する。図2は、実行バイナリプログラムの内部構成の一例を示す図である。実行バイナリプログラムの先頭には、実行バイナリプログラム全体の情報を管理するELFヘッダ101が存在する。このELFヘッダには、アプリケーションプログラムか共有ライブラリかを区別する情報や、後続するプログラムヘッダ102やセクションヘッダ104へのオフセット情報や、その他実行バイナリプログラム全体に関わる情報が格納されている。
後続するプログラムヘッダ102には、複数のセグメントと呼ばれる領域を管理する情報が格納されている。この各セグメントには、1つあるいは複数のセクションが属する構成になっている。そして、実行バイナリプログラムの実データとなるセクション103が、役割ごとにセクション1からセクションNまで複数個存在し、それらの各セクションを管理するためのセクションヘッダ104が存在する。
ここで、実行バイナリプログラムの実データとなる代表的な各セクションについて説明する。図3は、実行バイナリプログラムの実データとなる代表的な各セクションについて説明するための図である。図3のセクション名111は、各セクションの名称を表している。セクションの概要112は、各セクション名111に対応する各セクションの働きを説明している。動的ローディングシステムは、プログラムの実行時に初めて、使用する実行バイナリプログラムである共有ライブラリのアドレスを決定するシステムである。そのため、動的ローディングシステムでは、再配置処理、すなわち使用するシンボルのアドレス解決を行う必要がある。この再配置処理や、シンボルのアドレス解決のために、図3に示す複数のセクションが利用される。
例えば、その中でも代表的なセクションを挙げて説明すると、“.dynstr”セクションは、実行バイナリプログラム中の動的リンクに使用するシンボルの文字列そのものを保持する。“.dynsym”セクションは、実行バイナリプログラム中の動的リンクに関するシンボル情報を、各シンボルに対して管理していて、“.dynstr”セクションに存在する文字列を指し、その他のシンボル情報(値やサイズ情報)なども保持している。“.rel”の接頭語から成り立つ一連のセクションは、再配置情報を管理する再配置セクションであり、実行バイナリプログラム中の再配置すべき領域を指し、また再配置の対象となるシンボルを特定するために“.dynsym”セクションの所定のエントリを指している。また、その他、シンボルを検索するための“.hash”セクションや、各シンボルのバージョンタイプを示す“.gnu.version”系のセクションなどがシンボル情報に関連するセクションである。
なお、ELF形式の実行形式を例に挙げて説明したが、他の実行形式でも同様の構成を採用しており、同様の働きを持つセクションから構成されている。
実行バイナリ読み取り部1は、これまでに述べた構成を持つ実行バイナリプログラムが入力されると、実行バイナリプログラムの情報を実行形式に応じて読み取り、その構造を内部で管理する。これにより、実行バイナリプログラムを解析しやすく、あるいは再構成しやすくなる。図4は、実行バイナリ読み取り部1が管理する実行バイナリプログラムの情報の内部管理構造の一例を示す図である。
図4に示す通り、実行バイナリ読み取り部1は、実行バイナリプログラムの中に一つしかないELFヘッダやプログラムヘッダの情報を各々読み取って、実行バイナリプログラム全体に関わる情報を管理する。また、複数存在するセクションに対しては、実行バイナリ読み取り部1は、セクションごとに生成するセクション管理構造121を利用して各セクションを管理する。このセクション管理構造121は、独自セクション管理情報122、セクションヘッダ123及びセクションデータ管理部124で構成される。セクションデータ管理部124は、セクションの実データが存在するセクションデータ部125を管理する。独自セクション管理情報122は、セクションデータ管理部124及びセクションデータ部125とセクションヘッダ123とを含めてセクションに関わる情報を管理する。
なお、ここで挙げた実行バイナリプログラムの内部管理構造は、あくまで一例に過ぎず、実行バイナリプログラム全体に関わる情報や、各セクションを管理できる構造であれば他の構造でもかまわない。
実行バイナリ読み取り部1は、実行バイナリプログラムが入力されると実行バイナリプログラムの内部の構成情報を読み取り、図4に例示するように実行バイナリプログラムの内部情報の内部管理構造を構築して削除可能領域検出部2に渡す。この内部管理構造によって、削除可能領域検出部2は、各セクションの情報を取得し解析することが可能になる。
削除可能領域検出部2は、実行バイナリ読み取り部1から実行バイナリプログラムの内部の構成情報(内部管理構造)を受け取り、シンボルのアドレス解決に利用される再配置情報やシンボル情報を解析し、それらのうち削除可能な領域を検出して、実行バイナリプログラムの内部の構成情報とともに削除可能と検出した情報を、実行バイナリ書き換え部3に渡す。
通常、一般的な動的ローディングシステムにおいて、実行バイナリプログラムの実行時に初めて、そのプログラム本体や使用する共有ライブラリのアドレスを決定し、シンボルのアドレス解決を行う。シンボルのアドレス解決を行う際に、再配置情報やシンボル情報を利用するため、通常それらの情報を削除すると、プログラムとして動作しなくなる恐れがある。
図5を用いて、シンボルのアドレス解決の処理の流れを説明する。図5は、シンボルのアドレス解決の処理の流れを説明するための模式図である。あるプログラムAが共有ライブラリAに存在するliba_func関数134を呼ぶ場合、プログラムAが実行されるまで共有ライブラリAのアドレス空間上の位置は不定である。プログラムAが実行されて、共有ライブラリAの位置が決定されると、初めてliba_func関数134の位置が決定される。そこで、プログラムAの中でliba_func関数を呼んでいる領域131が、プログラムAの再配置情報やシンボル情報132により特定され、さらに共有ライブラリAの中にあるliba_func関数の位置が、共有ライブラリAの再配置情報やシンボル情報133によって決定される。そして、プログラムAから正しくliba_func関数にジャンプできるように設定される。
上記のようにシンボルのアドレスが未解決の実行バイナリプログラムでは、再配置情報やシンボル情報をプログラムの実行時に使用する可能性がある。しかし、本実施の形態の実行バイナリ読み取り部1では、すでにシンボルのアドレス解決を実施済みの実行バイナリプログラムを入力とすることができる。
また、実行バイナリ読み取り部1は、実行バイナリプログラムが入力された時に、その実行バイナリプログラムがすでにアドレス解決済みであるか否かを確認し、アドレス解決済みであるか否かを表すアドレス解決情報を削除可能領域検出部2に渡す。削除可能領域検出部2は、実行バイナリ読み取り部1によって読み取られたアドレス解決情報がアドレス解決済みであるか否かを判定し、実行バイナリプログラムがアドレス解決済みでないと判定された場合、その実行バイナリプログラムの再配置情報やシンボル情報を削除可能領域として検出しない。
そのような実行バイナリプログラムの関数呼び出しの例について説明する。図6は、アドレス解決済みである実行バイナリプログラムの関数呼び出しについて説明するための模式図である。図6のプログラムBでは、元々共有ライブラリBのlibb_func関数144を呼ぶ領域141がある。しかしながら、プログラムBや共有ライブラリBを実行する前に、あらかじめ共有ライブラリBのアドレス空間上の位置が決定している。そのため、プログラムBの関数呼び出し領域141には、実行する前にlibb_func関数にジャンプするためのアドレス(図6では“0x????????”)が直接書かれている。したがって、この場合、図5においてアドレス解決のために利用していたプログラムBの再配置情報やシンボル情報142、及び共有ライブラリBの再配置情報やシンボル情報143を使用することはない。
したがって、実行バイナリ読み取り部1にシンボルのアドレス解決を実施済みの実行バイナリプログラムが入力され、削除可能領域検出部2がシンボルのアドレス解決に必要な再配置情報やシンボル情報の一部を削除可能な領域として検出して、実行バイナリ書き換え部3に渡しても、実行バイナリ書き換え部3は正常に動作する実行バイナリプログラムを出力する。
なお、本実施の形態では、関数呼び出しに関して例を挙げて説明したが、変数参照のためのアドレス解決やその他のアドレス解決なども関数呼出しと同様の仕組みによって実施される。
シンボルのアドレス解決を実施済みの実行バイナリプログラムは、元々動的ローディングシステム用に作成された実行バイナリプログラムを利用して作成することが可能である。シンボルのアドレス解決が実施済みの実行バイナリプログラムを作るための方法の一例を以下に示す。
まず、全ての共有ライブラリのアドレス空間を重複しないようにあらかじめ定める必要がある。なぜなら、共有ライブラリは複数のアプリケーションプログラムや別の共有ライブラリから参照される可能性があり、共有ライブラリのアドレス空間上の位置はシステム全体で一意に定める必要があるためである。もし、複数の共有ライブラリのアドレス空間が重複すると、それらを利用するアプリケーションプログラムが特定のアドレス空間を指した時に、いずれの共有ライブラリを指しているのか判別できなくなり、共有ライブラリのアドレスの再配置が必要になる。
もちろん、全てのアプリケーションプログラムが特定のアドレス空間を指した時に、共有ライブラリが一意に特定できるのであれば、一部の共有ライブラリのアドレス空間が重複していてもかまわない。
また、全ての共有ライブラリのアドレス空間を重複しないようにするだけではなく、全てのアプリケーションプログラムのアドレス空間を重複しないように設定しても良いし、逆にアプリケーションプログラムのアドレス空間は重複するように設定してもかまわない。
全ての共有ライブラリのアドレス空間が設定されると、共有ライブラリの持つシンボルなどのアドレスが全て決まるので、全ての実行バイナリプログラム(アプリケーションプログラムと共有ライブラリ)のシンボルのアドレス解決を事前に行うことができる。
実施方法の一例を挙げると、アプリケーションプログラムをアドレス空間上にロードし、さらにそのアプリケーションプログラムが使用する共有ライブラリもアドレス空間上にロードする。そして、実際にアプリケーションプログラムの持つ再配置情報やシンボル情報、及びロードしている共有ライブラリの再配置情報やシンボル情報を利用して、事前に設定したアドレス通りにシンボルのアドレス解決を行う。アドレス解決を行った結果を実行バイナリプログラムの情報に書き戻せばよい。これを全てのアプリケーションプログラムに対して実施し、アドレス解決を行った結果を全ての実行バイナリプログラムの情報に書き戻せばよい。上記方法により、図6に示すようなシンボルのアドレス解決を実施済みの実行バイナリプログラムを得ることができる。
削除可能領域検出部2は、実行バイナリ読み取り部1から実行バイナリプログラムの内部構成情報を取得し、まず再配置情報やシンボル情報を解析し、削除可能かどうかの判定条件に照らし合わせて削除可能領域を検出する。
削除可能かどうかの判定は、基本的にシンボルのアドレス解決に使用される再配置情報やシンボル情報であるかどうかに基づいて行われる。再配置情報であり、“.rel”の接頭語から始まるセクションである“.rel”系セクションと、シンボル情報を管理する“.dynsym”セクションと、シンボル名となる文字列を持つ“.dynstr”セクションとの関係の例を図7に示して、削除可能かどうかの判定条件に関して説明する。図7は、“.rel”系セクションと“.dynsym”セクションと“.dynstr”セクションとの関係を示す図である。
図7の例では、“.rel”系セクションに3つのエントリ151が存在し、それぞれ別々の“.dynsym”セクションのエントリを指している。また、“.dynsym”セクションのエントリは、シンボルの文字列を特定するために“.dynstr”セクションの文字列を指している。
図7の例では、“.rel”系セクションのエントリ152は、“.dynsym”セクションのエントリ153を指し、“.dynsym”セクションのエントリ153は、“.dynstr”セクションの文字列“XYZ”を指している。
削除可能領域検出部2は、シンボルのアドレス解決に使用される再配置情報である“.rel”系セクションの全てのエントリを削除可能領域として検出する。また、その“.rel”系セクションからたどることが可能な“.dynsym”セクションの全てのエントリも削除可能領域として検出する。さらに、削除可能と検出された“.dynsym”セクションが指している“.dynstr”セクションの文字列を削除可能領域として検出する。
図7の例では、3つのエントリからなる“.rel”系セクション151と、そこから指されている“.dynsym”セクションの3つのエントリ153,154,155と、そこから指されている“.dynstr”セクションの3つの文字列“ABC”,“XYZ”,“DEF”とが削除可能領域として検出される。
削除可能領域検出部2は、上記の通り“.rel”系セクションからたどって“.dynstr”セクションの文字列を参照し、その文字列がアルファベット以外から始まる文字列であった場合に、その文字列とその文字列を指していたセクションを削除可能領域と見なさないという判定条件を備えることも可能である。これは、アンダースコア“_”のようにアルファベット以外から始まる文字列は内部生成用のものであり、シンボルのアドレス解決と関係ない可能性があるからである。文字列の削除可能領域の検出に関するこの削除対象外とする基準は、今後同様に文字列の削除を考える時に実施することが可能である。
また、削除可能領域検出部2は、さらに上記再配置情報である“.rel”系セクションからたどって得られたシンボル情報だけではなく、“.rel”系セクションからは指されず“.dynsym”セクションから直接指される“.dynstr”セクションの文字列と、それを指している“.dynsym”セクションのエントリとを削除可能領域として検出する判定条件を備えることも可能である。
この場合、“.dynsym”セクションのエントリには、実行バイナリプログラム自身が持つ関数を、外部の別の実行バイナリプログラムが使用できるようにエクスポートしているシンボルが登録されている。このシンボルは、別の実行バイナリプログラムからシンボルのアドレス解決の際に検索される対象となる。したがって、アドレス解決のためのシンボル情報として上記の通り“.dynsym”セクションから直接指される文字列と、その“.dynsym”セクションを削除可能と見なすことができる。
ただし、“.dynsym”セクションには、実行バイナリプログラムに固有でアドレス解決とは無関係のシンボル情報も存在する。したがって、“.dynsym”セクションから直接指される文字列と、その“.dynsym”セクションを削除可能領域とする判定条件を用いる際には、アドレス解決とは無関係のシンボル情報を削除対象外とすればよい。例えば、シンボルのタイプ属性が“NOTYPE”のものを削除対象外とする方法が考えられる。また、シンボルのタイプ属性がデータオブジェクトあるいはコードオブジェクトのシンボル情報のみを削除可能領域として検出してもよい。
その他にも例えば、グローバルスコープのシンボルであること、あるいは関連セクションが“.text”、“.rodata”、“.data”及び“.bss”のいずれかのセクションであることなどを削除可能であることの判定条件にしてもよい。
また、削除可能領域検出部2は、上記に述べてきた通りシンボル情報が削除可能領域かどうかの判定を容易にするために、実行バイナリプログラムのシンボル情報を解析し管理することもできる。
シンボル情報を削除するためには、1つのシンボルに対する情報を管理すると、シンボルの削除可能かどうかの判定やシンボル情報に対する操作を管理しやすくなる。また、このシンボル情報の内部管理構造がある場合、実行バイナリ書き換え部3は、実行バイナリプログラムを書き換えて容易に再構成することができる。
図8は、シンボル情報の内部管理構造の一例を示す図である。図8に示すシンボル情報の内部管理構造は、あるシンボルに対するシンボル情報を管理するものであり、次のシンボル情報の内部管理構造へのポインタ166を持ち、各シンボル情報の内部管理構造をリンク構造でつないでたどることができる。
図8のシンボル情報の内部管理構造には、シンボル削除可能かどうかの可否情報161がある。シンボル情報が削除可能かどうかの判定条件にしたがって、管理するシンボル情報が削除可能かどうかの可否情報161を更新し管理することができる。
また、シンボル情報の内部管理構造には、何のシンボルに関して管理しているかを判別するために、シンボル文字列へのポインタ162がある。そして、シンボルを参照しているセクションに関する情報163及びそのセクションのセクション内における位置情報164を備える。これらの情報により、今管理しているシンボルがどのセクションから参照されているか、またセクションのどの位置から参照されているかを管理することができる。
このシンボル情報の内部管理構造には、さらに、文字列を他のシンボルと共用していることを判断するための情報を備えることができる。これは、複数のシンボルが、実行バイナリプログラムの“.dynstr”セクションにある文字列を共用する可能性があるためである。図9は、実行バイナリプログラムの複数のシンボルが文字列を共用する場合の動作を説明するための模式図である。
図9では、実行バイナリプログラムのシンボルの文字列そのものを保持する“.dynstr”セクションに、“unsetenv”という文字列が存在する。そして、この実行バイナリプログラムには、“setenv”というシンボル172及び“unsetenv”というシンボル173が存在する。この場合、“setenv”というシンボル172は、“unsetenv”というシンボル173の末尾部分の文字列と一致する。このように、実行バイナリプログラムでシンボルの文字列を共用する場合がある。
文字列を共用する場合、図9に示す通り“unsetenv”というシンボル173は、通常通り実行バイナリプログラムのシンボルの文字列“unsetenv”の先頭171を指すが、“setenv”というシンボル172はシンボルの文字列“unsetenv”のうちの“setenv”の先頭174を指す。
以上のように、複数のシンボルが実行バイナリプログラムにある文字列を共用する場合、一方のシンボルのみが削除可能と判定できても、他方のシンボルが削除可能と判定されていなければ、実行バイナリプログラムにあるシンボルの文字列及び関連するシンボル情報は削除できない。例えば、図9の例では、“unsetenv”というシンボル173が削除可能と判定されても、実行バイナリプログラムのシンボルの文字列“unsetenv”を削除してしまうと、文字列を共用しているシンボル“setenv”の指すべき文字列がなくなるという問題が起こる。
上記問題を解決するために、シンボル情報の内部管理構造は、文字列を他のシンボルと共用していることを判断するための共用情報165を持つ。例えば、その文字列を共用しているシンボルの数を記録しても良いし、文字列の先頭から指しているか途中から指しているかを管理してもよい。削除可能領域検出部2は、削除可能であるかどうかを判定する際に、シンボル情報の内部管理構造にあるこの文字列の共用情報165を参照し、文字列を共用している全てのシンボルに対して削除可能であると判定した時に、それらのシンボル情報を削除可能として検出する。その他にも、共用している文字列全体のうち一部の部分文字列に関して削除可能であると判定した時に、その部分の文字列とそれに関するシンボル情報とを削除可能領域として検出することも可能である。
ここで、削除可能領域検出部2が、実行バイナリ読み取り部1から実行バイナリプログラムの内部の構成情報を受け取って、シンボル情報の内部管理構造を作成する処理について説明する。図10及び図11は、シンボル情報の内部管理構造を作成する処理手順の一例を示すフローチャートである。
まず、削除可能領域検出部2は、実行バイナリ読み取り部1から実行バイナリプログラムの構成情報を取得する(ステップS1)。そして、削除可能領域検出部2は、“.dynstr”セクションを解析し文字列単位でシンボル情報の内部管理構造を作成する(ステップS2)。これにより、実行バイナリプログラムが保持する文字列一つ一つに対するシンボル情報の内部管理構造が作成される。
そして、次に削除可能領域検出部2は、シンボル情報の内部管理構造によってシンボルを参照するセクション情報を管理するために、各セクションからアクセスするシンボル名との照合を行う。
まず、削除可能領域検出部2は、“.dynsym”セクションを解析し、得られたシンボル名をシンボル情報の内部管理構造の中で検索する(ステップS3)。そして、削除可能領域検出部2は、“.dynsym”セクションからアクセスするシンボル名と完全一致する文字列がシンボル情報の内部管理構造の中にあるかどうかを判定する(ステップS4)。シンボル名と完全一致する文字列が存在する場合(ステップS4でYES)、削除可能領域検出部2は、シンボル情報を削除できるようにするため、一致した文字列を管理するシンボル情報の内部管理構造に、“.dynsym”セクションからの参照があることを表す参照情報及び参照元の位置を表す位置情報を記録する(ステップS5)。
一方、シンボル名と完全一致する文字列が存在せず部分一致する場合(ステップS4でNO)、このシンボルは他のシンボルと文字列を共用していると見なすことができる。そこで、削除可能領域検出部2は、文字列に部分一致するシンボルのために新規に内部管理構造を作成する(ステップS6)。そして、削除可能領域検出部2は、部分一致したシンボルの双方の内部管理構造に“.dynsym”セクションからの参照情報及び参照位置とともに共用に関する情報を記録する(ステップS7)。
なお、削除可能領域検出部2は、“.rel”系セクションに対しても、“.dynsym”セクションに対して行ったステップS4からステップS7の処理と同様の処理を行う。すなわち、削除可能領域検出部2は、まず“.rel”系セクションを解析し、得られたシンボル名をシンボル情報の内部管理構造の中で検索する(ステップS8)。
そして、削除可能領域検出部2は、“.rel”系セクションから“.dynsym”セクション経由でアクセスするシンボル名と完全一致する文字列がシンボル情報の内部管理構造の中にあるかどうかを判定する(ステップS9)。シンボル名と完全一致する文字列が存在する場合(ステップS9でYES)、削除可能領域検出部2は、シンボル情報を削除できるようにするため、一致した文字列を管理するシンボル情報の内部管理構造に、“.rel”系セクションからの参照があることを表す参照情報及び参照元の位置を表す位置情報を記録する(ステップS10)。必要であれば、削除可能領域検出部2は、アクセスの際に経由した“.dynsym”セクションの情報も記録する。
一方、シンボル名と完全一致する文字列が存在せず部分一致する場合(ステップS9でNO)、このシンボルは他のシンボルと文字列を共用していると見なすことができる。そこで、削除可能領域検出部2は、文字列に部分一致するシンボルのために新規に内部管理構造を作成する(ステップS11)。そして、削除可能領域検出部2は、部分一致したシンボルの双方の内部管理構造に“.rel”系セクションからの参照情報及び参照位置とともに共用に関する情報を記録する(ステップS12)。必要であれば、削除可能領域検出部2は、アクセスの際に経由する“.dynsym”セクションに関する情報も記録する。
最後に、削除可能領域検出部2は、削除可能かどうかの判定条件にしたがって削除可能かどうかの可否情報を、シンボル情報の内部管理構造に記録する(ステップS13)。
なお、削除可能かどうかの判定条件によっては、図10に示す“.dynsym”セクションに関するステップS3からステップS7までの一連の処理、あるいは図11に示す“.rel”系セクションに関するステップS8からステップS12までの一連の処理のどちらか一方の処理のみでもかまわない。
例えば、削除可能かどうかの判定条件が、“.rel”系セクションからたどれるシンボル情報であり、かつ共有しているシンボル全てが削除できる場合という条件であれば、図10の処理のうち“.dynsym”セクションに関するステップS3からステップS7までの一連の処理を行わなくてよい。また、逆に他のセクションに関して、図10の“.dynsym”セクションに関するステップS3からステップS7までの一連の処理と同様の処理を、図11に示すステップS13の処理の前に追加することも可能である。
すなわち、プログラムの実行時にシンボルにアクセスする他のセクションに関して、同様の一連の処理を追加して、そのセクションからの参照情報をシンボル情報の内部管理構造に記録しておくことが有効となる。なぜなら、そのようなセクションは、シンボルのアドレス解決とは関係なくプログラムの実行時にシンボル情報にアクセスする。そのため、そのシンボル情報が例えば“.rel”系セクションから参照されているという理由のみで削除すると、プログラムの実行時にシンボルが存在しないため動作しなくなる恐れがある。具体的にそのようなセクションの例を挙げると、種々の動的リンク情報を管理している“.dynamic”セクションや、シンボルのバージョンを管理する“.gnu.version”系セクションや、ライブラリ情報を保持する“.gnu.liblist”セクションなどがある。
削除可能領域検出部2は、削除可能かどうかの判定条件として、上記のようなセクションからの参照があるシンボル情報を削除対象外とする条件を採用することができ、より精密なシンボル情報の削除を行うことができる。
削除可能領域検出部2は、削除可能かどうかの判定条件として、さらに他の実行バイナリプログラムからの参照があるシンボル情報を削除対象外とすることもできる。例えば、事前にシンボル情報を使用する実行バイナリプログラムのリストがあり、実行バイナリ読み取り部1は、そのリストの実行バイナリプログラムを読み取る。削除可能領域検出部2は、その実行バイナリプログラムのシンボル情報を受け取って解析し、参照する他の実行バイナリプログラムのシンボル情報を検出して、削除対象外とする。
削除可能領域検出部2は、以上に述べた種々の判定条件を用いることができ、設定された判定条件を満たしたシンボル情報の内部管理構造に、シンボル削除可能であることを記録し、そのシンボル情報の内部管理構造を実行バイナリ書き換え部3に渡す。
なお、削除可能領域検出部2で実行バイナリプログラムのシンボル情報の解析を容易にするために上記のシンボル情報の内部管理構造を説明したが、再配置情報やシンボル情報をたどって解析できればよく、その他の方法を採用しても本発明の実施に問題はない。
実行バイナリ書き換え部3は、これまでに解析した実行バイナリプログラムの情報と、削除可能領域として検出した情報とを削除可能領域検出部2から取得する。実行バイナリ書き換え部3は、削除可能領域の情報として、例えばこれまでに説明したシンボル情報の内部管理構造と、そこに記録されている削除可能かどうかの可否情報とを受け取る。
実行バイナリ書き換え部3は、受け取った実行バイナリプログラムの情報と削除可能領域の情報とに基づいて、削除可能な再配置情報やシンボル情報を特定できる。例えば、実行バイナリ書き換え部3は、実行バイナリプログラムの各セクション及び各セクション内の削除可能領域であるシンボル情報の内部管理構造を1要素ずつ取得して、削除可能かどうかの可否情報を確認する。そのシンボル情報に対して削除可能である情報があれば、シンボル情報の内部管理構造に記録されている参照セクションの情報やシンボル文字列へのポインタをたどって、実行バイナリプログラムの中で削除すべき領域を特定できる。それをシンボル情報の内部管理構造の全ての要素に対して行えば、1つの実行バイナリプログラムに対する削除可能領域を全て特定できる。
しかし、実行バイナリプログラムの中で削除可能領域の実データそのものを削除してしまうと、実行バイナリプログラムの内部構成が変化して、実行バイナリプログラムのコード本体であるテキスト情報やデータ情報の配置アドレスが変化する可能性がある。ある実行バイナリプログラムのテキスト情報やデータ情報は、別の複数の実行バイナリプログラムから参照されている可能性がある。したがって、全ての実行バイナリプログラムの中で、配置アドレスの変化が生じた実行バイナリプログラムを参照する領域を検出し、変化した分だけ参照するアドレスを補正する必要が生じる。この補正がないと実行バイナリプログラムはプログラムとして動作しない。しかし、実行バイナリプログラムのコードの中から、別の実行バイナリプログラムの特定のアドレスを参照しているかどうかを検出することは非常に困難であるという問題があった。
そのような配置アドレスの変化が好ましくないセクションを例に挙げると、セクション属性が“PROGBITS”であるセクション、あるいはそのような情報がなければ、実行バイナリプログラムの実データを形成する“.plt”、“.text”、“.fini”、“.rodata”、“.data”、“.ctors”、“.dtors”、“.got”及び“.bss”などのセクションが代表的なものである。
上記問題に対処するため、実行バイナリ書き換え部3は、削除可能領域として検出された再配置情報及びシンボル情報に対して、実データそのものを削除するのではなく、特定データに書き換える。
例えば、実行バイナリ書き換え部3は、削除可能と検出されているシンボル情報の内部管理構造を取得して、そこから参照するセクション、参照元を示す位置及びシンボル文字列の位置を取得できれば、実行バイナリプログラム中のその領域を特定データで書き換える。ここで、特定データは、ある同一のデータ、例えば0あるいは0xFFなどでよい。また、特定データは、ある一定の規則に基づくデータでもかまわない。
実行バイナリ書き換え部3が、実行バイナリプログラムの中の実データそのものを削除するのではなく、特定データに書き換えることにより、実行バイナリプログラムのテキスト情報やデータ情報の配置アドレスが変化しなくなり、上記問題を回避できる。
また、最終的に実行バイナリイメージ作成部4は、実行バイナリ書き換え部3によって書き換えられた実行バイナリプログラムを機器やシステム上で認識可能な実行バイナリイメージに変換する。この実行バイナリイメージを、圧縮技術を用いて作成すれば、特定データ例えば同一データで書き換えられた領域は、他のデータと比較して一般的に圧縮率が高くなるので、実行バイナリイメージのデータサイズを削減することができる。
また、実行バイナリ書き換え部3は、実行バイナリプログラムの削除可能領域を特定データで書き換えて、実行バイナリ読み取り部1で読み取った実行バイナリプログラムの内部構成であるELFヘッダやプログラムヘッダや各セクション構造を構成し直して、実行バイナリプログラムの形式で出力する。
一つ一つの実行バイナリプログラムが、実行バイナリ読み取り部1に入力されて、再配置情報及びシンボル情報が削除可能な状態になって、実行バイナリ書き換え部3から出力される。次に、実行バイナリイメージ作成部4は、これらの実行バイナリプログラムを、機器やシステム上で動作できる状態にするために実行バイナリイメージを作成する。例えば、ファイルシステムなどが導入され、そのファイルシステム用の実行バイナリイメージが作成される。
この実行バイナリイメージを作成するにあたって、圧縮技術を用いれば、上述した通り、特定データに書き換えた領域の圧縮率が高まり、実行バイナリイメージのデータサイズを削減することができる。例えば、実行バイナリプログラムを圧縮することができるファイルシステムを導入することが考えられる。ファイルシステムについては、FAT(File Allocation Table)、VFAT(Virtual FAT)、FAT32、NTFS(NT File System)、HFS(High−performance File System)、ext2、ext3、ReiserFS、JFS(Journaling File System)、XFS、JFFS(Journaling Flash File System)2、CRAMFSなどが使用できる。その他、独自の圧縮技術、あるいは独自のファイルシステムを使用してもかまわない。
これまで実行バイナリ書き換え部3が、実行バイナリプログラムの削除可能領域を特定データに書き換える方式を説明してきたが、それだけではなく、さらに実行バイナリプログラムの削除可能領域、すなわち特定データに書き換える領域をセクション内で集約することも可能である。特定データへの書き換え領域を集約することにより、圧縮技術によってより高い圧縮率による実行バイナリイメージのサイズ削減の効果が得られる。書き換え領域を集約する例について、図12及び図13の例を用いて説明する。
図12は、実行バイナリ書き換え部3が特定データに書き換える領域を集約しない場合の動作を説明するための模式図である。図13は、実行バイナリ書き換え部3が特定データに書き換える領域を集約する場合の動作を説明するための模式図である。
図12において、“.rel”系セクションの3つのエントリ181は、それぞれ“.dynsym”セクションの3つのエントリ182,183,184に対応付けられている。“.dynsym”セクションのエントリ182は、“.dynstr”セクションの文字列“XYZ”を指しており、エントリ183は文字列“ABC”を指しており、エントリ184は文字列“DEF”を指している。図12において、実行バイナリ書き換え部3は、シンボル情報が削除可能であることを表す可否情報にしたがって、“.dynsym”セクションのエントリ182,183,184、及び“.dynstr”セクションの3つの文字列を特定データに書き換えることになる。この場合、特定データは、“.dynsym”セクション及び“.dynstr”セクションの中で複数領域に分散してしまう。
そこで、図13に示すように、実行バイナリ書き換え部3は、特定データに書き換える“.dynsym”セクションの3つのエントリ185,186,187を一箇所に集約する。また、実行バイナリ書き換え部3は、“.dynstr”セクションの3つの文字列も一箇所に集約する。なお、図13の例では、書き換える領域を各セクションの末尾に集約しているが、一箇所に集約するのであれば、セクション内のどの位置でもかまわない。また、特定データへの書き換えと、書き換え領域の集約との処理順序は問わない。
実行バイナリ書き換え部3が、特定データに書き換える領域を一箇所に集約することによって、セクション内の残りのデータも位置が変化する可能性がある。そこで実行バイナリ書き換え部3は、残りのデータの位置が変化すると、それに関連するセクションの参照先を補正する。
まず、“.dynstr”セクション内の書き換え領域を集約する場合、実行バイナリプログラムの残りの文字列の位置が変化することに伴って、その文字列を参照するセクションの各エントリの位置を補正する。これは、削除可能領域検出部2から取得したシンボル情報の内部管理構造から、そのシンボル文字列を参照するセクションの情報を取得して、それぞれのセクションの位置を変更すればよい。
例えば、“.dynstr”セクションの書き換え領域が集約されて文字列の位置が変更されると、実行バイナリ書き換え部3は、文字列を参照している“.dynsym”セクションや“.rel”系セクションの各エントリの位置を補正する。また、実行バイナリ書き換え部3は、その他、動的リンク情報を管理している“.dynamic”セクション、シンボルのバージョンを管理している“.gnu.version”系セクション、ライブラリ情報を保持する“.gnu.liblist”セクション、及びシンボル文字列を検索するためのハッシュ構造を管理する“.hash”セクションなどにおいて、文字列を参照している領域の位置を補正する。
実行バイナリ書き換え部3は、さらに実行バイナリプログラムの削除可能領域、すなわち特定データに書き換える領域をセクション内だけではなく、実行バイナリプログラム全体で集約することも可能である。特定データへの書き換え領域を実行バイナリプログラム全体で集約することにより、セクション単位で集約するよりもさらに大きく集約することができる。さらに、書き換え領域が実行バイナリプログラム全体で集約された実行バイナリイメージを圧縮した場合、セクション単位で集約された実行バイナリイメージを圧縮するよりも、実行バイナリイメージのデータサイズをより削減することができる。ここで、書き換え領域を実行バイナリプログラム全体で集約する例を、図14を用いて説明する。
図14は、実行バイナリ書き換え部が特定データに書き換える領域を実行バイナリプログラム全体で集約する場合の動作を説明するための模式図である。図14では、例として“.dynsym”セクションと“.dynstr”セクションと“.gnu.version”系セクションとを、削除可能領域を特定データに書き換えるセクションとして挙げている。この3つのセクションの中で、実行バイナリ書き換え部3が特定データに書き換える部分をそれぞれ領域191,192,193とすると、それらを実行バイナリプログラム全体で集約すると領域194に集約される。ただし、この時実行バイナリプログラムの中にあるテキスト情報やデータ情報に関しては、配置アドレスを変化させない。
実行バイナリプログラム全体で特定データの書き換え部分を集約する方法としては、例えば、直前のセクションの末尾(セクションの特定データではない部分の末尾)に続いて次のセクションを配置するように、対象セクションの位置を補正し、その際セクションの移動によって上書きされた特定データの部分(削除可能領域)を、移動後のセクションの末尾に特定データのデータサイズ分まとめて書き出せばよい。実行バイナリ書き換え部3は、この動作を全てのセクションに対して行えばよい。セクションの位置の補正は、例えばセクションヘッダ等にあるセクションの位置情報を変更すればよい。なお、ここに挙げた方法は一例であり、特定データを実行バイナリプログラム全体で集約する図14に示す動作が実現できれば他の方法でもかまわない。
実行バイナリ書き換え部3が実行バイナリプログラム全体で書き換え領域を集約する場合、各セクションの位置が変化する可能性がある。そこで、実行バイナリ書き換え部3は、セクションの位置の変化にしたがって、実行バイナリプログラム全体の情報を補正する必要がある。
例えば、セクションヘッダにはセクションの配置アドレスとオフセットとが存在するので、実行バイナリ書き換え部3は、セクションの位置の変化にしたがって、それらを補正する必要がある。また、プログラムヘッダもそのプログラムヘッダに属するセクションサイズの合計値を求め、求めた合計値に基づいてプログラムヘッダに含まれるファイルサイズ及びメモリサイズを必要あれば補正する。
その他にも、実行バイナリ書き換え部3は、削除可能領域検出部2から取得した削除可能領域の情報で、あるセクション全てが削除可能になっている場合、セクションそのものを削除することができる。この場合にも上述した実行バイナリプログラム全体に関して情報を補正する必要があれば行う。また、各セクションには他のセクションを参照することを示す情報があるので、実行バイナリ書き換え部3は、この情報を必要があれば補正する。その他にもELFヘッダは存在するセクション数を管理しているので、実行バイナリ書き換え部3は、セクション数の情報を補正する必要がある。
これまで、実行バイナリ書き換え部3が削除可能領域を特定データに書き換えることにより、圧縮率を高めて、実行バイナリイメージのデータサイズを削減する方法を説明してきた。その方法とは別に、実行バイナリイメージ作成部4は、さらに特定データで書き換えられた一定のメモリ領域単位(ページ単位)を、ある実行バイナリプログラムの中で、あるいは全ての実行バイナリプログラムで共用してもよい。この場合、実行バイナリイメージのサイズをより削減することが可能である。この方法に関して、図15の例を用いて説明する。
図15は、特定データに書き換えられたページを全ての実行バイナリプログラムで共用する動作について説明するための模式図である。図15(A)は、2つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの一例を示す図であり、図15(B)は、共用ページを利用した実行バイナリイメージの一例を示す図である。図15(A)では、実行バイナリプログラムAと実行バイナリプログラムBの2つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの例を挙げている。実行バイナリプログラムのファイルデータは、ページ単位で管理されている。そして、実行バイナリプログラムA及び実行バイナリプログラムBともに図15(A)では“0”で表されている特定データに書き換えられたページ201を持つ。通常、実行バイナリイメージは、この“0”で表されたページ201を含む所定のサイズのファイルデータ202,203から成り立つ。
しかし、本実施の形態における実行バイナリイメージ作成部4は、図15(B)に示す通り共用ページを利用した実行バイナリイメージを作成することが可能である。実行バイナリイメージ作成部4は、実行バイナリプログラムのファイルデータをページ単位で管理するためのページ管理情報204を作成し、作成したページ管理情報204を各実行バイナリプログラムに持たせる。実行バイナリイメージ作成部4は、特定データで書き換えられたページ(図15(A)で“0”と表されているページ)が、1つの実行バイナリプログラムの複数の領域から共用される一つの共用ページ206を指すようにページ管理情報204を設定し、また他の実行バイナリプログラムからもページ管理情報204によって同一の共用ページ206を指すようにページ管理情報204を設定して、実行バイナリイメージを作成する。
ここで、ページ管理情報204は、ページ単位ではなく、何らかの物理メモリの管理単位に従って管理すればよい。また、必ずしも特定データで書き換えられたページ(図15(A)で“0”と表されているページ)個々に対して共用ページへのポインタを管理する必要はない。例えば、ファイルデータの中で、共用ページに割り当てる領域を、ファイルの先頭からのアドレスのオフセット値によって範囲を指定してもよいし、絶対アドレス値によって範囲を指定してもよい。
そのように設定することにより、従来5ページ分のサイズのファイルデータ202,203を含めていた実行バイナリイメージが、2ページ分のサイズのファイルデータ205,207と1ページ分のサイズの共用ページ206とを含めるだけでよく、実行バイナリイメージのサイズを削減することができる。
プログラムを実行する際には、以上のように作成した実行バイナリイメージを、機器やシステムが認識する必要がある。典型的には、オペレーティングシステム(OS)や基本ソフトウェアと呼ばれるソフトウェアが、記憶媒体に格納されている実行バイナリイメージを読み取って解析し、実行するための実行バイナリプログラムを認識して実行のための環境を整える。
図16は、共用ページを利用した実行バイナリイメージと、実行バイナリプログラムが実行される際のアドレス空間との関係を説明するための模式図である。図16の実行バイナリプログラムAが起動されると、OSは実行バイナリプログラムAの情報や実体が、実行バイナリイメージが持つ管理情報、例えば、図16のinode211から特定される。ページ管理情報212は、前述した通り、実行バイナリプログラムの実体を指し示す管理情報、あるいは共用ページ213を使用する領域を特定するための情報を含む。
OSは、ページ管理情報212を読み取り、実行バイナリイメージの物理的な領域を、プログラムを実行するアドレス空間に割り当てる。ここで、プログラムのアドレス空間上で、実行バイナリプログラムの“.text”セクションなどの位置を変えないために、仮想記憶管理機構214により仮想的なアドレス空間が作成される。すなわち、仮想記憶管理機構214は、実行バイナリプログラムに対して特定データで書き換えたページ領域と、書き換えていないページ領域とを認識し、仮想的なアドレス空間上で元の実行バイナリプログラムの実体の配置を実現する。
ここで、具体的な例について図16を用いて説明する。実行バイナリプログラムAを仮想的なアドレス空間に展開する場合、OSは、ファイルデータ218の最初のページを、プログラムの仮想的なアドレス空間上における最初の位置215に割り当てるように仮想記憶管理機構214を設定する。そして、OSは、ページ管理情報212を参照し、後続する3つのページが共用ページ213を使用していることを認識する。OSは、仮想的なアドレス空間上における2番目から4番目の位置217にそれぞれ共用ページ213を割り当てるように仮想記憶管理機構214を設定する。そして、OSは、ファイルデータ218の最後のページを、仮想的なアドレス空間上における最後の位置216に割り当てるように仮想記憶管理機構214を設定する。実行プログラムAは、仮想記憶管理機構214が管理する仮想的なアドレス空間上で動作する。
同様に、実行バイナリプログラムBを仮想的なアドレス空間に展開する場合、OSは、ページ管理情報212を参照し、1番目と2番目のページが共用ページ213を使用していることを認識する。OSは、仮想的なアドレス空間上における1番目と2番目の位置219にそれぞれ共用ページ213を割り当てるように仮想記憶管理機構214を設定する。次に、OSは、ファイルデータ223の最初のページを、プログラムの仮想的なアドレス空間上における3番目の位置220に割り当てるように仮想記憶管理機構214を設定する。そして、OSは、ページ管理情報212を参照し、後続する4番目のページが共用ページ213を使用していることを認識する。OSは、仮想的なアドレス空間上における4番目の位置221に共用ページ213を割り当てるように仮想記憶管理機構214を設定する。そして、OSは、ファイルデータ223の最後のページを、仮想的なアドレス空間上における最後の位置222に割り当てるように仮想記憶管理機構214を設定する。実行プログラムBは、仮想記憶管理機構214が管理する仮想的なアドレス空間上で動作する。
以上の動作により、例えば、図16の仮想的なアドレス空間上の位置216に実行バイナリプログラム中の実行コード本体であるテキスト情報やデータ情報が配置されるので、アドレス空間上の配置アドレスを変化させることなくテキスト情報やデータ情報を配置することができ、他の実行コードからも問題なくアクセスすることが可能になる。
なお、図16の例では、仮想記憶管理機構214は、仮想的なアドレス空間上における位置217に、物理的な実行バイナリイメージの共用ページ213を割り当てているが、共用ページに全くアクセスしないことが予めわかっている場合、仮想的なアドレス空間上の位置217を共用ページの物理的な領域に割り当てなくても動作に問題はない。また、どのプログラムも特定データで書き換えたページ領域にアクセスしないことがわかっている場合、さらに実行バイナリイメージの中から共用ページを除くことも可能である。
本実施の形態における実行バイナリイメージ作成装置は、情報機器、AV機器、通信機器及び家電機器などの種々の機器に搭載されるコンピュータで実行される実行バイナリプログラムに適用するものであり、コンピュータが認識するための実行バイナリイメージを出力する。
図17は、本実施の形態における情報処理システムの構成を示す図である。図17に示す情報処理システム10は、実行バイナリイメージ作成装置11とコンピュータ12とを備える。実行バイナリイメージ作成装置11の構成は、図1に示す実行バイナリイメージ作成装置と同じである。コンピュータ12は、記憶部21及びプログラム実行部22を備える。
記憶部21は、例えばROM等で構成され、実行バイナリイメージ作成装置11によって作成された実行バイナリイメージを記憶する。プログラム実行部22は、例えばCPU等で構成され、記憶部21に記憶されている実行バイナリイメージを仮想アドレス空間に展開して実行する。なお、本実施の形態において、記憶部21が実行バイナリイメージ記憶部の一例に相当し、プログラム実行部22が実行部の一例に相当する。また、本実施の形態において、実行バイナリイメージ実行プログラムが例えばROMに記憶されており、実行バイナリイメージ実行プログラムが記憶部21及びプログラム実行部22としてCPU及びEEPROMを機能させる。
図17に示すように、実行バイナリイメージ作成装置11はコンピュータ12の外部にあり、実行バイナリイメージ作成装置11から出力される実行バイナリイメージをコンピュータ12上で認識し動作せることが可能である。
また、別の実施の形態として、実行バイナリプログラムが実行されるコンピュータ上で、実行バイナリイメージ作成装置と同様の機能を動作させることも可能である。図18は、本実施の形態における情報処理システムの別の構成を示す図である。図18に示すコンピュータ12’は、実行バイナリイメージ作成処理部11’、記憶部21、プログラム実行部22及び通信部23を備える。情報処理システム10’は、実行バイナリイメージ作成処理部11’、記憶部21及びプログラム実行部22で構成される。なお、図18に示す情報処理システム10’において、図17に示す情報処理システム10と同じ構成については同じ符号を付し、説明を省略する。
通信部23は、例えばインターネットなどのネットワークを介して実行バイナリプログラムを受信し、受信した実行バイナリプログラムを実行バイナリイメージ作成処理部11’の実行バイナリ読み取り部1へ出力する。実行バイナリイメージ作成処理部11’及びプログラム実行部22は、例えばCPU等で構成され、記憶部21は、例えばEEPROM(Electrically Erasable Programmable Read Only Memory)等で構成される。実行バイナリイメージ作成処理部11’の構成は、図1に示す実行バイナリイメージ作成装置の構成と同じである。
このように、ネットワークを介して実行バイナリプログラムが受信され、コンピュータ内で実行バイナリイメージが作成されるので、実行バイナリイメージをアップデートすることができる。
なお、本実施の形態ではネットワークを介して実行バイナリプログラムを受信して実行バイナリイメージを作成しているが、本発明は特にこれに限定されず、CD−ROMなどのコンピュータ読み取り可能な記録媒体から実行バイナリプログラムを読み出して実行バイナリイメージを作成してもよい。この場合、コンピュータ12’は、記録媒体を駆動する記録媒体駆動部を備える。記録媒体駆動部は、記録媒体から実行バイナリプログラムを読み出し、読み出した実行バイナリプログラムを実行バイナリイメージ作成処理部11’の実行バイナリ読み取り部1へ出力する。
以上、本実施の形態では、実行バイナリプログラムの形式としてELF形式を代表例に挙げて説明してきたが、ELF形式の実行バイナリプログラムのみに実施の範囲を限定するものではなく、他の実行バイナリプログラムの形式においても、これまで説明した再配置情報とシンボル情報とを同様に備え、これまでの説明通り同様に実施することができる。
また、本実施の形態では、実行バイナリイメージ作成装置を中心に説明してきたが、情報処理システム、情報処理方法、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体に関しても、同様に実施することができる。
さらにまた、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
また、例えば、実行バイナリ読み取り部1、削除可能領域検出部2、実行バイナリ書き換え部3及び実行バイナリイメージ作成部4のうちの少なくとも1つが、1チップ化されたLSI(大規模集積回路)に含まれ得る。実行バイナリ読み取り部1、削除可能領域検出部2、実行バイナリ書き換え部3及び実行バイナリイメージ作成部4のうちの少なくとも1つをLSIに含めることによって、実行バイナリイメージ作成装置の製造工程を容易にすることができる。
なお、上述した具体的実施形態には以下の構成を有する発明が主に含まれている。
本発明の一局面に係る情報処理システムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
本発明の他の局面に係る情報処理方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
したがって、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリ読み取り部は、シンボルのアドレス解決を実施済みの前記実行バイナリプログラムを読み取ることが好ましい。
この構成によれば、シンボルのアドレス解決を実施済みの実行バイナリプログラムが読み取られるので、シンボルに関するシンボル情報及びシンボルのアドレス解決に使用される再配置情報を削除することができる。
また、上記の情報処理システムにおいて、前記特定のデータは、前記実行バイナリプログラム内の他のデータよりも圧縮率の高いデータであり、前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムを圧縮することが好ましい。
この構成によれば、実行バイナリプログラムを実行バイナリイメージに変換する際に、削除可能領域が特定のデータに書き換えられた実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量を削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域は、前記セクション内の所定の領域であり、前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラムのセクション単位で集約することが好ましい。
この構成によれば、実行バイナリプログラムは、セクション単位で分割され、削除可能領域は、セクション内の所定の領域であり、特定のデータに書き換えた領域が実行バイナリプログラムのセクション単位で集約され、実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける集約された特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量をさらに削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域は、前記セクションであり、前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラム全体で集約することが好ましい。
この構成によれば、実行バイナリプログラムは、セクション単位で分割され、削除可能領域は、セクションであり、特定のデータに書き換えた領域が実行バイナリプログラム全体で集約され、実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける集約された特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量をさらに削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって特定のデータに書き換えられた領域を削除するとともに、前記実行バイナリプログラム内で共用する前記特定のデータを格納した共用領域を作成し、削除された前記領域の前記実行バイナリプログラム内における位置と前記共用領域とを関連付けて管理する管理情報を作成することが好ましい。
この構成によれば、実行バイナリプログラムを実行バイナリイメージに変換する際に、特定のデータに書き換えられた領域が削除されるとともに、実行バイナリプログラム内で共用する特定のデータを格納した共用領域が作成され、削除された領域の実行バイナリプログラム内における位置と共用領域とを関連付けて管理する管理情報が作成される。したがって、特定のデータに書き換えられた領域が削除され、特定のデータが共用領域にのみ格納されるので、実行バイナリイメージが含む特定のデータのデータ量を削減することができ、実行バイナリイメージ全体のデータ量を削減することができる。
また、上記の情報処理システムにおいて、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開する際に、前記管理情報を参照し、削除された前記領域の前記実行バイナリプログラム内における位置を認識し、認識した位置に対応する前記仮想的なアドレス空間に、前記共有領域に格納されている特定のデータを割り当てることが好ましい。
この構成によれば、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開される際に、管理情報が参照され、削除された領域の実行バイナリプログラム内における位置が認識され、認識された位置に対応する仮想的なアドレス空間に、共有領域に格納されている特定のデータが割り当てられる。したがって、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、仮想的なアドレス空間に実行バイナリイメージを配置することができる。
また、上記の情報処理システムにおいて、前記実行バイナリ読み取り部は、前記実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報を前記実行バイナリプログラムから読み取り、前記削除可能領域検出部は、前記実行バイナリ読み取り部によって読み取られた前記アドレス解決情報がアドレス解決済みであるか否かを判定し、アドレス解決済みでないと判定された場合、前記実行バイナリプログラムの中から削除可能領域を検出しないことが好ましい。
この構成によれば、実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報が実行バイナリプログラムから読み取られ、読み取られたアドレス解決情報がアドレス解決済みであるか否かが判定され、アドレス解決済みでないと判定された場合、実行バイナリプログラムの中から削除可能領域が検出されない。したがって、アドレス解決済みであると判定された場合にのみ、削除可能領域を検出することができ、シンボル情報や再配置情報を削除可能領域として検出することができる。
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報を削除の対象外とすることが好ましい。
この構成によれば、実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報が削除の対象外とされるので、他のセクションから参照される情報は削除されずに残り、参照先のデータが存在しないという不具合を防止することができる。
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、複数の実行バイナリプログラムを含み、前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報を削除の対象外とすることが好ましい。
この構成によれば、実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報が削除の対象外とされるので、他の実行バイナリプログラムから参照される情報は削除されずに残り、参照先のデータが存在しないという不具合を防止することができる。
また、上記の情報処理システムにおいて、前記削除可能領域検出部は、前記実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることを検出し、文字列を共用しているシンボル全てが削除可能である場合にのみ、前記複数のシンボル及び前記文字列に対応する領域を削除可能領域として検出することが好ましい。
この構成によれば、実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることが検出され、文字列を共用しているシンボル全てが削除可能である場合にのみ、複数のシンボル及び文字列に対応する領域が削除可能領域として検出される。複数のシンボルが実行バイナリプログラム内の文字列を共用している場合、一のシンボルが削除可能と判定されても、他のシンボルが削除可能と判定されていなければ、実行バイナリプログラム内のシンボルの文字列及びシンボル情報は削除されない。したがって、一のシンボルが削除可能と判定されて文字列が削除されてしまい、文字列を共用している他のシンボルが文字列を指定することができないという不具合を防止することができる。
本発明の他の局面に係る実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備える。
本発明の他の局面に係る実行バイナリイメージ作成方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含む。
本発明の他の局面に係る実行バイナリイメージ作成プログラムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる。
本発明の他の局面に係る実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる実行バイナリイメージ作成プログラムを記録している。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
したがって、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
本発明の他の局面に係る実行バイナリイメージ実行装置は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
本発明の他の局面に係る実行バイナリイメージ実行方法は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
本発明の他の局面に係る実行バイナリイメージ実行プログラムは、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる。
本発明の他の局面に係る実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる実行バイナリイメージ実行プログラムを記録している。
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶される。そして、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。したがって、データ量が削減された実行バイナリイメージが記憶されるので、実行バイナリイメージを記憶するために必要な記憶容量を削減することができる。
本発明に係る情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行されるプログラムのデータサイズを削減することができ、コンピュータを搭載する種々の機器において、メモリサイズを抑えることができるので産業上有用である。
本実施の形態における実行バイナリイメージ作成装置の構成を示すブロック図である。
実行バイナリプログラムの内部構成の一例を示す図である。
実行バイナリプログラムの代表的なセクションについて説明するための図である。
実行バイナリ読み取り部が管理する実行バイナリプログラムの情報の内部管理構造の一例を示す図である。
シンボルのアドレス解決の処理の流れを説明するための模式図である。
アドレス解決済みである実行バイナリプログラムの関数呼び出しについて説明するための模式図である。
“.rel”系セクションと“.dynsym”セクションと“.dynstr”セクションとの関係を示す図である。
シンボル情報の内部管理構造の一例を示す図である。
実行バイナリプログラムの複数のシンボルが文字列を共用する場合の動作を説明するための模式図である。
シンボル情報の内部管理構造を作成する処理手順の一例を示す第1のフローチャートである。
シンボル情報の内部管理構造を作成する処理手順の一例を示す第2のフローチャートである。
実行バイナリ書き換え部が特定データに書き換える領域を集約しない場合の動作を説明するための模式図である。
実行バイナリ書き換え部が特定データに書き換える領域を集約する場合の動作を説明するための模式図である。
実行バイナリ書き換え部が特定データに書き換える領域を実行バイナリプログラム全体で集約する場合の動作を説明するための模式図である。
(A)は、2つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの一例を示す図であり、(B)は、共用ページを利用した実行バイナリイメージの一例を示す図である。
共用ページを利用した実行バイナリイメージと、実行バイナリプログラムが実行される際のアドレス空間との関係を説明するための模式図である。
本実施の形態における情報処理システムの構成を示す図である。
本実施の形態における情報処理システムの別の構成を示す図である。