(57)【要約】  実行バイナリイメージのデータ量を削減する。  実行バイナリ読み取り部１は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取り、削除可能領域検出部２は、実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に実行バイナリプログラムの中で削除可能となる領域を検出し、実行バイナリ書き換え部３は、実行バイナリプログラムの削除可能領域を特定のデータに書き換え、実行バイナリイメージ作成部４は、実行バイナリプログラムに含まれる特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムを変換する。
2007026484.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、
前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、
前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、
前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、
前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、
前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備えることを特徴とする情報処理システム。
【請求項２】
前記実行バイナリ読み取り部は、シンボルのアドレス解決を実施済みの前記実行バイナリプログラムを読み取ることを特徴とする請求項１記載の情報処理システム。
【請求項３】
前記特定のデータは、前記実行バイナリプログラム内の他のデータよりも圧縮率の高いデータであり、
前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムを圧縮することを特徴とする請求項１又は２記載の情報処理システム。
【請求項４】
前記実行バイナリプログラムは、セクション単位で分割され、
前記削除可能領域は、前記セクション内の所定の領域であり、
前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラムのセクション単位で集約することを特徴とする請求項３記載の情報処理システム。
【請求項５】
前記実行バイナリプログラムは、セクション単位で分割され、
前記削除可能領域は、前記セクションであり、
前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラム全体で集約することを特徴とする請求項３記載の情報処理システム。
【請求項６】
前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって特定のデータに書き換えられた領域を削除するとともに、前記実行バイナリプログラム内で共用する前記特定のデータを格納した共用領域を作成し、削除された前記領域の前記実行バイナリプログラム内における位置と前記共用領域とを関連付けて管理する管理情報を作成することを特徴とする請求項１又は２記載の情報処理システム。
【請求項７】
前記実行部は、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開する際に、前記管理情報を参照し、削除された前記領域の前記実行バイナリプログラム内における位置を認識し、認識した位置に対応する前記仮想的なアドレス空間に、前記共有領域に格納されている特定のデータを割り当てることを特徴とする請求項６記載の情報処理システム。
【請求項８】
前記実行バイナリ読み取り部は、前記実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報を前記実行バイナリプログラムから読み取り、
前記削除可能領域検出部は、前記実行バイナリ読み取り部によって読み取られた前記アドレス解決情報がアドレス解決済みであるか否かを判定し、アドレス解決済みでないと判定された場合、前記実行バイナリプログラムの中から削除可能領域を検出しないことを特徴とする請求項１〜７のいずれかに記載の情報処理システム。
【請求項９】
前記実行バイナリプログラムは、セクション単位で分割され、
前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報を削除の対象外とすることを特徴とする請求項１〜８のいずれかに記載の情報処理システム。
【請求項１０】
前記実行バイナリプログラムは、複数の実行バイナリプログラムを含み、
前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報を削除の対象外とすることを特徴とする請求項１〜９のいずれかに記載の情報処理システム。
【請求項１１】
前記削除可能領域検出部は、前記実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることを検出し、文字列を共用しているシンボル全てが削除可能である場合にのみ、前記複数のシンボル及び前記文字列に対応する領域を削除可能領域として検出することを特徴とする請求項１〜１０のいずれかに記載の情報処理システム。
【請求項１２】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、
前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、
前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、
前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、
前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、
前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含むことを特徴とする情報処理方法。
【請求項１３】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、
前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、
前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、
前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備えることを特徴とする実行バイナリイメージ作成装置。
【請求項１４】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、
前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、
前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、
前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含むことを特徴とする実行バイナリイメージ作成方法。
【請求項１５】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、
前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、
前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、
前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させることを特徴とする実行バイナリイメージ作成プログラム。
【請求項１６】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、
前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、
前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、
前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させることを特徴とする実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１７】
コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、
前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備えることを特徴とする実行バイナリイメージ実行装置。
【請求項１８】
コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、
前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含むことを特徴とする実行バイナリイメージ実行方法。
【請求項１９】
コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、
前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させることを特徴とする実行バイナリイメージ実行プログラム。
【請求項２０】
コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、
前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させることを特徴とする実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ上で実行される種々の実行バイナリイメージを作成する情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体に関するものである。
【背景技術】
【０００２】
Ｌｉｎｕｘ（登録商標）やＷｉｎｄｏｗｓ（登録商標）などのようなマルチタスク型のＯＳ（オペレーティングシステム）が搭載されている機器やコンピュータでは、多くの場合、動的ローディングシステムを採用している。これは、実行バイナリプログラムの実行時に初めて、そのプログラム本体や使用する共有ライブラリのアドレスを決定するシステムであり、再配置処理、すなわち使用するシンボルのアドレス解決を行う必要がある。そのため、実行バイナリプログラムの情報の中に、再配置情報やシンボル情報が含まれる。プログラムを実行すると、動的ローダがこれらの再配置情報やシンボル情報を使用して、関数や変数のアドレスを確定するので、これらの情報は動的ローディングシステムの実行バイナリプログラムでは必須であった。したがって、実行バイナリプログラムの実行コードであるテキスト情報やデータ情報などとともに、それらの再配置情報やシンボル情報を、実行バイナリイメージの中に含める必要があった。【０００３】
上記背景のもとで、ＲＯＭ（リードオンリメモリ）のサイズ削減のための従来技術として、組み込んだローダを用いて一度プログラムを実行した上で、共用ライブラリのアドレス解決に必要な構造を、ＲＯＭとは別の記憶装置に保存し、かつ実行バイナリプログラムからその構造を削除した上で、二度目に実行する際には、記憶装置に保存されたアドレス解決に必要な情報を使用して、ポインタを再配置してアドレス解決を行う技術が開示されている（例えば、特許文献１参照）。【０００４】
しかしながら、前記従来の技術では、共用ライブラリのアドレス解決に必要な構造を、外部あるいは別の記憶装置に持つという点で、ＲＯＭに載せる実行バイナリプログラムのデータサイズを減らしてはいるが、別途構造データを保持する記憶容量が必要になる。そのため、結局余分な記憶領域を使用するという問題が残る。【０００５】
また、動的ローディングシステム上で動作させるためには、実行バイナリプログラムが持つ再配置情報やシンボル情報のうち、どのような条件下でどの箇所を本当に削除できるのか明らかではないという課題があった。【０００６】
さらに、上記問題とは別に、実行バイナリプログラムの情報を一部編集してしまったり削除してしまったりすることによって、実行バイナリプログラムの内部構成が変化して、実行コード本体であるテキスト情報やデータ情報の配置アドレスが変化する可能性がある。その場合、全ての実行バイナリプログラムの中で、元々変化が生じた実行バイナリプログラムを利用するためにその位置を指していた箇所を検出し、変化した分だけアドレスを補正する必要が生じる。この補正がないと実行バイナリプログラムはプログラムとして動作しない。しかしながら、実行バイナリプログラムが、変化したアドレス位置を検出することは非常に困難であり、単純に実行バイナリプログラムの持つ再配置情報やシンボル情報を削除できないという課題があった。
【特許文献１】特開平１０−２２８３８１号公報
【発明の開示】
【０００７】
本発明は、上記の問題を解決するためになされたもので、実行バイナリイメージのデータ量を削減することができる情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とするものである。
【０００８】
本発明の一局面に係る情報処理システムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
【０００９】
本発明の他の局面に係る情報処理方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
【００１０】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
【００１１】
本発明の他の局面に係る実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備える。
【００１２】
本発明の他の局面に係る実行バイナリイメージ作成方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含む。
【００１３】
本発明の他の局面に係る実行バイナリイメージ作成プログラムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる。
【００１４】
本発明の他の局面に係る実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる実行バイナリイメージ作成プログラムを記録している。
【００１５】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
【００１６】
本発明の他の局面に係る実行バイナリイメージ実行装置は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
【００１７】
本発明の他の局面に係る実行バイナリイメージ実行方法は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
【００１８】
本発明の他の局面に係る実行バイナリイメージ実行プログラムは、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる。
【００１９】
本発明の他の局面に係る実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる実行バイナリイメージ実行プログラムを記録している。
【００２０】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶される。そして、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
【００２１】
本発明によれば、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
【００２２】
本発明の目的、特徴及び利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【図面の簡単な説明】
【００２３】
【図１】本実施の形態における実行バイナリイメージ作成装置の構成を示すブロック図である。
【図２】実行バイナリプログラムの内部構成の一例を示す図である。
【図３】実行バイナリプログラムの代表的なセクションについて説明するための図である。
【図４】実行バイナリ読み取り部が管理する実行バイナリプログラムの情報の内部管理構造の一例を示す図である。
【図５】シンボルのアドレス解決の処理の流れを説明するための模式図である。
【図６】アドレス解決済みである実行バイナリプログラムの関数呼び出しについて説明するための模式図である。
【図７】“．ｒｅｌ”系セクションと“．ｄｙｎｓｙｍ”セクションと“．ｄｙｎｓｔｒ”セクションとの関係を示す図である。
【図８】シンボル情報の内部管理構造の一例を示す図である。
【図９】実行バイナリプログラムの複数のシンボルが文字列を共用する場合の動作を説明するための模式図である。
【図１０】シンボル情報の内部管理構造を作成する処理手順の一例を示す第１のフローチャートである。
【図１１】シンボル情報の内部管理構造を作成する処理手順の一例を示す第２のフローチャートである。
【図１２】実行バイナリ書き換え部が特定データに書き換える領域を集約しない場合の動作を説明するための模式図である。
【図１３】実行バイナリ書き換え部が特定データに書き換える領域を集約する場合の動作を説明するための模式図である。
【図１４】実行バイナリ書き換え部が特定データに書き換える領域を実行バイナリプログラム全体で集約する場合の動作を説明するための模式図である。
【図１５】（Ａ）は、２つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの一例を示す図であり、（Ｂ）は、共用ページを利用した実行バイナリイメージの一例を示す図である。
【図１６】共用ページを利用した実行バイナリイメージと、実行バイナリプログラムが実行される際のアドレス空間との関係を説明するための模式図である。
【図１７】本実施の形態における情報処理システムの構成を示す図である。
【図１８】本実施の形態における情報処理システムの別の構成を示す図である。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の実施の形態について、図面を参照しながら説明する。【００２５】
図１は、本実施の形態における実行バイナリイメージ作成装置の構成を示すブロック図である。本実施の形態における実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムを入力とし、実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部１と、実行バイナリ読み取り部１で読み取られた実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部２と、削除可能領域検出部２において検出された実行バイナリプログラムの削除可能領域を、特定のデータに書き換えて実行バイナリプログラムを再構成する実行バイナリ書き換え部３と、実行バイナリ書き換え部３から受け取った少なくとも一つの実行バイナリプログラムをコンピュータ上で認識し実行できる形式に変換する実行バイナリイメージ作成部４とを備えて構成される。【００２６】
なお、本明細書における実行バイナリプログラムは、バイナリ形式の実行コード及び実行データを含む。また、本実施の形態において、実行バイナリ読み取り部１が実行バイナリ読み取り部の一例に相当し、削除可能領域検出部２が削除可能領域検出部の一例に相当し、実行バイナリ書き換え部３が実行バイナリ書き換え部の一例に相当し、実行バイナリイメージ作成部４が実行バイナリイメージ変換部の一例に相当する。さらに、本実施の形態において、実行バイナリイメージ作成プログラムが例えばＲＯＭ（リードオンリメモリ）に記憶されており、実行バイナリイメージ作成プログラムが実行バイナリ読み取り部１、削除可能領域検出部２、実行バイナリ書き換え部３及び実行バイナリイメージ作成部４としてＣＰＵ（中央演算処理装置）を機能させる。【００２７】
以上のように構成された実行バイナリイメージ作成装置について、その構成の詳細と動作とを以下に述べる。まず、実行バイナリ読み取り部１は、コンピュータ上で動作する実行バイナリプログラム、すなわち実行形式のファイルを入力とする。まず、この実行バイナリプログラムの形式に関して以下に説明する。【００２８】
現在、種々の実行形式が存在する。例えば、ＥＬＦ（Ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  Ｌｉｎｋｉｎｇ  Ｆｏｒｍａｔ）形式、ａ．ｏｕｔ形式、ＣＯＦＦ（Ｃｏｍｍｏｎ  Ｏｂｊｅｃｔ  Ｆｉｌｅ  Ｆｏｒｍａｔ）形式、ＥＣＯＦＦ（Ｅｘｔｅｎｄｅｄ  ＣＯＦＦ）形式、及びＰＥ（Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ）形式などが代表的な実行形式である。これから本実施の形態の説明を容易にするために、Ｕｎｉｘ（登録商標）やＬｉｎｕｘ（登録商標）で使用され、実行形式として代表的なＥＬＦ形式の実行バイナリプログラムを例に挙げて説明を行うが、本実施の形態はＥＬＦ形式の実行バイナリプログラムに限定されるものではなく、他の実行形式に対しても同様に実施することができる。【００２９】
実行バイナリプログラムの内部構成を、ＥＬＦ形式の構成を例にして図２を用いて説明する。図２は、実行バイナリプログラムの内部構成の一例を示す図である。実行バイナリプログラムの先頭には、実行バイナリプログラム全体の情報を管理するＥＬＦヘッダ１０１が存在する。このＥＬＦヘッダには、アプリケーションプログラムか共有ライブラリかを区別する情報や、後続するプログラムヘッダ１０２やセクションヘッダ１０４へのオフセット情報や、その他実行バイナリプログラム全体に関わる情報が格納されている。【００３０】
後続するプログラムヘッダ１０２には、複数のセグメントと呼ばれる領域を管理する情報が格納されている。この各セグメントには、１つあるいは複数のセクションが属する構成になっている。そして、実行バイナリプログラムの実データとなるセクション１０３が、役割ごとにセクション１からセクションＮまで複数個存在し、それらの各セクションを管理するためのセクションヘッダ１０４が存在する。【００３１】
ここで、実行バイナリプログラムの実データとなる代表的な各セクションについて説明する。図３は、実行バイナリプログラムの実データとなる代表的な各セクションについて説明するための図である。図３のセクション名１１１は、各セクションの名称を表している。セクションの概要１１２は、各セクション名１１１に対応する各セクションの働きを説明している。動的ローディングシステムは、プログラムの実行時に初めて、使用する実行バイナリプログラムである共有ライブラリのアドレスを決定するシステムである。そのため、動的ローディングシステムでは、再配置処理、すなわち使用するシンボルのアドレス解決を行う必要がある。この再配置処理や、シンボルのアドレス解決のために、図３に示す複数のセクションが利用される。【００３２】
例えば、その中でも代表的なセクションを挙げて説明すると、“．ｄｙｎｓｔｒ”セクションは、実行バイナリプログラム中の動的リンクに使用するシンボルの文字列そのものを保持する。“．ｄｙｎｓｙｍ”セクションは、実行バイナリプログラム中の動的リンクに関するシンボル情報を、各シンボルに対して管理していて、“．ｄｙｎｓｔｒ”セクションに存在する文字列を指し、その他のシンボル情報（値やサイズ情報）なども保持している。“．ｒｅｌ”の接頭語から成り立つ一連のセクションは、再配置情報を管理する再配置セクションであり、実行バイナリプログラム中の再配置すべき領域を指し、また再配置の対象となるシンボルを特定するために“．ｄｙｎｓｙｍ”セクションの所定のエントリを指している。また、その他、シンボルを検索するための“．ｈａｓｈ”セクションや、各シンボルのバージョンタイプを示す“．ｇｎｕ．ｖｅｒｓｉｏｎ”系のセクションなどがシンボル情報に関連するセクションである。【００３３】
なお、ＥＬＦ形式の実行形式を例に挙げて説明したが、他の実行形式でも同様の構成を採用しており、同様の働きを持つセクションから構成されている。【００３４】
実行バイナリ読み取り部１は、これまでに述べた構成を持つ実行バイナリプログラムが入力されると、実行バイナリプログラムの情報を実行形式に応じて読み取り、その構造を内部で管理する。これにより、実行バイナリプログラムを解析しやすく、あるいは再構成しやすくなる。図４は、実行バイナリ読み取り部１が管理する実行バイナリプログラムの情報の内部管理構造の一例を示す図である。【００３５】
図４に示す通り、実行バイナリ読み取り部１は、実行バイナリプログラムの中に一つしかないＥＬＦヘッダやプログラムヘッダの情報を各々読み取って、実行バイナリプログラム全体に関わる情報を管理する。また、複数存在するセクションに対しては、実行バイナリ読み取り部１は、セクションごとに生成するセクション管理構造１２１を利用して各セクションを管理する。このセクション管理構造１２１は、独自セクション管理情報１２２、セクションヘッダ１２３及びセクションデータ管理部１２４で構成される。セクションデータ管理部１２４は、セクションの実データが存在するセクションデータ部１２５を管理する。独自セクション管理情報１２２は、セクションデータ管理部１２４及びセクションデータ部１２５とセクションヘッダ１２３とを含めてセクションに関わる情報を管理する。【００３６】
なお、ここで挙げた実行バイナリプログラムの内部管理構造は、あくまで一例に過ぎず、実行バイナリプログラム全体に関わる情報や、各セクションを管理できる構造であれば他の構造でもかまわない。【００３７】
実行バイナリ読み取り部１は、実行バイナリプログラムが入力されると実行バイナリプログラムの内部の構成情報を読み取り、図４に例示するように実行バイナリプログラムの内部情報の内部管理構造を構築して削除可能領域検出部２に渡す。この内部管理構造によって、削除可能領域検出部２は、各セクションの情報を取得し解析することが可能になる。【００３８】
削除可能領域検出部２は、実行バイナリ読み取り部１から実行バイナリプログラムの内部の構成情報（内部管理構造）を受け取り、シンボルのアドレス解決に利用される再配置情報やシンボル情報を解析し、それらのうち削除可能な領域を検出して、実行バイナリプログラムの内部の構成情報とともに削除可能と検出した情報を、実行バイナリ書き換え部３に渡す。【００３９】
通常、一般的な動的ローディングシステムにおいて、実行バイナリプログラムの実行時に初めて、そのプログラム本体や使用する共有ライブラリのアドレスを決定し、シンボルのアドレス解決を行う。シンボルのアドレス解決を行う際に、再配置情報やシンボル情報を利用するため、通常それらの情報を削除すると、プログラムとして動作しなくなる恐れがある。【００４０】
図５を用いて、シンボルのアドレス解決の処理の流れを説明する。図５は、シンボルのアドレス解決の処理の流れを説明するための模式図である。あるプログラムＡが共有ライブラリＡに存在するｌｉｂａ＿ｆｕｎｃ関数１３４を呼ぶ場合、プログラムＡが実行されるまで共有ライブラリＡのアドレス空間上の位置は不定である。プログラムＡが実行されて、共有ライブラリＡの位置が決定されると、初めてｌｉｂａ＿ｆｕｎｃ関数１３４の位置が決定される。そこで、プログラムＡの中でｌｉｂａ＿ｆｕｎｃ関数を呼んでいる領域１３１が、プログラムＡの再配置情報やシンボル情報１３２により特定され、さらに共有ライブラリＡの中にあるｌｉｂａ＿ｆｕｎｃ関数の位置が、共有ライブラリＡの再配置情報やシンボル情報１３３によって決定される。そして、プログラムＡから正しくｌｉｂａ＿ｆｕｎｃ関数にジャンプできるように設定される。【００４１】
上記のようにシンボルのアドレスが未解決の実行バイナリプログラムでは、再配置情報やシンボル情報をプログラムの実行時に使用する可能性がある。しかし、本実施の形態の実行バイナリ読み取り部１では、すでにシンボルのアドレス解決を実施済みの実行バイナリプログラムを入力とすることができる。【００４２】
また、実行バイナリ読み取り部１は、実行バイナリプログラムが入力された時に、その実行バイナリプログラムがすでにアドレス解決済みであるか否かを確認し、アドレス解決済みであるか否かを表すアドレス解決情報を削除可能領域検出部２に渡す。削除可能領域検出部２は、実行バイナリ読み取り部１によって読み取られたアドレス解決情報がアドレス解決済みであるか否かを判定し、実行バイナリプログラムがアドレス解決済みでないと判定された場合、その実行バイナリプログラムの再配置情報やシンボル情報を削除可能領域として検出しない。【００４３】
そのような実行バイナリプログラムの関数呼び出しの例について説明する。図６は、アドレス解決済みである実行バイナリプログラムの関数呼び出しについて説明するための模式図である。図６のプログラムＢでは、元々共有ライブラリＢのｌｉｂｂ＿ｆｕｎｃ関数１４４を呼ぶ領域１４１がある。しかしながら、プログラムＢや共有ライブラリＢを実行する前に、あらかじめ共有ライブラリＢのアドレス空間上の位置が決定している。そのため、プログラムＢの関数呼び出し領域１４１には、実行する前にｌｉｂｂ＿ｆｕｎｃ関数にジャンプするためのアドレス（図６では“０ｘ？？？？？？？？”）が直接書かれている。したがって、この場合、図５においてアドレス解決のために利用していたプログラムＢの再配置情報やシンボル情報１４２、及び共有ライブラリＢの再配置情報やシンボル情報１４３を使用することはない。【００４４】
したがって、実行バイナリ読み取り部１にシンボルのアドレス解決を実施済みの実行バイナリプログラムが入力され、削除可能領域検出部２がシンボルのアドレス解決に必要な再配置情報やシンボル情報の一部を削除可能な領域として検出して、実行バイナリ書き換え部３に渡しても、実行バイナリ書き換え部３は正常に動作する実行バイナリプログラムを出力する。【００４５】
なお、本実施の形態では、関数呼び出しに関して例を挙げて説明したが、変数参照のためのアドレス解決やその他のアドレス解決なども関数呼出しと同様の仕組みによって実施される。【００４６】
シンボルのアドレス解決を実施済みの実行バイナリプログラムは、元々動的ローディングシステム用に作成された実行バイナリプログラムを利用して作成することが可能である。シンボルのアドレス解決が実施済みの実行バイナリプログラムを作るための方法の一例を以下に示す。【００４７】
まず、全ての共有ライブラリのアドレス空間を重複しないようにあらかじめ定める必要がある。なぜなら、共有ライブラリは複数のアプリケーションプログラムや別の共有ライブラリから参照される可能性があり、共有ライブラリのアドレス空間上の位置はシステム全体で一意に定める必要があるためである。もし、複数の共有ライブラリのアドレス空間が重複すると、それらを利用するアプリケーションプログラムが特定のアドレス空間を指した時に、いずれの共有ライブラリを指しているのか判別できなくなり、共有ライブラリのアドレスの再配置が必要になる。【００４８】
もちろん、全てのアプリケーションプログラムが特定のアドレス空間を指した時に、共有ライブラリが一意に特定できるのであれば、一部の共有ライブラリのアドレス空間が重複していてもかまわない。【００４９】
また、全ての共有ライブラリのアドレス空間を重複しないようにするだけではなく、全てのアプリケーションプログラムのアドレス空間を重複しないように設定しても良いし、逆にアプリケーションプログラムのアドレス空間は重複するように設定してもかまわない。【００５０】
全ての共有ライブラリのアドレス空間が設定されると、共有ライブラリの持つシンボルなどのアドレスが全て決まるので、全ての実行バイナリプログラム（アプリケーションプログラムと共有ライブラリ）のシンボルのアドレス解決を事前に行うことができる。【００５１】
実施方法の一例を挙げると、アプリケーションプログラムをアドレス空間上にロードし、さらにそのアプリケーションプログラムが使用する共有ライブラリもアドレス空間上にロードする。そして、実際にアプリケーションプログラムの持つ再配置情報やシンボル情報、及びロードしている共有ライブラリの再配置情報やシンボル情報を利用して、事前に設定したアドレス通りにシンボルのアドレス解決を行う。アドレス解決を行った結果を実行バイナリプログラムの情報に書き戻せばよい。これを全てのアプリケーションプログラムに対して実施し、アドレス解決を行った結果を全ての実行バイナリプログラムの情報に書き戻せばよい。上記方法により、図６に示すようなシンボルのアドレス解決を実施済みの実行バイナリプログラムを得ることができる。【００５２】
削除可能領域検出部２は、実行バイナリ読み取り部１から実行バイナリプログラムの内部構成情報を取得し、まず再配置情報やシンボル情報を解析し、削除可能かどうかの判定条件に照らし合わせて削除可能領域を検出する。【００５３】
削除可能かどうかの判定は、基本的にシンボルのアドレス解決に使用される再配置情報やシンボル情報であるかどうかに基づいて行われる。再配置情報であり、“．ｒｅｌ”の接頭語から始まるセクションである“．ｒｅｌ”系セクションと、シンボル情報を管理する“．ｄｙｎｓｙｍ”セクションと、シンボル名となる文字列を持つ“．ｄｙｎｓｔｒ”セクションとの関係の例を図７に示して、削除可能かどうかの判定条件に関して説明する。図７は、“．ｒｅｌ”系セクションと“．ｄｙｎｓｙｍ”セクションと“．ｄｙｎｓｔｒ”セクションとの関係を示す図である。【００５４】
図７の例では、“．ｒｅｌ”系セクションに３つのエントリ１５１が存在し、それぞれ別々の“．ｄｙｎｓｙｍ”セクションのエントリを指している。また、“．ｄｙｎｓｙｍ”セクションのエントリは、シンボルの文字列を特定するために“．ｄｙｎｓｔｒ”セクションの文字列を指している。【００５５】
図７の例では、“．ｒｅｌ”系セクションのエントリ１５２は、“．ｄｙｎｓｙｍ”セクションのエントリ１５３を指し、“．ｄｙｎｓｙｍ”セクションのエントリ１５３は、“．ｄｙｎｓｔｒ”セクションの文字列“ＸＹＺ”を指している。【００５６】
削除可能領域検出部２は、シンボルのアドレス解決に使用される再配置情報である“．ｒｅｌ”系セクションの全てのエントリを削除可能領域として検出する。また、その“．ｒｅｌ”系セクションからたどることが可能な“．ｄｙｎｓｙｍ”セクションの全てのエントリも削除可能領域として検出する。さらに、削除可能と検出された“．ｄｙｎｓｙｍ”セクションが指している“．ｄｙｎｓｔｒ”セクションの文字列を削除可能領域として検出する。【００５７】
図７の例では、３つのエントリからなる“．ｒｅｌ”系セクション１５１と、そこから指されている“．ｄｙｎｓｙｍ”セクションの３つのエントリ１５３，１５４，１５５と、そこから指されている“．ｄｙｎｓｔｒ”セクションの３つの文字列“ＡＢＣ”，“ＸＹＺ”，“ＤＥＦ”とが削除可能領域として検出される。【００５８】
削除可能領域検出部２は、上記の通り“．ｒｅｌ”系セクションからたどって“．ｄｙｎｓｔｒ”セクションの文字列を参照し、その文字列がアルファベット以外から始まる文字列であった場合に、その文字列とその文字列を指していたセクションを削除可能領域と見なさないという判定条件を備えることも可能である。これは、アンダースコア“＿”のようにアルファベット以外から始まる文字列は内部生成用のものであり、シンボルのアドレス解決と関係ない可能性があるからである。文字列の削除可能領域の検出に関するこの削除対象外とする基準は、今後同様に文字列の削除を考える時に実施することが可能である。【００５９】
また、削除可能領域検出部２は、さらに上記再配置情報である“．ｒｅｌ”系セクションからたどって得られたシンボル情報だけではなく、“．ｒｅｌ”系セクションからは指されず“．ｄｙｎｓｙｍ”セクションから直接指される“．ｄｙｎｓｔｒ”セクションの文字列と、それを指している“．ｄｙｎｓｙｍ”セクションのエントリとを削除可能領域として検出する判定条件を備えることも可能である。【００６０】
この場合、“．ｄｙｎｓｙｍ”セクションのエントリには、実行バイナリプログラム自身が持つ関数を、外部の別の実行バイナリプログラムが使用できるようにエクスポートしているシンボルが登録されている。このシンボルは、別の実行バイナリプログラムからシンボルのアドレス解決の際に検索される対象となる。したがって、アドレス解決のためのシンボル情報として上記の通り“．ｄｙｎｓｙｍ”セクションから直接指される文字列と、その“．ｄｙｎｓｙｍ”セクションを削除可能と見なすことができる。【００６１】
ただし、“．ｄｙｎｓｙｍ”セクションには、実行バイナリプログラムに固有でアドレス解決とは無関係のシンボル情報も存在する。したがって、“．ｄｙｎｓｙｍ”セクションから直接指される文字列と、その“．ｄｙｎｓｙｍ”セクションを削除可能領域とする判定条件を用いる際には、アドレス解決とは無関係のシンボル情報を削除対象外とすればよい。例えば、シンボルのタイプ属性が“ＮＯＴＹＰＥ”のものを削除対象外とする方法が考えられる。また、シンボルのタイプ属性がデータオブジェクトあるいはコードオブジェクトのシンボル情報のみを削除可能領域として検出してもよい。【００６２】
その他にも例えば、グローバルスコープのシンボルであること、あるいは関連セクションが“．ｔｅｘｔ”、“．ｒｏｄａｔａ”、“．ｄａｔａ”及び“．ｂｓｓ”のいずれかのセクションであることなどを削除可能であることの判定条件にしてもよい。【００６３】
また、削除可能領域検出部２は、上記に述べてきた通りシンボル情報が削除可能領域かどうかの判定を容易にするために、実行バイナリプログラムのシンボル情報を解析し管理することもできる。【００６４】
シンボル情報を削除するためには、１つのシンボルに対する情報を管理すると、シンボルの削除可能かどうかの判定やシンボル情報に対する操作を管理しやすくなる。また、このシンボル情報の内部管理構造がある場合、実行バイナリ書き換え部３は、実行バイナリプログラムを書き換えて容易に再構成することができる。【００６５】
図８は、シンボル情報の内部管理構造の一例を示す図である。図８に示すシンボル情報の内部管理構造は、あるシンボルに対するシンボル情報を管理するものであり、次のシンボル情報の内部管理構造へのポインタ１６６を持ち、各シンボル情報の内部管理構造をリンク構造でつないでたどることができる。【００６６】
図８のシンボル情報の内部管理構造には、シンボル削除可能かどうかの可否情報１６１がある。シンボル情報が削除可能かどうかの判定条件にしたがって、管理するシンボル情報が削除可能かどうかの可否情報１６１を更新し管理することができる。【００６７】
また、シンボル情報の内部管理構造には、何のシンボルに関して管理しているかを判別するために、シンボル文字列へのポインタ１６２がある。そして、シンボルを参照しているセクションに関する情報１６３及びそのセクションのセクション内における位置情報１６４を備える。これらの情報により、今管理しているシンボルがどのセクションから参照されているか、またセクションのどの位置から参照されているかを管理することができる。【００６８】
このシンボル情報の内部管理構造には、さらに、文字列を他のシンボルと共用していることを判断するための情報を備えることができる。これは、複数のシンボルが、実行バイナリプログラムの“．ｄｙｎｓｔｒ”セクションにある文字列を共用する可能性があるためである。図９は、実行バイナリプログラムの複数のシンボルが文字列を共用する場合の動作を説明するための模式図である。【００６９】
図９では、実行バイナリプログラムのシンボルの文字列そのものを保持する“．ｄｙｎｓｔｒ”セクションに、“ｕｎｓｅｔｅｎｖ”という文字列が存在する。そして、この実行バイナリプログラムには、“ｓｅｔｅｎｖ”というシンボル１７２及び“ｕｎｓｅｔｅｎｖ”というシンボル１７３が存在する。この場合、“ｓｅｔｅｎｖ”というシンボル１７２は、“ｕｎｓｅｔｅｎｖ”というシンボル１７３の末尾部分の文字列と一致する。このように、実行バイナリプログラムでシンボルの文字列を共用する場合がある。【００７０】
文字列を共用する場合、図９に示す通り“ｕｎｓｅｔｅｎｖ”というシンボル１７３は、通常通り実行バイナリプログラムのシンボルの文字列“ｕｎｓｅｔｅｎｖ”の先頭１７１を指すが、“ｓｅｔｅｎｖ”というシンボル１７２はシンボルの文字列“ｕｎｓｅｔｅｎｖ”のうちの“ｓｅｔｅｎｖ”の先頭１７４を指す。【００７１】
以上のように、複数のシンボルが実行バイナリプログラムにある文字列を共用する場合、一方のシンボルのみが削除可能と判定できても、他方のシンボルが削除可能と判定されていなければ、実行バイナリプログラムにあるシンボルの文字列及び関連するシンボル情報は削除できない。例えば、図９の例では、“ｕｎｓｅｔｅｎｖ”というシンボル１７３が削除可能と判定されても、実行バイナリプログラムのシンボルの文字列“ｕｎｓｅｔｅｎｖ”を削除してしまうと、文字列を共用しているシンボル“ｓｅｔｅｎｖ”の指すべき文字列がなくなるという問題が起こる。【００７２】
上記問題を解決するために、シンボル情報の内部管理構造は、文字列を他のシンボルと共用していることを判断するための共用情報１６５を持つ。例えば、その文字列を共用しているシンボルの数を記録しても良いし、文字列の先頭から指しているか途中から指しているかを管理してもよい。削除可能領域検出部２は、削除可能であるかどうかを判定する際に、シンボル情報の内部管理構造にあるこの文字列の共用情報１６５を参照し、文字列を共用している全てのシンボルに対して削除可能であると判定した時に、それらのシンボル情報を削除可能として検出する。その他にも、共用している文字列全体のうち一部の部分文字列に関して削除可能であると判定した時に、その部分の文字列とそれに関するシンボル情報とを削除可能領域として検出することも可能である。【００７３】
ここで、削除可能領域検出部２が、実行バイナリ読み取り部１から実行バイナリプログラムの内部の構成情報を受け取って、シンボル情報の内部管理構造を作成する処理について説明する。図１０及び図１１は、シンボル情報の内部管理構造を作成する処理手順の一例を示すフローチャートである。【００７４】
まず、削除可能領域検出部２は、実行バイナリ読み取り部１から実行バイナリプログラムの構成情報を取得する（ステップＳ１）。そして、削除可能領域検出部２は、“．ｄｙｎｓｔｒ”セクションを解析し文字列単位でシンボル情報の内部管理構造を作成する（ステップＳ２）。これにより、実行バイナリプログラムが保持する文字列一つ一つに対するシンボル情報の内部管理構造が作成される。【００７５】
そして、次に削除可能領域検出部２は、シンボル情報の内部管理構造によってシンボルを参照するセクション情報を管理するために、各セクションからアクセスするシンボル名との照合を行う。【００７６】
まず、削除可能領域検出部２は、“．ｄｙｎｓｙｍ”セクションを解析し、得られたシンボル名をシンボル情報の内部管理構造の中で検索する（ステップＳ３）。そして、削除可能領域検出部２は、“．ｄｙｎｓｙｍ”セクションからアクセスするシンボル名と完全一致する文字列がシンボル情報の内部管理構造の中にあるかどうかを判定する（ステップＳ４）。シンボル名と完全一致する文字列が存在する場合（ステップＳ４でＹＥＳ）、削除可能領域検出部２は、シンボル情報を削除できるようにするため、一致した文字列を管理するシンボル情報の内部管理構造に、“．ｄｙｎｓｙｍ”セクションからの参照があることを表す参照情報及び参照元の位置を表す位置情報を記録する（ステップＳ５）。【００７７】
一方、シンボル名と完全一致する文字列が存在せず部分一致する場合（ステップＳ４でＮＯ）、このシンボルは他のシンボルと文字列を共用していると見なすことができる。そこで、削除可能領域検出部２は、文字列に部分一致するシンボルのために新規に内部管理構造を作成する（ステップＳ６）。そして、削除可能領域検出部２は、部分一致したシンボルの双方の内部管理構造に“．ｄｙｎｓｙｍ”セクションからの参照情報及び参照位置とともに共用に関する情報を記録する（ステップＳ７）。【００７８】
なお、削除可能領域検出部２は、“．ｒｅｌ”系セクションに対しても、“．ｄｙｎｓｙｍ”セクションに対して行ったステップＳ４からステップＳ７の処理と同様の処理を行う。すなわち、削除可能領域検出部２は、まず“．ｒｅｌ”系セクションを解析し、得られたシンボル名をシンボル情報の内部管理構造の中で検索する（ステップＳ８）。【００７９】
そして、削除可能領域検出部２は、“．ｒｅｌ”系セクションから“．ｄｙｎｓｙｍ”セクション経由でアクセスするシンボル名と完全一致する文字列がシンボル情報の内部管理構造の中にあるかどうかを判定する（ステップＳ９）。シンボル名と完全一致する文字列が存在する場合（ステップＳ９でＹＥＳ）、削除可能領域検出部２は、シンボル情報を削除できるようにするため、一致した文字列を管理するシンボル情報の内部管理構造に、“．ｒｅｌ”系セクションからの参照があることを表す参照情報及び参照元の位置を表す位置情報を記録する（ステップＳ１０）。必要であれば、削除可能領域検出部２は、アクセスの際に経由した“．ｄｙｎｓｙｍ”セクションの情報も記録する。【００８０】
一方、シンボル名と完全一致する文字列が存在せず部分一致する場合（ステップＳ９でＮＯ）、このシンボルは他のシンボルと文字列を共用していると見なすことができる。そこで、削除可能領域検出部２は、文字列に部分一致するシンボルのために新規に内部管理構造を作成する（ステップＳ１１）。そして、削除可能領域検出部２は、部分一致したシンボルの双方の内部管理構造に“．ｒｅｌ”系セクションからの参照情報及び参照位置とともに共用に関する情報を記録する（ステップＳ１２）。必要であれば、削除可能領域検出部２は、アクセスの際に経由する“．ｄｙｎｓｙｍ”セクションに関する情報も記録する。【００８１】
最後に、削除可能領域検出部２は、削除可能かどうかの判定条件にしたがって削除可能かどうかの可否情報を、シンボル情報の内部管理構造に記録する（ステップＳ１３）。【００８２】
なお、削除可能かどうかの判定条件によっては、図１０に示す“．ｄｙｎｓｙｍ”セクションに関するステップＳ３からステップＳ７までの一連の処理、あるいは図１１に示す“．ｒｅｌ”系セクションに関するステップＳ８からステップＳ１２までの一連の処理のどちらか一方の処理のみでもかまわない。【００８３】
例えば、削除可能かどうかの判定条件が、“．ｒｅｌ”系セクションからたどれるシンボル情報であり、かつ共有しているシンボル全てが削除できる場合という条件であれば、図１０の処理のうち“．ｄｙｎｓｙｍ”セクションに関するステップＳ３からステップＳ７までの一連の処理を行わなくてよい。また、逆に他のセクションに関して、図１０の“．ｄｙｎｓｙｍ”セクションに関するステップＳ３からステップＳ７までの一連の処理と同様の処理を、図１１に示すステップＳ１３の処理の前に追加することも可能である。【００８４】
すなわち、プログラムの実行時にシンボルにアクセスする他のセクションに関して、同様の一連の処理を追加して、そのセクションからの参照情報をシンボル情報の内部管理構造に記録しておくことが有効となる。なぜなら、そのようなセクションは、シンボルのアドレス解決とは関係なくプログラムの実行時にシンボル情報にアクセスする。そのため、そのシンボル情報が例えば“．ｒｅｌ”系セクションから参照されているという理由のみで削除すると、プログラムの実行時にシンボルが存在しないため動作しなくなる恐れがある。具体的にそのようなセクションの例を挙げると、種々の動的リンク情報を管理している“．ｄｙｎａｍｉｃ”セクションや、シンボルのバージョンを管理する“．ｇｎｕ．ｖｅｒｓｉｏｎ”系セクションや、ライブラリ情報を保持する“．ｇｎｕ．ｌｉｂｌｉｓｔ”セクションなどがある。【００８５】
削除可能領域検出部２は、削除可能かどうかの判定条件として、上記のようなセクションからの参照があるシンボル情報を削除対象外とする条件を採用することができ、より精密なシンボル情報の削除を行うことができる。【００８６】
削除可能領域検出部２は、削除可能かどうかの判定条件として、さらに他の実行バイナリプログラムからの参照があるシンボル情報を削除対象外とすることもできる。例えば、事前にシンボル情報を使用する実行バイナリプログラムのリストがあり、実行バイナリ読み取り部１は、そのリストの実行バイナリプログラムを読み取る。削除可能領域検出部２は、その実行バイナリプログラムのシンボル情報を受け取って解析し、参照する他の実行バイナリプログラムのシンボル情報を検出して、削除対象外とする。【００８７】
削除可能領域検出部２は、以上に述べた種々の判定条件を用いることができ、設定された判定条件を満たしたシンボル情報の内部管理構造に、シンボル削除可能であることを記録し、そのシンボル情報の内部管理構造を実行バイナリ書き換え部３に渡す。【００８８】
なお、削除可能領域検出部２で実行バイナリプログラムのシンボル情報の解析を容易にするために上記のシンボル情報の内部管理構造を説明したが、再配置情報やシンボル情報をたどって解析できればよく、その他の方法を採用しても本発明の実施に問題はない。【００８９】
実行バイナリ書き換え部３は、これまでに解析した実行バイナリプログラムの情報と、削除可能領域として検出した情報とを削除可能領域検出部２から取得する。実行バイナリ書き換え部３は、削除可能領域の情報として、例えばこれまでに説明したシンボル情報の内部管理構造と、そこに記録されている削除可能かどうかの可否情報とを受け取る。【００９０】
実行バイナリ書き換え部３は、受け取った実行バイナリプログラムの情報と削除可能領域の情報とに基づいて、削除可能な再配置情報やシンボル情報を特定できる。例えば、実行バイナリ書き換え部３は、実行バイナリプログラムの各セクション及び各セクション内の削除可能領域であるシンボル情報の内部管理構造を１要素ずつ取得して、削除可能かどうかの可否情報を確認する。そのシンボル情報に対して削除可能である情報があれば、シンボル情報の内部管理構造に記録されている参照セクションの情報やシンボル文字列へのポインタをたどって、実行バイナリプログラムの中で削除すべき領域を特定できる。それをシンボル情報の内部管理構造の全ての要素に対して行えば、１つの実行バイナリプログラムに対する削除可能領域を全て特定できる。【００９１】
しかし、実行バイナリプログラムの中で削除可能領域の実データそのものを削除してしまうと、実行バイナリプログラムの内部構成が変化して、実行バイナリプログラムのコード本体であるテキスト情報やデータ情報の配置アドレスが変化する可能性がある。ある実行バイナリプログラムのテキスト情報やデータ情報は、別の複数の実行バイナリプログラムから参照されている可能性がある。したがって、全ての実行バイナリプログラムの中で、配置アドレスの変化が生じた実行バイナリプログラムを参照する領域を検出し、変化した分だけ参照するアドレスを補正する必要が生じる。この補正がないと実行バイナリプログラムはプログラムとして動作しない。しかし、実行バイナリプログラムのコードの中から、別の実行バイナリプログラムの特定のアドレスを参照しているかどうかを検出することは非常に困難であるという問題があった。【００９２】
そのような配置アドレスの変化が好ましくないセクションを例に挙げると、セクション属性が“ＰＲＯＧＢＩＴＳ”であるセクション、あるいはそのような情報がなければ、実行バイナリプログラムの実データを形成する“．ｐｌｔ”、“．ｔｅｘｔ”、“．ｆｉｎｉ”、“．ｒｏｄａｔａ”、“．ｄａｔａ”、“．ｃｔｏｒｓ”、“．ｄｔｏｒｓ”、“．ｇｏｔ”及び“．ｂｓｓ”などのセクションが代表的なものである。【００９３】
上記問題に対処するため、実行バイナリ書き換え部３は、削除可能領域として検出された再配置情報及びシンボル情報に対して、実データそのものを削除するのではなく、特定データに書き換える。【００９４】
例えば、実行バイナリ書き換え部３は、削除可能と検出されているシンボル情報の内部管理構造を取得して、そこから参照するセクション、参照元を示す位置及びシンボル文字列の位置を取得できれば、実行バイナリプログラム中のその領域を特定データで書き換える。ここで、特定データは、ある同一のデータ、例えば０あるいは０ｘＦＦなどでよい。また、特定データは、ある一定の規則に基づくデータでもかまわない。【００９５】
実行バイナリ書き換え部３が、実行バイナリプログラムの中の実データそのものを削除するのではなく、特定データに書き換えることにより、実行バイナリプログラムのテキスト情報やデータ情報の配置アドレスが変化しなくなり、上記問題を回避できる。【００９６】
また、最終的に実行バイナリイメージ作成部４は、実行バイナリ書き換え部３によって書き換えられた実行バイナリプログラムを機器やシステム上で認識可能な実行バイナリイメージに変換する。この実行バイナリイメージを、圧縮技術を用いて作成すれば、特定データ例えば同一データで書き換えられた領域は、他のデータと比較して一般的に圧縮率が高くなるので、実行バイナリイメージのデータサイズを削減することができる。【００９７】
また、実行バイナリ書き換え部３は、実行バイナリプログラムの削除可能領域を特定データで書き換えて、実行バイナリ読み取り部１で読み取った実行バイナリプログラムの内部構成であるＥＬＦヘッダやプログラムヘッダや各セクション構造を構成し直して、実行バイナリプログラムの形式で出力する。【００９８】
一つ一つの実行バイナリプログラムが、実行バイナリ読み取り部１に入力されて、再配置情報及びシンボル情報が削除可能な状態になって、実行バイナリ書き換え部３から出力される。次に、実行バイナリイメージ作成部４は、これらの実行バイナリプログラムを、機器やシステム上で動作できる状態にするために実行バイナリイメージを作成する。例えば、ファイルシステムなどが導入され、そのファイルシステム用の実行バイナリイメージが作成される。【００９９】
この実行バイナリイメージを作成するにあたって、圧縮技術を用いれば、上述した通り、特定データに書き換えた領域の圧縮率が高まり、実行バイナリイメージのデータサイズを削減することができる。例えば、実行バイナリプログラムを圧縮することができるファイルシステムを導入することが考えられる。ファイルシステムについては、ＦＡＴ（Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ）、ＶＦＡＴ（Ｖｉｒｔｕａｌ  ＦＡＴ）、ＦＡＴ３２、ＮＴＦＳ（ＮＴ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）、ＨＦＳ（Ｈｉｇｈ−ｐｅｒｆｏｒｍａｎｃｅ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）、ｅｘｔ２、ｅｘｔ３、ＲｅｉｓｅｒＦＳ、ＪＦＳ（Ｊｏｕｒｎａｌｉｎｇ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）、ＸＦＳ、ＪＦＦＳ（Ｊｏｕｒｎａｌｉｎｇ  Ｆｌａｓｈ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）２、ＣＲＡＭＦＳなどが使用できる。その他、独自の圧縮技術、あるいは独自のファイルシステムを使用してもかまわない。【０１００】
これまで実行バイナリ書き換え部３が、実行バイナリプログラムの削除可能領域を特定データに書き換える方式を説明してきたが、それだけではなく、さらに実行バイナリプログラムの削除可能領域、すなわち特定データに書き換える領域をセクション内で集約することも可能である。特定データへの書き換え領域を集約することにより、圧縮技術によってより高い圧縮率による実行バイナリイメージのサイズ削減の効果が得られる。書き換え領域を集約する例について、図１２及び図１３の例を用いて説明する。【０１０１】
図１２は、実行バイナリ書き換え部３が特定データに書き換える領域を集約しない場合の動作を説明するための模式図である。図１３は、実行バイナリ書き換え部３が特定データに書き換える領域を集約する場合の動作を説明するための模式図である。【０１０２】
図１２において、“．ｒｅｌ”系セクションの３つのエントリ１８１は、それぞれ“．ｄｙｎｓｙｍ”セクションの３つのエントリ１８２，１８３，１８４に対応付けられている。“．ｄｙｎｓｙｍ”セクションのエントリ１８２は、“．ｄｙｎｓｔｒ”セクションの文字列“ＸＹＺ”を指しており、エントリ１８３は文字列“ＡＢＣ”を指しており、エントリ１８４は文字列“ＤＥＦ”を指している。図１２において、実行バイナリ書き換え部３は、シンボル情報が削除可能であることを表す可否情報にしたがって、“．ｄｙｎｓｙｍ”セクションのエントリ１８２，１８３，１８４、及び“．ｄｙｎｓｔｒ”セクションの３つの文字列を特定データに書き換えることになる。この場合、特定データは、“．ｄｙｎｓｙｍ”セクション及び“．ｄｙｎｓｔｒ”セクションの中で複数領域に分散してしまう。【０１０３】
そこで、図１３に示すように、実行バイナリ書き換え部３は、特定データに書き換える“．ｄｙｎｓｙｍ”セクションの３つのエントリ１８５，１８６，１８７を一箇所に集約する。また、実行バイナリ書き換え部３は、“．ｄｙｎｓｔｒ”セクションの３つの文字列も一箇所に集約する。なお、図１３の例では、書き換える領域を各セクションの末尾に集約しているが、一箇所に集約するのであれば、セクション内のどの位置でもかまわない。また、特定データへの書き換えと、書き換え領域の集約との処理順序は問わない。【０１０４】
実行バイナリ書き換え部３が、特定データに書き換える領域を一箇所に集約することによって、セクション内の残りのデータも位置が変化する可能性がある。そこで実行バイナリ書き換え部３は、残りのデータの位置が変化すると、それに関連するセクションの参照先を補正する。【０１０５】
まず、“．ｄｙｎｓｔｒ”セクション内の書き換え領域を集約する場合、実行バイナリプログラムの残りの文字列の位置が変化することに伴って、その文字列を参照するセクションの各エントリの位置を補正する。これは、削除可能領域検出部２から取得したシンボル情報の内部管理構造から、そのシンボル文字列を参照するセクションの情報を取得して、それぞれのセクションの位置を変更すればよい。【０１０６】
例えば、“．ｄｙｎｓｔｒ”セクションの書き換え領域が集約されて文字列の位置が変更されると、実行バイナリ書き換え部３は、文字列を参照している“．ｄｙｎｓｙｍ”セクションや“．ｒｅｌ”系セクションの各エントリの位置を補正する。また、実行バイナリ書き換え部３は、その他、動的リンク情報を管理している“．ｄｙｎａｍｉｃ”セクション、シンボルのバージョンを管理している“．ｇｎｕ．ｖｅｒｓｉｏｎ”系セクション、ライブラリ情報を保持する“．ｇｎｕ．ｌｉｂｌｉｓｔ”セクション、及びシンボル文字列を検索するためのハッシュ構造を管理する“．ｈａｓｈ”セクションなどにおいて、文字列を参照している領域の位置を補正する。【０１０７】
実行バイナリ書き換え部３は、さらに実行バイナリプログラムの削除可能領域、すなわち特定データに書き換える領域をセクション内だけではなく、実行バイナリプログラム全体で集約することも可能である。特定データへの書き換え領域を実行バイナリプログラム全体で集約することにより、セクション単位で集約するよりもさらに大きく集約することができる。さらに、書き換え領域が実行バイナリプログラム全体で集約された実行バイナリイメージを圧縮した場合、セクション単位で集約された実行バイナリイメージを圧縮するよりも、実行バイナリイメージのデータサイズをより削減することができる。ここで、書き換え領域を実行バイナリプログラム全体で集約する例を、図１４を用いて説明する。【０１０８】
図１４は、実行バイナリ書き換え部が特定データに書き換える領域を実行バイナリプログラム全体で集約する場合の動作を説明するための模式図である。図１４では、例として“．ｄｙｎｓｙｍ”セクションと“．ｄｙｎｓｔｒ”セクションと“．ｇｎｕ．ｖｅｒｓｉｏｎ”系セクションとを、削除可能領域を特定データに書き換えるセクションとして挙げている。この３つのセクションの中で、実行バイナリ書き換え部３が特定データに書き換える部分をそれぞれ領域１９１，１９２，１９３とすると、それらを実行バイナリプログラム全体で集約すると領域１９４に集約される。ただし、この時実行バイナリプログラムの中にあるテキスト情報やデータ情報に関しては、配置アドレスを変化させない。【０１０９】
実行バイナリプログラム全体で特定データの書き換え部分を集約する方法としては、例えば、直前のセクションの末尾（セクションの特定データではない部分の末尾）に続いて次のセクションを配置するように、対象セクションの位置を補正し、その際セクションの移動によって上書きされた特定データの部分（削除可能領域）を、移動後のセクションの末尾に特定データのデータサイズ分まとめて書き出せばよい。実行バイナリ書き換え部３は、この動作を全てのセクションに対して行えばよい。セクションの位置の補正は、例えばセクションヘッダ等にあるセクションの位置情報を変更すればよい。なお、ここに挙げた方法は一例であり、特定データを実行バイナリプログラム全体で集約する図１４に示す動作が実現できれば他の方法でもかまわない。【０１１０】
実行バイナリ書き換え部３が実行バイナリプログラム全体で書き換え領域を集約する場合、各セクションの位置が変化する可能性がある。そこで、実行バイナリ書き換え部３は、セクションの位置の変化にしたがって、実行バイナリプログラム全体の情報を補正する必要がある。【０１１１】
例えば、セクションヘッダにはセクションの配置アドレスとオフセットとが存在するので、実行バイナリ書き換え部３は、セクションの位置の変化にしたがって、それらを補正する必要がある。また、プログラムヘッダもそのプログラムヘッダに属するセクションサイズの合計値を求め、求めた合計値に基づいてプログラムヘッダに含まれるファイルサイズ及びメモリサイズを必要あれば補正する。【０１１２】
その他にも、実行バイナリ書き換え部３は、削除可能領域検出部２から取得した削除可能領域の情報で、あるセクション全てが削除可能になっている場合、セクションそのものを削除することができる。この場合にも上述した実行バイナリプログラム全体に関して情報を補正する必要があれば行う。また、各セクションには他のセクションを参照することを示す情報があるので、実行バイナリ書き換え部３は、この情報を必要があれば補正する。その他にもＥＬＦヘッダは存在するセクション数を管理しているので、実行バイナリ書き換え部３は、セクション数の情報を補正する必要がある。【０１１３】
これまで、実行バイナリ書き換え部３が削除可能領域を特定データに書き換えることにより、圧縮率を高めて、実行バイナリイメージのデータサイズを削減する方法を説明してきた。その方法とは別に、実行バイナリイメージ作成部４は、さらに特定データで書き換えられた一定のメモリ領域単位（ページ単位）を、ある実行バイナリプログラムの中で、あるいは全ての実行バイナリプログラムで共用してもよい。この場合、実行バイナリイメージのサイズをより削減することが可能である。この方法に関して、図１５の例を用いて説明する。【０１１４】
図１５は、特定データに書き換えられたページを全ての実行バイナリプログラムで共用する動作について説明するための模式図である。図１５（Ａ）は、２つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの一例を示す図であり、図１５（Ｂ）は、共用ページを利用した実行バイナリイメージの一例を示す図である。図１５（Ａ）では、実行バイナリプログラムＡと実行バイナリプログラムＢの２つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの例を挙げている。実行バイナリプログラムのファイルデータは、ページ単位で管理されている。そして、実行バイナリプログラムＡ及び実行バイナリプログラムＢともに図１５（Ａ）では“０”で表されている特定データに書き換えられたページ２０１を持つ。通常、実行バイナリイメージは、この“０”で表されたページ２０１を含む所定のサイズのファイルデータ２０２，２０３から成り立つ。【０１１５】
しかし、本実施の形態における実行バイナリイメージ作成部４は、図１５（Ｂ）に示す通り共用ページを利用した実行バイナリイメージを作成することが可能である。実行バイナリイメージ作成部４は、実行バイナリプログラムのファイルデータをページ単位で管理するためのページ管理情報２０４を作成し、作成したページ管理情報２０４を各実行バイナリプログラムに持たせる。実行バイナリイメージ作成部４は、特定データで書き換えられたページ（図１５（Ａ）で“０”と表されているページ）が、１つの実行バイナリプログラムの複数の領域から共用される一つの共用ページ２０６を指すようにページ管理情報２０４を設定し、また他の実行バイナリプログラムからもページ管理情報２０４によって同一の共用ページ２０６を指すようにページ管理情報２０４を設定して、実行バイナリイメージを作成する。【０１１６】
ここで、ページ管理情報２０４は、ページ単位ではなく、何らかの物理メモリの管理単位に従って管理すればよい。また、必ずしも特定データで書き換えられたページ（図１５（Ａ）で“０”と表されているページ）個々に対して共用ページへのポインタを管理する必要はない。例えば、ファイルデータの中で、共用ページに割り当てる領域を、ファイルの先頭からのアドレスのオフセット値によって範囲を指定してもよいし、絶対アドレス値によって範囲を指定してもよい。【０１１７】
そのように設定することにより、従来５ページ分のサイズのファイルデータ２０２，２０３を含めていた実行バイナリイメージが、２ページ分のサイズのファイルデータ２０５，２０７と１ページ分のサイズの共用ページ２０６とを含めるだけでよく、実行バイナリイメージのサイズを削減することができる。【０１１８】
プログラムを実行する際には、以上のように作成した実行バイナリイメージを、機器やシステムが認識する必要がある。典型的には、オペレーティングシステム（ＯＳ）や基本ソフトウェアと呼ばれるソフトウェアが、記憶媒体に格納されている実行バイナリイメージを読み取って解析し、実行するための実行バイナリプログラムを認識して実行のための環境を整える。【０１１９】
図１６は、共用ページを利用した実行バイナリイメージと、実行バイナリプログラムが実行される際のアドレス空間との関係を説明するための模式図である。図１６の実行バイナリプログラムＡが起動されると、ＯＳは実行バイナリプログラムＡの情報や実体が、実行バイナリイメージが持つ管理情報、例えば、図１６のｉｎｏｄｅ２１１から特定される。ページ管理情報２１２は、前述した通り、実行バイナリプログラムの実体を指し示す管理情報、あるいは共用ページ２１３を使用する領域を特定するための情報を含む。【０１２０】
ＯＳは、ページ管理情報２１２を読み取り、実行バイナリイメージの物理的な領域を、プログラムを実行するアドレス空間に割り当てる。ここで、プログラムのアドレス空間上で、実行バイナリプログラムの“．ｔｅｘｔ”セクションなどの位置を変えないために、仮想記憶管理機構２１４により仮想的なアドレス空間が作成される。すなわち、仮想記憶管理機構２１４は、実行バイナリプログラムに対して特定データで書き換えたページ領域と、書き換えていないページ領域とを認識し、仮想的なアドレス空間上で元の実行バイナリプログラムの実体の配置を実現する。【０１２１】
ここで、具体的な例について図１６を用いて説明する。実行バイナリプログラムＡを仮想的なアドレス空間に展開する場合、ＯＳは、ファイルデータ２１８の最初のページを、プログラムの仮想的なアドレス空間上における最初の位置２１５に割り当てるように仮想記憶管理機構２１４を設定する。そして、ＯＳは、ページ管理情報２１２を参照し、後続する３つのページが共用ページ２１３を使用していることを認識する。ＯＳは、仮想的なアドレス空間上における２番目から４番目の位置２１７にそれぞれ共用ページ２１３を割り当てるように仮想記憶管理機構２１４を設定する。そして、ＯＳは、ファイルデータ２１８の最後のページを、仮想的なアドレス空間上における最後の位置２１６に割り当てるように仮想記憶管理機構２１４を設定する。実行プログラムＡは、仮想記憶管理機構２１４が管理する仮想的なアドレス空間上で動作する。【０１２２】
同様に、実行バイナリプログラムＢを仮想的なアドレス空間に展開する場合、ＯＳは、ページ管理情報２１２を参照し、１番目と２番目のページが共用ページ２１３を使用していることを認識する。ＯＳは、仮想的なアドレス空間上における１番目と２番目の位置２１９にそれぞれ共用ページ２１３を割り当てるように仮想記憶管理機構２１４を設定する。次に、ＯＳは、ファイルデータ２２３の最初のページを、プログラムの仮想的なアドレス空間上における３番目の位置２２０に割り当てるように仮想記憶管理機構２１４を設定する。そして、ＯＳは、ページ管理情報２１２を参照し、後続する４番目のページが共用ページ２１３を使用していることを認識する。ＯＳは、仮想的なアドレス空間上における４番目の位置２２１に共用ページ２１３を割り当てるように仮想記憶管理機構２１４を設定する。そして、ＯＳは、ファイルデータ２２３の最後のページを、仮想的なアドレス空間上における最後の位置２２２に割り当てるように仮想記憶管理機構２１４を設定する。実行プログラムＢは、仮想記憶管理機構２１４が管理する仮想的なアドレス空間上で動作する。【０１２３】
以上の動作により、例えば、図１６の仮想的なアドレス空間上の位置２１６に実行バイナリプログラム中の実行コード本体であるテキスト情報やデータ情報が配置されるので、アドレス空間上の配置アドレスを変化させることなくテキスト情報やデータ情報を配置することができ、他の実行コードからも問題なくアクセスすることが可能になる。【０１２４】
なお、図１６の例では、仮想記憶管理機構２１４は、仮想的なアドレス空間上における位置２１７に、物理的な実行バイナリイメージの共用ページ２１３を割り当てているが、共用ページに全くアクセスしないことが予めわかっている場合、仮想的なアドレス空間上の位置２１７を共用ページの物理的な領域に割り当てなくても動作に問題はない。また、どのプログラムも特定データで書き換えたページ領域にアクセスしないことがわかっている場合、さらに実行バイナリイメージの中から共用ページを除くことも可能である。【０１２５】
本実施の形態における実行バイナリイメージ作成装置は、情報機器、ＡＶ機器、通信機器及び家電機器などの種々の機器に搭載されるコンピュータで実行される実行バイナリプログラムに適用するものであり、コンピュータが認識するための実行バイナリイメージを出力する。【０１２６】
図１７は、本実施の形態における情報処理システムの構成を示す図である。図１７に示す情報処理システム１０は、実行バイナリイメージ作成装置１１とコンピュータ１２とを備える。実行バイナリイメージ作成装置１１の構成は、図１に示す実行バイナリイメージ作成装置と同じである。コンピュータ１２は、記憶部２１及びプログラム実行部２２を備える。【０１２７】
記憶部２１は、例えばＲＯＭ等で構成され、実行バイナリイメージ作成装置１１によって作成された実行バイナリイメージを記憶する。プログラム実行部２２は、例えばＣＰＵ等で構成され、記憶部２１に記憶されている実行バイナリイメージを仮想アドレス空間に展開して実行する。なお、本実施の形態において、記憶部２１が実行バイナリイメージ記憶部の一例に相当し、プログラム実行部２２が実行部の一例に相当する。また、本実施の形態において、実行バイナリイメージ実行プログラムが例えばＲＯＭに記憶されており、実行バイナリイメージ実行プログラムが記憶部２１及びプログラム実行部２２としてＣＰＵ及びＥＥＰＲＯＭを機能させる。【０１２８】
図１７に示すように、実行バイナリイメージ作成装置１１はコンピュータ１２の外部にあり、実行バイナリイメージ作成装置１１から出力される実行バイナリイメージをコンピュータ１２上で認識し動作せることが可能である。【０１２９】
また、別の実施の形態として、実行バイナリプログラムが実行されるコンピュータ上で、実行バイナリイメージ作成装置と同様の機能を動作させることも可能である。図１８は、本実施の形態における情報処理システムの別の構成を示す図である。図１８に示すコンピュータ１２’は、実行バイナリイメージ作成処理部１１’、記憶部２１、プログラム実行部２２及び通信部２３を備える。情報処理システム１０’は、実行バイナリイメージ作成処理部１１’、記憶部２１及びプログラム実行部２２で構成される。なお、図１８に示す情報処理システム１０’において、図１７に示す情報処理システム１０と同じ構成については同じ符号を付し、説明を省略する。【０１３０】
通信部２３は、例えばインターネットなどのネットワークを介して実行バイナリプログラムを受信し、受信した実行バイナリプログラムを実行バイナリイメージ作成処理部１１’の実行バイナリ読み取り部１へ出力する。実行バイナリイメージ作成処理部１１’及びプログラム実行部２２は、例えばＣＰＵ等で構成され、記憶部２１は、例えばＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等で構成される。実行バイナリイメージ作成処理部１１’の構成は、図１に示す実行バイナリイメージ作成装置の構成と同じである。【０１３１】
このように、ネットワークを介して実行バイナリプログラムが受信され、コンピュータ内で実行バイナリイメージが作成されるので、実行バイナリイメージをアップデートすることができる。【０１３２】
なお、本実施の形態ではネットワークを介して実行バイナリプログラムを受信して実行バイナリイメージを作成しているが、本発明は特にこれに限定されず、ＣＤ−ＲＯＭなどのコンピュータ読み取り可能な記録媒体から実行バイナリプログラムを読み出して実行バイナリイメージを作成してもよい。この場合、コンピュータ１２’は、記録媒体を駆動する記録媒体駆動部を備える。記録媒体駆動部は、記録媒体から実行バイナリプログラムを読み出し、読み出した実行バイナリプログラムを実行バイナリイメージ作成処理部１１’の実行バイナリ読み取り部１へ出力する。【０１３３】
以上、本実施の形態では、実行バイナリプログラムの形式としてＥＬＦ形式を代表例に挙げて説明してきたが、ＥＬＦ形式の実行バイナリプログラムのみに実施の範囲を限定するものではなく、他の実行バイナリプログラムの形式においても、これまで説明した再配置情報とシンボル情報とを同様に備え、これまでの説明通り同様に実施することができる。【０１３４】
また、本実施の形態では、実行バイナリイメージ作成装置を中心に説明してきたが、情報処理システム、情報処理方法、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体に関しても、同様に実施することができる。【０１３５】
さらにまた、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。【０１３６】
また、例えば、実行バイナリ読み取り部１、削除可能領域検出部２、実行バイナリ書き換え部３及び実行バイナリイメージ作成部４のうちの少なくとも１つが、１チップ化されたＬＳＩ（大規模集積回路）に含まれ得る。実行バイナリ読み取り部１、削除可能領域検出部２、実行バイナリ書き換え部３及び実行バイナリイメージ作成部４のうちの少なくとも１つをＬＳＩに含めることによって、実行バイナリイメージ作成装置の製造工程を容易にすることができる。【０１３７】
なお、上述した具体的実施形態には以下の構成を有する発明が主に含まれている。【０１３８】
本発明の一局面に係る情報処理システムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。【０１３９】
本発明の他の局面に係る情報処理方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。【０１４０】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。【０１４１】
したがって、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。【０１４２】
また、上記の情報処理システムにおいて、前記実行バイナリ読み取り部は、シンボルのアドレス解決を実施済みの前記実行バイナリプログラムを読み取ることが好ましい。【０１４３】
この構成によれば、シンボルのアドレス解決を実施済みの実行バイナリプログラムが読み取られるので、シンボルに関するシンボル情報及びシンボルのアドレス解決に使用される再配置情報を削除することができる。【０１４４】
また、上記の情報処理システムにおいて、前記特定のデータは、前記実行バイナリプログラム内の他のデータよりも圧縮率の高いデータであり、前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムを圧縮することが好ましい。【０１４５】
この構成によれば、実行バイナリプログラムを実行バイナリイメージに変換する際に、削除可能領域が特定のデータに書き換えられた実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量を削減することができる。【０１４６】
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域は、前記セクション内の所定の領域であり、前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラムのセクション単位で集約することが好ましい。【０１４７】
この構成によれば、実行バイナリプログラムは、セクション単位で分割され、削除可能領域は、セクション内の所定の領域であり、特定のデータに書き換えた領域が実行バイナリプログラムのセクション単位で集約され、実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける集約された特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量をさらに削減することができる。【０１４８】
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域は、前記セクションであり、前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラム全体で集約することが好ましい。【０１４９】
この構成によれば、実行バイナリプログラムは、セクション単位で分割され、削除可能領域は、セクションであり、特定のデータに書き換えた領域が実行バイナリプログラム全体で集約され、実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける集約された特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量をさらに削減することができる。【０１５０】
また、上記の情報処理システムにおいて、前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって特定のデータに書き換えられた領域を削除するとともに、前記実行バイナリプログラム内で共用する前記特定のデータを格納した共用領域を作成し、削除された前記領域の前記実行バイナリプログラム内における位置と前記共用領域とを関連付けて管理する管理情報を作成することが好ましい。【０１５１】
この構成によれば、実行バイナリプログラムを実行バイナリイメージに変換する際に、特定のデータに書き換えられた領域が削除されるとともに、実行バイナリプログラム内で共用する特定のデータを格納した共用領域が作成され、削除された領域の実行バイナリプログラム内における位置と共用領域とを関連付けて管理する管理情報が作成される。したがって、特定のデータに書き換えられた領域が削除され、特定のデータが共用領域にのみ格納されるので、実行バイナリイメージが含む特定のデータのデータ量を削減することができ、実行バイナリイメージ全体のデータ量を削減することができる。【０１５２】
また、上記の情報処理システムにおいて、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開する際に、前記管理情報を参照し、削除された前記領域の前記実行バイナリプログラム内における位置を認識し、認識した位置に対応する前記仮想的なアドレス空間に、前記共有領域に格納されている特定のデータを割り当てることが好ましい。【０１５３】
この構成によれば、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開される際に、管理情報が参照され、削除された領域の実行バイナリプログラム内における位置が認識され、認識された位置に対応する仮想的なアドレス空間に、共有領域に格納されている特定のデータが割り当てられる。したがって、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、仮想的なアドレス空間に実行バイナリイメージを配置することができる。【０１５４】
また、上記の情報処理システムにおいて、前記実行バイナリ読み取り部は、前記実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報を前記実行バイナリプログラムから読み取り、前記削除可能領域検出部は、前記実行バイナリ読み取り部によって読み取られた前記アドレス解決情報がアドレス解決済みであるか否かを判定し、アドレス解決済みでないと判定された場合、前記実行バイナリプログラムの中から削除可能領域を検出しないことが好ましい。【０１５５】
この構成によれば、実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報が実行バイナリプログラムから読み取られ、読み取られたアドレス解決情報がアドレス解決済みであるか否かが判定され、アドレス解決済みでないと判定された場合、実行バイナリプログラムの中から削除可能領域が検出されない。したがって、アドレス解決済みであると判定された場合にのみ、削除可能領域を検出することができ、シンボル情報や再配置情報を削除可能領域として検出することができる。【０１５６】
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報を削除の対象外とすることが好ましい。【０１５７】
この構成によれば、実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報が削除の対象外とされるので、他のセクションから参照される情報は削除されずに残り、参照先のデータが存在しないという不具合を防止することができる。【０１５８】
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、複数の実行バイナリプログラムを含み、前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報を削除の対象外とすることが好ましい。【０１５９】
この構成によれば、実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報が削除の対象外とされるので、他の実行バイナリプログラムから参照される情報は削除されずに残り、参照先のデータが存在しないという不具合を防止することができる。【０１６０】
また、上記の情報処理システムにおいて、前記削除可能領域検出部は、前記実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることを検出し、文字列を共用しているシンボル全てが削除可能である場合にのみ、前記複数のシンボル及び前記文字列に対応する領域を削除可能領域として検出することが好ましい。【０１６１】
この構成によれば、実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることが検出され、文字列を共用しているシンボル全てが削除可能である場合にのみ、複数のシンボル及び文字列に対応する領域が削除可能領域として検出される。複数のシンボルが実行バイナリプログラム内の文字列を共用している場合、一のシンボルが削除可能と判定されても、他のシンボルが削除可能と判定されていなければ、実行バイナリプログラム内のシンボルの文字列及びシンボル情報は削除されない。したがって、一のシンボルが削除可能と判定されて文字列が削除されてしまい、文字列を共用している他のシンボルが文字列を指定することができないという不具合を防止することができる。【０１６２】
本発明の他の局面に係る実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備える。【０１６３】
本発明の他の局面に係る実行バイナリイメージ作成方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含む。【０１６４】
本発明の他の局面に係る実行バイナリイメージ作成プログラムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる。【０１６５】
本発明の他の局面に係る実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる実行バイナリイメージ作成プログラムを記録している。【０１６６】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。【０１６７】
したがって、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。【０１６８】
本発明の他の局面に係る実行バイナリイメージ実行装置は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。【０１６９】
本発明の他の局面に係る実行バイナリイメージ実行方法は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。【０１７０】
本発明の他の局面に係る実行バイナリイメージ実行プログラムは、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる。【０１７１】
本発明の他の局面に係る実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる実行バイナリイメージ実行プログラムを記録している。【０１７２】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶される。そして、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。したがって、データ量が削減された実行バイナリイメージが記憶されるので、実行バイナリイメージを記憶するために必要な記憶容量を削減することができる。
【産業上の利用可能性】
【０１７３】
本発明に係る情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行されるプログラムのデータサイズを削減することができ、コンピュータを搭載する種々の機器において、メモリサイズを抑えることができるので産業上有用である。
【図１】
2007026484.tif 000003
【図２】
2007026484.tif 000004
【図３】
2007026484.tif 000005
【図４】
2007026484.tif 000006
【図５】
2007026484.tif 000007
【図６】
2007026484.tif 000008
【図７】
2007026484.tif 000009
【図８】
2007026484.tif 000010
【図９】
2007026484.tif 000011
【図１０】
2007026484.tif 000012
【図１１】
2007026484.tif 000013
【図１２】
2007026484.tif 000014
【図１３】
2007026484.tif 000015
【図１４】
2007026484.tif 000016
【図１５】
2007026484.tif 000017
【図１６】
2007026484.tif 000018
【図１７】
2007026484.tif 000019
【図１８】
2007026484.tif 000020
【手続補正書】
【提出日】平成20年1月15日(2008.1.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、
前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、アドレス解決に使用される情報を解析し、アドレス解決済みの場合に前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を検出する領域検出部と、
前記領域検出部によって検出された前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を特定のデータに書き換える実行バイナリ書き換え部と、
前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、
前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、
前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備えることを特徴とする情報処理システム。
【請求項２】
前記実行バイナリ読み取り部は、シンボルのアドレス解決を実施済みの前記実行バイナリプログラムを読み取ることを特徴とする請求項１記載の情報処理システム。
【請求項３】
前記特定のデータは、前記実行バイナリプログラム内の他のデータよりも圧縮率の高いデータであり、
前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムを圧縮することを特徴とする請求項１又は２記載の情報処理システム。
【請求項４】
前記実行バイナリプログラムは、セクション単位で分割され、
前記書き換えが可能となる領域は、前記セクション内の所定の領域であり、
前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラムのセクション単位で集約することを特徴とする請求項３記載の情報処理システム。
【請求項５】
前記実行バイナリプログラムは、セクション単位で分割され、
前記書き換えが可能となる領域は、前記セクションであり、
前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラム全体で集約することを特徴とする請求項３記載の情報処理システム。
【請求項６】
前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって特定のデータに書き換えられた領域を削除するとともに、前記実行バイナリプログラム内で共用する前記特定のデータを格納した共用領域を作成し、削除された前記領域の前記実行バイナリプログラム内における位置と前記共用領域とを関連付けて管理する管理情報を作成することを特徴とする請求項１又は２記載の情報処理システム。
【請求項７】
前記実行部は、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開する際に、前記管理情報を参照し、削除された前記領域の前記実行バイナリプログラム内における位置を認識し、認識した位置に対応する前記仮想的なアドレス空間に、前記共有領域に格納されている特定のデータを割り当てることを特徴とする請求項６記載の情報処理システム。
【請求項８】
前記実行バイナリ読み取り部は、前記実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報を前記実行バイナリプログラムから読み取り、
前記領域検出部は、前記実行バイナリ読み取り部によって読み取られた前記アドレス解決情報がアドレス解決済みであるか否かを判定し、アドレス解決済みでないと判定された場合、前記実行バイナリプログラムの中から書き換えが可能となる領域を検出しないことを特徴とする請求項１〜７のいずれかに記載の情報処理システム。
【請求項９】
前記実行バイナリプログラムは、セクション単位で分割され、
前記領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報を削除の対象外とすることを特徴とする請求項１〜８のいずれかに記載の情報処理システム。
【請求項１０】
前記実行バイナリプログラムは、複数の実行バイナリプログラムを含み、
前記領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報を削除の対象外とすることを特徴とする請求項１〜９のいずれかに記載の情報処理システム。
【請求項１１】
前記領域検出部は、前記実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることを検出し、文字列を共用しているシンボル全てが削除可能である場合にのみ、前記複数のシンボル及び前記文字列に対応する領域を書き換えが可能となる領域として検出することを特徴とする請求項１〜１０のいずれかに記載の情報処理システム。
【請求項１２】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、
前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、アドレス解決に使用される情報を解析し、アドレス解決済みの場合に前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を検出する領域検出ステップと、
前記領域検出ステップにおいて検出された前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を特定のデータに書き換える実行バイナリ書き換えステップと、
前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、
前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、
前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含むことを特徴とする情報処理方法。
【請求項１３】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、
前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、アドレス解決に使用される情報を解析し、アドレス解決済みの場合に前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を検出する領域検出部と、
前記領域検出部によって検出された前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を特定のデータに書き換える実行バイナリ書き換え部と、
前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備えることを特徴とする実行バイナリイメージ作成装置。
【請求項１４】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、
前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、アドレス解決に使用される情報を解析し、アドレス解決済みの場合に前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を検出する領域検出ステップと、
前記領域検出ステップにおいて検出された前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を特定のデータに書き換える実行バイナリ書き換えステップと、
前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含むことを特徴とする実行バイナリイメージ作成方法。
【請求項１５】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、
前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、アドレス解決に使用される情報を解析し、アドレス解決済みの場合に前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を検出する領域検出部と、
前記領域検出部によって検出された前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を特定のデータに書き換える実行バイナリ書き換え部と、
前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させることを特徴とする実行バイナリイメージ作成プログラム。
【請求項１６】
コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、
前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、アドレス解決に使用される情報を解析し、アドレス解決済みの場合に前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を検出する領域検出部と、
前記領域検出部によって検出された前記実行バイナリプログラムの中でデータの書き換えが可能となる領域を特定のデータに書き換える実行バイナリ書き換え部と、
前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させることを特徴とする実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１７】
コンピュータ上で実行される実行バイナリプログラムの中でデータの書き換えが可能となる領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、
前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備えることを特徴とする実行バイナリイメージ実行装置。
【請求項１８】
コンピュータ上で実行される実行バイナリプログラムの中でデータの書き換えが可能となる領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、
前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含むことを特徴とする実行バイナリイメージ実行方法。
【請求項１９】
コンピュータ上で実行される実行バイナリプログラムの中でデータの書き換えが可能となる領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、
前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させることを特徴とする実行バイナリイメージ実行プログラム。
【請求項２０】
コンピュータ上で実行される実行バイナリプログラムの中でデータの書き換えが可能となる領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、
前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させることを特徴とする実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ上で実行される種々の実行バイナリイメージを作成する情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体に関するものである。
【背景技術】
【０００２】
Ｌｉｎｕｘ（登録商標）やＷｉｎｄｏｗｓ（登録商標）などのようなマルチタスク型のＯＳ（オペレーティングシステム）が搭載されている機器やコンピュータでは、多くの場合、動的ローディングシステムを採用している。これは、実行バイナリプログラムの実行時に初めて、そのプログラム本体や使用する共有ライブラリのアドレスを決定するシステムであり、再配置処理、すなわち使用するシンボルのアドレス解決を行う必要がある。そのため、実行バイナリプログラムの情報の中に、再配置情報やシンボル情報が含まれる。プログラムを実行すると、動的ローダがこれらの再配置情報やシンボル情報を使用して、関数や変数のアドレスを確定するので、これらの情報は動的ローディングシステムの実行バイナリプログラムでは必須であった。したがって、実行バイナリプログラムの実行コードであるテキスト情報やデータ情報などとともに、それらの再配置情報やシンボル情報を、実行バイナリイメージの中に含める必要があった。
【０００３】
上記背景のもとで、ＲＯＭ（リードオンリメモリ）のサイズ削減のための従来技術として、組み込んだローダを用いて一度プログラムを実行した上で、共用ライブラリのアドレス解決に必要な構造を、ＲＯＭとは別の記憶装置に保存し、かつ実行バイナリプログラムからその構造を削除した上で、二度目に実行する際には、記憶装置に保存されたアドレス解決に必要な情報を使用して、ポインタを再配置してアドレス解決を行う技術が開示されている（例えば、特許文献１参照）。
【特許文献１】特開平１０−２２８３８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、前記従来の技術では、共用ライブラリのアドレス解決に必要な構造を、外部あるいは別の記憶装置に持つという点で、ＲＯＭに載せる実行バイナリプログラムのデータサイズを減らしてはいるが、別途構造データを保持する記憶容量が必要になる。そのため、結局余分な記憶領域を使用するという問題が残る。
【０００５】
また、動的ローディングシステム上で動作させるためには、実行バイナリプログラムが持つ再配置情報やシンボル情報のうち、どのような条件下でどの箇所を本当に削除できるのか明らかではないという課題があった。
【０００６】
さらに、上記問題とは別に、実行バイナリプログラムの情報を一部編集してしまったり削除してしまったりすることによって、実行バイナリプログラムの内部構成が変化して、実行コード本体であるテキスト情報やデータ情報の配置アドレスが変化する可能性がある。その場合、全ての実行バイナリプログラムの中で、元々変化が生じた実行バイナリプログラムを利用するためにその位置を指していた箇所を検出し、変化した分だけアドレスを補正する必要が生じる。この補正がないと実行バイナリプログラムはプログラムとして動作しない。しかしながら、実行バイナリプログラムが、変化したアドレス位置を検出することは非常に困難であり、単純に実行バイナリプログラムの持つ再配置情報やシンボル情報を削除できないという課題があった。
【０００７】
本発明は、上記の問題を解決するためになされたもので、実行バイナリイメージのデータ量を削減することができる情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とするものである。
【課題を解決するための手段】
【０００８】
本発明の一局面に係る情報処理システムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
【０００９】
本発明の他の局面に係る情報処理方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
【００１０】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
【００１１】
本発明の他の局面に係る実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備える。
【００１２】
本発明の他の局面に係る実行バイナリイメージ作成方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含む。
【００１３】
本発明の他の局面に係る実行バイナリイメージ作成プログラムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる。
【００１４】
本発明の他の局面に係る実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる実行バイナリイメージ作成プログラムを記録している。
【００１５】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
【００１６】
本発明の他の局面に係る実行バイナリイメージ実行装置は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
【００１７】
本発明の他の局面に係る実行バイナリイメージ実行方法は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
【００１８】
本発明の他の局面に係る実行バイナリイメージ実行プログラムは、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる。
【００１９】
本発明の他の局面に係る実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる実行バイナリイメージ実行プログラムを記録している。
【００２０】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶される。そして、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
【００２１】
本発明によれば、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
【００２２】
本発明の目的、特徴及び利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【発明の効果】
【００２３】
本発明によれば、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００２５】
図１は、本実施の形態における実行バイナリイメージ作成装置の構成を示すブロック図である。本実施の形態における実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムを入力とし、実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部１と、実行バイナリ読み取り部１で読み取られた実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部２と、削除可能領域検出部２において検出された実行バイナリプログラムの削除可能領域を、特定のデータに書き換えて実行バイナリプログラムを再構成する実行バイナリ書き換え部３と、実行バイナリ書き換え部３から受け取った少なくとも一つの実行バイナリプログラムをコンピュータ上で認識し実行できる形式に変換する実行バイナリイメージ作成部４とを備えて構成される。
【００２６】
なお、本明細書における実行バイナリプログラムは、バイナリ形式の実行コード及び実行データを含む。また、本実施の形態において、実行バイナリ読み取り部１が実行バイナリ読み取り部の一例に相当し、削除可能領域検出部２が削除可能領域検出部の一例に相当し、実行バイナリ書き換え部３が実行バイナリ書き換え部の一例に相当し、実行バイナリイメージ作成部４が実行バイナリイメージ変換部の一例に相当する。さらに、本実施の形態において、実行バイナリイメージ作成プログラムが例えばＲＯＭ（リードオンリメモリ）に記憶されており、実行バイナリイメージ作成プログラムが実行バイナリ読み取り部１、削除可能領域検出部２、実行バイナリ書き換え部３及び実行バイナリイメージ作成部４としてＣＰＵ（中央演算処理装置）を機能させる。
【００２７】
以上のように構成された実行バイナリイメージ作成装置について、その構成の詳細と動作とを以下に述べる。まず、実行バイナリ読み取り部１は、コンピュータ上で動作する実行バイナリプログラム、すなわち実行形式のファイルを入力とする。まず、この実行バイナリプログラムの形式に関して以下に説明する。
【００２８】
現在、種々の実行形式が存在する。例えば、ＥＬＦ（Ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  Ｌｉｎｋｉｎｇ  Ｆｏｒｍａｔ）形式、ａ．ｏｕｔ形式、ＣＯＦＦ（Ｃｏｍｍｏｎ  Ｏｂｊｅｃｔ  Ｆｉｌｅ  Ｆｏｒｍａｔ）形式、ＥＣＯＦＦ（Ｅｘｔｅｎｄｅｄ  ＣＯＦＦ）形式、及びＰＥ（Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ）形式などが代表的な実行形式である。これから本実施の形態の説明を容易にするために、Ｕｎｉｘ（登録商標）やＬｉｎｕｘ（登録商標）で使用され、実行形式として代表的なＥＬＦ形式の実行バイナリプログラムを例に挙げて説明を行うが、本実施の形態はＥＬＦ形式の実行バイナリプログラムに限定されるものではなく、他の実行形式に対しても同様に実施することができる。
【００２９】
実行バイナリプログラムの内部構成を、ＥＬＦ形式の構成を例にして図２を用いて説明する。図２は、実行バイナリプログラムの内部構成の一例を示す図である。実行バイナリプログラムの先頭には、実行バイナリプログラム全体の情報を管理するＥＬＦヘッダ１０１が存在する。このＥＬＦヘッダには、アプリケーションプログラムか共有ライブラリかを区別する情報や、後続するプログラムヘッダ１０２やセクションヘッダ１０４へのオフセット情報や、その他実行バイナリプログラム全体に関わる情報が格納されている。
【００３０】
後続するプログラムヘッダ１０２には、複数のセグメントと呼ばれる領域を管理する情報が格納されている。この各セグメントには、１つあるいは複数のセクションが属する構成になっている。そして、実行バイナリプログラムの実データとなるセクション１０３が、役割ごとにセクション１からセクションＮまで複数個存在し、それらの各セクションを管理するためのセクションヘッダ１０４が存在する。
【００３１】
ここで、実行バイナリプログラムの実データとなる代表的な各セクションについて説明する。図３は、実行バイナリプログラムの実データとなる代表的な各セクションについて説明するための図である。図３のセクション名１１１は、各セクションの名称を表している。セクションの概要１１２は、各セクション名１１１に対応する各セクションの働きを説明している。動的ローディングシステムは、プログラムの実行時に初めて、使用する実行バイナリプログラムである共有ライブラリのアドレスを決定するシステムである。そのため、動的ローディングシステムでは、再配置処理、すなわち使用するシンボルのアドレス解決を行う必要がある。この再配置処理や、シンボルのアドレス解決のために、図３に示す複数のセクションが利用される。
【００３２】
例えば、その中でも代表的なセクションを挙げて説明すると、“．ｄｙｎｓｔｒ”セクションは、実行バイナリプログラム中の動的リンクに使用するシンボルの文字列そのものを保持する。“．ｄｙｎｓｙｍ”セクションは、実行バイナリプログラム中の動的リンクに関するシンボル情報を、各シンボルに対して管理していて、“．ｄｙｎｓｔｒ”セクションに存在する文字列を指し、その他のシンボル情報（値やサイズ情報）なども保持している。“．ｒｅｌ”の接頭語から成り立つ一連のセクションは、再配置情報を管理する再配置セクションであり、実行バイナリプログラム中の再配置すべき領域を指し、また再配置の対象となるシンボルを特定するために“．ｄｙｎｓｙｍ”セクションの所定のエントリを指している。また、その他、シンボルを検索するための“．ｈａｓｈ”セクションや、各シンボルのバージョンタイプを示す“．ｇｎｕ．ｖｅｒｓｉｏｎ”系のセクションなどがシンボル情報に関連するセクションである。
【００３３】
なお、ＥＬＦ形式の実行形式を例に挙げて説明したが、他の実行形式でも同様の構成を採用しており、同様の働きを持つセクションから構成されている。
【００３４】
実行バイナリ読み取り部１は、これまでに述べた構成を持つ実行バイナリプログラムが入力されると、実行バイナリプログラムの情報を実行形式に応じて読み取り、その構造を内部で管理する。これにより、実行バイナリプログラムを解析しやすく、あるいは再構成しやすくなる。図４は、実行バイナリ読み取り部１が管理する実行バイナリプログラムの情報の内部管理構造の一例を示す図である。
【００３５】
図４に示す通り、実行バイナリ読み取り部１は、実行バイナリプログラムの中に一つしかないＥＬＦヘッダやプログラムヘッダの情報を各々読み取って、実行バイナリプログラム全体に関わる情報を管理する。また、複数存在するセクションに対しては、実行バイナリ読み取り部１は、セクションごとに生成するセクション管理構造１２１を利用して各セクションを管理する。このセクション管理構造１２１は、独自セクション管理情報１２２、セクションヘッダ１２３及びセクションデータ管理部１２４で構成される。セクションデータ管理部１２４は、セクションの実データが存在するセクションデータ部１２５を管理する。独自セクション管理情報１２２は、セクションデータ管理部１２４及びセクションデータ部１２５とセクションヘッダ１２３とを含めてセクションに関わる情報を管理する。
【００３６】
なお、ここで挙げた実行バイナリプログラムの内部管理構造は、あくまで一例に過ぎず、実行バイナリプログラム全体に関わる情報や、各セクションを管理できる構造であれば他の構造でもかまわない。
【００３７】
実行バイナリ読み取り部１は、実行バイナリプログラムが入力されると実行バイナリプログラムの内部の構成情報を読み取り、図４に例示するように実行バイナリプログラムの内部情報の内部管理構造を構築して削除可能領域検出部２に渡す。この内部管理構造によって、削除可能領域検出部２は、各セクションの情報を取得し解析することが可能になる。
【００３８】
削除可能領域検出部２は、実行バイナリ読み取り部１から実行バイナリプログラムの内部の構成情報（内部管理構造）を受け取り、シンボルのアドレス解決に利用される再配置情報やシンボル情報を解析し、それらのうち削除可能な領域を検出して、実行バイナリプログラムの内部の構成情報とともに削除可能と検出した情報を、実行バイナリ書き換え部３に渡す。
【００３９】
通常、一般的な動的ローディングシステムにおいて、実行バイナリプログラムの実行時に初めて、そのプログラム本体や使用する共有ライブラリのアドレスを決定し、シンボルのアドレス解決を行う。シンボルのアドレス解決を行う際に、再配置情報やシンボル情報を利用するため、通常それらの情報を削除すると、プログラムとして動作しなくなる恐れがある。
【００４０】
図５を用いて、シンボルのアドレス解決の処理の流れを説明する。図５は、シンボルのアドレス解決の処理の流れを説明するための模式図である。あるプログラムＡが共有ライブラリＡに存在するｌｉｂａ＿ｆｕｎｃ関数１３４を呼ぶ場合、プログラムＡが実行されるまで共有ライブラリＡのアドレス空間上の位置は不定である。プログラムＡが実行されて、共有ライブラリＡの位置が決定されると、初めてｌｉｂａ＿ｆｕｎｃ関数１３４の位置が決定される。そこで、プログラムＡの中でｌｉｂａ＿ｆｕｎｃ関数を呼んでいる領域１３１が、プログラムＡの再配置情報やシンボル情報１３２により特定され、さらに共有ライブラリＡの中にあるｌｉｂａ＿ｆｕｎｃ関数の位置が、共有ライブラリＡの再配置情報やシンボル情報１３３によって決定される。そして、プログラムＡから正しくｌｉｂａ＿ｆｕｎｃ関数にジャンプできるように設定される。
【００４１】
上記のようにシンボルのアドレスが未解決の実行バイナリプログラムでは、再配置情報やシンボル情報をプログラムの実行時に使用する可能性がある。しかし、本実施の形態の実行バイナリ読み取り部１では、すでにシンボルのアドレス解決を実施済みの実行バイナリプログラムを入力とすることができる。
【００４２】
また、実行バイナリ読み取り部１は、実行バイナリプログラムが入力された時に、その実行バイナリプログラムがすでにアドレス解決済みであるか否かを確認し、アドレス解決済みであるか否かを表すアドレス解決情報を削除可能領域検出部２に渡す。削除可能領域検出部２は、実行バイナリ読み取り部１によって読み取られたアドレス解決情報がアドレス解決済みであるか否かを判定し、実行バイナリプログラムがアドレス解決済みでないと判定された場合、その実行バイナリプログラムの再配置情報やシンボル情報を削除可能領域として検出しない。
【００４３】
そのような実行バイナリプログラムの関数呼び出しの例について説明する。図６は、アドレス解決済みである実行バイナリプログラムの関数呼び出しについて説明するための模式図である。図６のプログラムＢでは、元々共有ライブラリＢのｌｉｂｂ＿ｆｕｎｃ関数１４４を呼ぶ領域１４１がある。しかしながら、プログラムＢや共有ライブラリＢを実行する前に、あらかじめ共有ライブラリＢのアドレス空間上の位置が決定している。そのため、プログラムＢの関数呼び出し領域１４１には、実行する前にｌｉｂｂ＿ｆｕｎｃ関数にジャンプするためのアドレス（図６では“０ｘ？？？？？？？？”）が直接書かれている。したがって、この場合、図５においてアドレス解決のために利用していたプログラムＢの再配置情報やシンボル情報１４２、及び共有ライブラリＢの再配置情報やシンボル情報１４３を使用することはない。
【００４４】
したがって、実行バイナリ読み取り部１にシンボルのアドレス解決を実施済みの実行バイナリプログラムが入力され、削除可能領域検出部２がシンボルのアドレス解決に必要な再配置情報やシンボル情報の一部を削除可能な領域として検出して、実行バイナリ書き換え部３に渡しても、実行バイナリ書き換え部３は正常に動作する実行バイナリプログラムを出力する。
【００４５】
なお、本実施の形態では、関数呼び出しに関して例を挙げて説明したが、変数参照のためのアドレス解決やその他のアドレス解決なども関数呼出しと同様の仕組みによって実施される。
【００４６】
シンボルのアドレス解決を実施済みの実行バイナリプログラムは、元々動的ローディングシステム用に作成された実行バイナリプログラムを利用して作成することが可能である。シンボルのアドレス解決が実施済みの実行バイナリプログラムを作るための方法の一例を以下に示す。
【００４７】
まず、全ての共有ライブラリのアドレス空間を重複しないようにあらかじめ定める必要がある。なぜなら、共有ライブラリは複数のアプリケーションプログラムや別の共有ライブラリから参照される可能性があり、共有ライブラリのアドレス空間上の位置はシステム全体で一意に定める必要があるためである。もし、複数の共有ライブラリのアドレス空間が重複すると、それらを利用するアプリケーションプログラムが特定のアドレス空間を指した時に、いずれの共有ライブラリを指しているのか判別できなくなり、共有ライブラリのアドレスの再配置が必要になる。
【００４８】
もちろん、全てのアプリケーションプログラムが特定のアドレス空間を指した時に、共有ライブラリが一意に特定できるのであれば、一部の共有ライブラリのアドレス空間が重複していてもかまわない。
【００４９】
また、全ての共有ライブラリのアドレス空間を重複しないようにするだけではなく、全てのアプリケーションプログラムのアドレス空間を重複しないように設定しても良いし、逆にアプリケーションプログラムのアドレス空間は重複するように設定してもかまわない。
【００５０】
全ての共有ライブラリのアドレス空間が設定されると、共有ライブラリの持つシンボルなどのアドレスが全て決まるので、全ての実行バイナリプログラム（アプリケーションプログラムと共有ライブラリ）のシンボルのアドレス解決を事前に行うことができる。
【００５１】
実施方法の一例を挙げると、アプリケーションプログラムをアドレス空間上にロードし、さらにそのアプリケーションプログラムが使用する共有ライブラリもアドレス空間上にロードする。そして、実際にアプリケーションプログラムの持つ再配置情報やシンボル情報、及びロードしている共有ライブラリの再配置情報やシンボル情報を利用して、事前に設定したアドレス通りにシンボルのアドレス解決を行う。アドレス解決を行った結果を実行バイナリプログラムの情報に書き戻せばよい。これを全てのアプリケーションプログラムに対して実施し、アドレス解決を行った結果を全ての実行バイナリプログラムの情報に書き戻せばよい。上記方法により、図６に示すようなシンボルのアドレス解決を実施済みの実行バイナリプログラムを得ることができる。
【００５２】
削除可能領域検出部２は、実行バイナリ読み取り部１から実行バイナリプログラムの内部構成情報を取得し、まず再配置情報やシンボル情報を解析し、削除可能かどうかの判定条件に照らし合わせて削除可能領域を検出する。
【００５３】
削除可能かどうかの判定は、基本的にシンボルのアドレス解決に使用される再配置情報やシンボル情報であるかどうかに基づいて行われる。再配置情報であり、“．ｒｅｌ”の接頭語から始まるセクションである“．ｒｅｌ”系セクションと、シンボル情報を管理する“．ｄｙｎｓｙｍ”セクションと、シンボル名となる文字列を持つ“．ｄｙｎｓｔｒ”セクションとの関係の例を図７に示して、削除可能かどうかの判定条件に関して説明する。図７は、“．ｒｅｌ”系セクションと“．ｄｙｎｓｙｍ”セクションと“．ｄｙｎｓｔｒ”セクションとの関係を示す図である。
【００５４】
図７の例では、“．ｒｅｌ”系セクションに３つのエントリ１５１が存在し、それぞれ別々の“．ｄｙｎｓｙｍ”セクションのエントリを指している。また、“．ｄｙｎｓｙｍ”セクションのエントリは、シンボルの文字列を特定するために“．ｄｙｎｓｔｒ”セクションの文字列を指している。
【００５５】
図７の例では、“．ｒｅｌ”系セクションのエントリ１５２は、“．ｄｙｎｓｙｍ”セクションのエントリ１５３を指し、“．ｄｙｎｓｙｍ”セクションのエントリ１５３は、“．ｄｙｎｓｔｒ”セクションの文字列“ＸＹＺ”を指している。
【００５６】
削除可能領域検出部２は、シンボルのアドレス解決に使用される再配置情報である“．ｒｅｌ”系セクションの全てのエントリを削除可能領域として検出する。また、その“．ｒｅｌ”系セクションからたどることが可能な“．ｄｙｎｓｙｍ”セクションの全てのエントリも削除可能領域として検出する。さらに、削除可能と検出された“．ｄｙｎｓｙｍ”セクションが指している“．ｄｙｎｓｔｒ”セクションの文字列を削除可能領域として検出する。
【００５７】
図７の例では、３つのエントリからなる“．ｒｅｌ”系セクション１５１と、そこから指されている“．ｄｙｎｓｙｍ”セクションの３つのエントリ１５３，１５４，１５５と、そこから指されている“．ｄｙｎｓｔｒ”セクションの３つの文字列“ＡＢＣ”，“ＸＹＺ”，“ＤＥＦ”とが削除可能領域として検出される。
【００５８】
削除可能領域検出部２は、上記の通り“．ｒｅｌ”系セクションからたどって“．ｄｙｎｓｔｒ”セクションの文字列を参照し、その文字列がアルファベット以外から始まる文字列であった場合に、その文字列とその文字列を指していたセクションを削除可能領域と見なさないという判定条件を備えることも可能である。これは、アンダースコア“＿”のようにアルファベット以外から始まる文字列は内部生成用のものであり、シンボルのアドレス解決と関係ない可能性があるからである。文字列の削除可能領域の検出に関するこの削除対象外とする基準は、今後同様に文字列の削除を考える時に実施することが可能である。
【００５９】
また、削除可能領域検出部２は、さらに上記再配置情報である“．ｒｅｌ”系セクションからたどって得られたシンボル情報だけではなく、“．ｒｅｌ”系セクションからは指されず“．ｄｙｎｓｙｍ”セクションから直接指される“．ｄｙｎｓｔｒ”セクションの文字列と、それを指している“．ｄｙｎｓｙｍ”セクションのエントリとを削除可能領域として検出する判定条件を備えることも可能である。
【００６０】
この場合、“．ｄｙｎｓｙｍ”セクションのエントリには、実行バイナリプログラム自身が持つ関数を、外部の別の実行バイナリプログラムが使用できるようにエクスポートしているシンボルが登録されている。このシンボルは、別の実行バイナリプログラムからシンボルのアドレス解決の際に検索される対象となる。したがって、アドレス解決のためのシンボル情報として上記の通り“．ｄｙｎｓｙｍ”セクションから直接指される文字列と、その“．ｄｙｎｓｙｍ”セクションを削除可能と見なすことができる。
【００６１】
ただし、“．ｄｙｎｓｙｍ”セクションには、実行バイナリプログラムに固有でアドレス解決とは無関係のシンボル情報も存在する。したがって、“．ｄｙｎｓｙｍ”セクションから直接指される文字列と、その“．ｄｙｎｓｙｍ”セクションを削除可能領域とする判定条件を用いる際には、アドレス解決とは無関係のシンボル情報を削除対象外とすればよい。例えば、シンボルのタイプ属性が“ＮＯＴＹＰＥ”のものを削除対象外とする方法が考えられる。また、シンボルのタイプ属性がデータオブジェクトあるいはコードオブジェクトのシンボル情報のみを削除可能領域として検出してもよい。
【００６２】
その他にも例えば、グローバルスコープのシンボルであること、あるいは関連セクションが“．ｔｅｘｔ”、“．ｒｏｄａｔａ”、“．ｄａｔａ”及び“．ｂｓｓ”のいずれかのセクションであることなどを削除可能であることの判定条件にしてもよい。
【００６３】
また、削除可能領域検出部２は、上記に述べてきた通りシンボル情報が削除可能領域かどうかの判定を容易にするために、実行バイナリプログラムのシンボル情報を解析し管理することもできる。
【００６４】
シンボル情報を削除するためには、１つのシンボルに対する情報を管理すると、シンボルの削除可能かどうかの判定やシンボル情報に対する操作を管理しやすくなる。また、このシンボル情報の内部管理構造がある場合、実行バイナリ書き換え部３は、実行バイナリプログラムを書き換えて容易に再構成することができる。
【００６５】
図８は、シンボル情報の内部管理構造の一例を示す図である。図８に示すシンボル情報の内部管理構造は、あるシンボルに対するシンボル情報を管理するものであり、次のシンボル情報の内部管理構造へのポインタ１６６を持ち、各シンボル情報の内部管理構造をリンク構造でつないでたどることができる。
【００６６】
図８のシンボル情報の内部管理構造には、シンボル削除可能かどうかの可否情報１６１がある。シンボル情報が削除可能かどうかの判定条件にしたがって、管理するシンボル情報が削除可能かどうかの可否情報１６１を更新し管理することができる。
【００６７】
また、シンボル情報の内部管理構造には、何のシンボルに関して管理しているかを判別するために、シンボル文字列へのポインタ１６２がある。そして、シンボルを参照しているセクションに関する情報１６３及びそのセクションのセクション内における位置情報１６４を備える。これらの情報により、今管理しているシンボルがどのセクションから参照されているか、またセクションのどの位置から参照されているかを管理することができる。
【００６８】
このシンボル情報の内部管理構造には、さらに、文字列を他のシンボルと共用していることを判断するための情報を備えることができる。これは、複数のシンボルが、実行バイナリプログラムの“．ｄｙｎｓｔｒ”セクションにある文字列を共用する可能性があるためである。図９は、実行バイナリプログラムの複数のシンボルが文字列を共用する場合の動作を説明するための模式図である。
【００６９】
図９では、実行バイナリプログラムのシンボルの文字列そのものを保持する“．ｄｙｎｓｔｒ”セクションに、“ｕｎｓｅｔｅｎｖ”という文字列が存在する。そして、この実行バイナリプログラムには、“ｓｅｔｅｎｖ”というシンボル１７２及び“ｕｎｓｅｔｅｎｖ”というシンボル１７３が存在する。この場合、“ｓｅｔｅｎｖ”というシンボル１７２は、“ｕｎｓｅｔｅｎｖ”というシンボル１７３の末尾部分の文字列と一致する。このように、実行バイナリプログラムでシンボルの文字列を共用する場合がある。
【００７０】
文字列を共用する場合、図９に示す通り“ｕｎｓｅｔｅｎｖ”というシンボル１７３は、通常通り実行バイナリプログラムのシンボルの文字列“ｕｎｓｅｔｅｎｖ”の先頭１７１を指すが、“ｓｅｔｅｎｖ”というシンボル１７２はシンボルの文字列“ｕｎｓｅｔｅｎｖ”のうちの“ｓｅｔｅｎｖ”の先頭１７４を指す。
【００７１】
以上のように、複数のシンボルが実行バイナリプログラムにある文字列を共用する場合、一方のシンボルのみが削除可能と判定できても、他方のシンボルが削除可能と判定されていなければ、実行バイナリプログラムにあるシンボルの文字列及び関連するシンボル情報は削除できない。例えば、図９の例では、“ｕｎｓｅｔｅｎｖ”というシンボル１７３が削除可能と判定されても、実行バイナリプログラムのシンボルの文字列“ｕｎｓｅｔｅｎｖ”を削除してしまうと、文字列を共用しているシンボル“ｓｅｔｅｎｖ”の指すべき文字列がなくなるという問題が起こる。
【００７２】
上記問題を解決するために、シンボル情報の内部管理構造は、文字列を他のシンボルと共用していることを判断するための共用情報１６５を持つ。例えば、その文字列を共用しているシンボルの数を記録しても良いし、文字列の先頭から指しているか途中から指しているかを管理してもよい。削除可能領域検出部２は、削除可能であるかどうかを判定する際に、シンボル情報の内部管理構造にあるこの文字列の共用情報１６５を参照し、文字列を共用している全てのシンボルに対して削除可能であると判定した時に、それらのシンボル情報を削除可能として検出する。その他にも、共用している文字列全体のうち一部の部分文字列に関して削除可能であると判定した時に、その部分の文字列とそれに関するシンボル情報とを削除可能領域として検出することも可能である。
【００７３】
ここで、削除可能領域検出部２が、実行バイナリ読み取り部１から実行バイナリプログラムの内部の構成情報を受け取って、シンボル情報の内部管理構造を作成する処理について説明する。図１０及び図１１は、シンボル情報の内部管理構造を作成する処理手順の一例を示すフローチャートである。
【００７４】
まず、削除可能領域検出部２は、実行バイナリ読み取り部１から実行バイナリプログラムの構成情報を取得する（ステップＳ１）。そして、削除可能領域検出部２は、“．ｄｙｎｓｔｒ”セクションを解析し文字列単位でシンボル情報の内部管理構造を作成する（ステップＳ２）。これにより、実行バイナリプログラムが保持する文字列一つ一つに対するシンボル情報の内部管理構造が作成される。
【００７５】
そして、次に削除可能領域検出部２は、シンボル情報の内部管理構造によってシンボルを参照するセクション情報を管理するために、各セクションからアクセスするシンボル名との照合を行う。
【００７６】
まず、削除可能領域検出部２は、“．ｄｙｎｓｙｍ”セクションを解析し、得られたシンボル名をシンボル情報の内部管理構造の中で検索する（ステップＳ３）。そして、削除可能領域検出部２は、“．ｄｙｎｓｙｍ”セクションからアクセスするシンボル名と完全一致する文字列がシンボル情報の内部管理構造の中にあるかどうかを判定する（ステップＳ４）。シンボル名と完全一致する文字列が存在する場合（ステップＳ４でＹＥＳ）、削除可能領域検出部２は、シンボル情報を削除できるようにするため、一致した文字列を管理するシンボル情報の内部管理構造に、“．ｄｙｎｓｙｍ”セクションからの参照があることを表す参照情報及び参照元の位置を表す位置情報を記録する（ステップＳ５）。
【００７７】
一方、シンボル名と完全一致する文字列が存在せず部分一致する場合（ステップＳ４でＮＯ）、このシンボルは他のシンボルと文字列を共用していると見なすことができる。そこで、削除可能領域検出部２は、文字列に部分一致するシンボルのために新規に内部管理構造を作成する（ステップＳ６）。そして、削除可能領域検出部２は、部分一致したシンボルの双方の内部管理構造に“．ｄｙｎｓｙｍ”セクションからの参照情報及び参照位置とともに共用に関する情報を記録する（ステップＳ７）。
【００７８】
なお、削除可能領域検出部２は、“．ｒｅｌ”系セクションに対しても、“．ｄｙｎｓｙｍ”セクションに対して行ったステップＳ４からステップＳ７の処理と同様の処理を行う。すなわち、削除可能領域検出部２は、まず“．ｒｅｌ”系セクションを解析し、得られたシンボル名をシンボル情報の内部管理構造の中で検索する（ステップＳ８）。
【００７９】
そして、削除可能領域検出部２は、“．ｒｅｌ”系セクションから“．ｄｙｎｓｙｍ”セクション経由でアクセスするシンボル名と完全一致する文字列がシンボル情報の内部管理構造の中にあるかどうかを判定する（ステップＳ９）。シンボル名と完全一致する文字列が存在する場合（ステップＳ９でＹＥＳ）、削除可能領域検出部２は、シンボル情報を削除できるようにするため、一致した文字列を管理するシンボル情報の内部管理構造に、“．ｒｅｌ”系セクションからの参照があることを表す参照情報及び参照元の位置を表す位置情報を記録する（ステップＳ１０）。必要であれば、削除可能領域検出部２は、アクセスの際に経由した“．ｄｙｎｓｙｍ”セクションの情報も記録する。
【００８０】
一方、シンボル名と完全一致する文字列が存在せず部分一致する場合（ステップＳ９でＮＯ）、このシンボルは他のシンボルと文字列を共用していると見なすことができる。そこで、削除可能領域検出部２は、文字列に部分一致するシンボルのために新規に内部管理構造を作成する（ステップＳ１１）。そして、削除可能領域検出部２は、部分一致したシンボルの双方の内部管理構造に“．ｒｅｌ”系セクションからの参照情報及び参照位置とともに共用に関する情報を記録する（ステップＳ１２）。必要であれば、削除可能領域検出部２は、アクセスの際に経由する“．ｄｙｎｓｙｍ”セクションに関する情報も記録する。
【００８１】
最後に、削除可能領域検出部２は、削除可能かどうかの判定条件にしたがって削除可能かどうかの可否情報を、シンボル情報の内部管理構造に記録する（ステップＳ１３）。
【００８２】
なお、削除可能かどうかの判定条件によっては、図１０に示す“．ｄｙｎｓｙｍ”セクションに関するステップＳ３からステップＳ７までの一連の処理、あるいは図１１に示す“．ｒｅｌ”系セクションに関するステップＳ８からステップＳ１２までの一連の処理のどちらか一方の処理のみでもかまわない。
【００８３】
例えば、削除可能かどうかの判定条件が、“．ｒｅｌ”系セクションからたどれるシンボル情報であり、かつ共有しているシンボル全てが削除できる場合という条件であれば、図１０の処理のうち“．ｄｙｎｓｙｍ”セクションに関するステップＳ３からステップＳ７までの一連の処理を行わなくてよい。また、逆に他のセクションに関して、図１０の“．ｄｙｎｓｙｍ”セクションに関するステップＳ３からステップＳ７までの一連の処理と同様の処理を、図１１に示すステップＳ１３の処理の前に追加することも可能である。
【００８４】
すなわち、プログラムの実行時にシンボルにアクセスする他のセクションに関して、同様の一連の処理を追加して、そのセクションからの参照情報をシンボル情報の内部管理構造に記録しておくことが有効となる。なぜなら、そのようなセクションは、シンボルのアドレス解決とは関係なくプログラムの実行時にシンボル情報にアクセスする。そのため、そのシンボル情報が例えば“．ｒｅｌ”系セクションから参照されているという理由のみで削除すると、プログラムの実行時にシンボルが存在しないため動作しなくなる恐れがある。具体的にそのようなセクションの例を挙げると、種々の動的リンク情報を管理している“．ｄｙｎａｍｉｃ”セクションや、シンボルのバージョンを管理する“．ｇｎｕ．ｖｅｒｓｉｏｎ”系セクションや、ライブラリ情報を保持する“．ｇｎｕ．ｌｉｂｌｉｓｔ”セクションなどがある。
【００８５】
削除可能領域検出部２は、削除可能かどうかの判定条件として、上記のようなセクションからの参照があるシンボル情報を削除対象外とする条件を採用することができ、より精密なシンボル情報の削除を行うことができる。
【００８６】
削除可能領域検出部２は、削除可能かどうかの判定条件として、さらに他の実行バイナリプログラムからの参照があるシンボル情報を削除対象外とすることもできる。例えば、事前にシンボル情報を使用する実行バイナリプログラムのリストがあり、実行バイナリ読み取り部１は、そのリストの実行バイナリプログラムを読み取る。削除可能領域検出部２は、その実行バイナリプログラムのシンボル情報を受け取って解析し、参照する他の実行バイナリプログラムのシンボル情報を検出して、削除対象外とする。
【００８７】
削除可能領域検出部２は、以上に述べた種々の判定条件を用いることができ、設定された判定条件を満たしたシンボル情報の内部管理構造に、シンボル削除可能であることを記録し、そのシンボル情報の内部管理構造を実行バイナリ書き換え部３に渡す。
【００８８】
なお、削除可能領域検出部２で実行バイナリプログラムのシンボル情報の解析を容易にするために上記のシンボル情報の内部管理構造を説明したが、再配置情報やシンボル情報をたどって解析できればよく、その他の方法を採用しても本発明の実施に問題はない。
【００８９】
実行バイナリ書き換え部３は、これまでに解析した実行バイナリプログラムの情報と、削除可能領域として検出した情報とを削除可能領域検出部２から取得する。実行バイナリ書き換え部３は、削除可能領域の情報として、例えばこれまでに説明したシンボル情報の内部管理構造と、そこに記録されている削除可能かどうかの可否情報とを受け取る。
【００９０】
実行バイナリ書き換え部３は、受け取った実行バイナリプログラムの情報と削除可能領域の情報とに基づいて、削除可能な再配置情報やシンボル情報を特定できる。例えば、実行バイナリ書き換え部３は、実行バイナリプログラムの各セクション及び各セクション内の削除可能領域であるシンボル情報の内部管理構造を１要素ずつ取得して、削除可能かどうかの可否情報を確認する。そのシンボル情報に対して削除可能である情報があれば、シンボル情報の内部管理構造に記録されている参照セクションの情報やシンボル文字列へのポインタをたどって、実行バイナリプログラムの中で削除すべき領域を特定できる。それをシンボル情報の内部管理構造の全ての要素に対して行えば、１つの実行バイナリプログラムに対する削除可能領域を全て特定できる。
【００９１】
しかし、実行バイナリプログラムの中で削除可能領域の実データそのものを削除してしまうと、実行バイナリプログラムの内部構成が変化して、実行バイナリプログラムのコード本体であるテキスト情報やデータ情報の配置アドレスが変化する可能性がある。ある実行バイナリプログラムのテキスト情報やデータ情報は、別の複数の実行バイナリプログラムから参照されている可能性がある。したがって、全ての実行バイナリプログラムの中で、配置アドレスの変化が生じた実行バイナリプログラムを参照する領域を検出し、変化した分だけ参照するアドレスを補正する必要が生じる。この補正がないと実行バイナリプログラムはプログラムとして動作しない。しかし、実行バイナリプログラムのコードの中から、別の実行バイナリプログラムの特定のアドレスを参照しているかどうかを検出することは非常に困難であるという問題があった。
【００９２】
そのような配置アドレスの変化が好ましくないセクションを例に挙げると、セクション属性が“ＰＲＯＧＢＩＴＳ”であるセクション、あるいはそのような情報がなければ、実行バイナリプログラムの実データを形成する“．ｐｌｔ”、“．ｔｅｘｔ”、“．ｆｉｎｉ”、“．ｒｏｄａｔａ”、“．ｄａｔａ”、“．ｃｔｏｒｓ”、“．ｄｔｏｒｓ”、“．ｇｏｔ”及び“．ｂｓｓ”などのセクションが代表的なものである。
【００９３】
上記問題に対処するため、実行バイナリ書き換え部３は、削除可能領域として検出された再配置情報及びシンボル情報に対して、実データそのものを削除するのではなく、特定データに書き換える。
【００９４】
例えば、実行バイナリ書き換え部３は、削除可能と検出されているシンボル情報の内部管理構造を取得して、そこから参照するセクション、参照元を示す位置及びシンボル文字列の位置を取得できれば、実行バイナリプログラム中のその領域を特定データで書き換える。ここで、特定データは、ある同一のデータ、例えば０あるいは０ｘＦＦなどでよい。また、特定データは、ある一定の規則に基づくデータでもかまわない。
【００９５】
実行バイナリ書き換え部３が、実行バイナリプログラムの中の実データそのものを削除するのではなく、特定データに書き換えることにより、実行バイナリプログラムのテキスト情報やデータ情報の配置アドレスが変化しなくなり、上記問題を回避できる。
【００９６】
また、最終的に実行バイナリイメージ作成部４は、実行バイナリ書き換え部３によって書き換えられた実行バイナリプログラムを機器やシステム上で認識可能な実行バイナリイメージに変換する。この実行バイナリイメージを、圧縮技術を用いて作成すれば、特定データ例えば同一データで書き換えられた領域は、他のデータと比較して一般的に圧縮率が高くなるので、実行バイナリイメージのデータサイズを削減することができる。
【００９７】
また、実行バイナリ書き換え部３は、実行バイナリプログラムの削除可能領域を特定データで書き換えて、実行バイナリ読み取り部１で読み取った実行バイナリプログラムの内部構成であるＥＬＦヘッダやプログラムヘッダや各セクション構造を構成し直して、実行バイナリプログラムの形式で出力する。
【００９８】
一つ一つの実行バイナリプログラムが、実行バイナリ読み取り部１に入力されて、再配置情報及びシンボル情報が削除可能な状態になって、実行バイナリ書き換え部３から出力される。次に、実行バイナリイメージ作成部４は、これらの実行バイナリプログラムを、機器やシステム上で動作できる状態にするために実行バイナリイメージを作成する。例えば、ファイルシステムなどが導入され、そのファイルシステム用の実行バイナリイメージが作成される。
【００９９】
この実行バイナリイメージを作成するにあたって、圧縮技術を用いれば、上述した通り、特定データに書き換えた領域の圧縮率が高まり、実行バイナリイメージのデータサイズを削減することができる。例えば、実行バイナリプログラムを圧縮することができるファイルシステムを導入することが考えられる。ファイルシステムについては、ＦＡＴ（Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ）、ＶＦＡＴ（Ｖｉｒｔｕａｌ  ＦＡＴ）、ＦＡＴ３２、ＮＴＦＳ（ＮＴ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）、ＨＦＳ（Ｈｉｇｈ−ｐｅｒｆｏｒｍａｎｃｅ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）、ｅｘｔ２、ｅｘｔ３、ＲｅｉｓｅｒＦＳ、ＪＦＳ（Ｊｏｕｒｎａｌｉｎｇ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）、ＸＦＳ、ＪＦＦＳ（Ｊｏｕｒｎａｌｉｎｇ  Ｆｌａｓｈ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）２、ＣＲＡＭＦＳなどが使用できる。その他、独自の圧縮技術、あるいは独自のファイルシステムを使用してもかまわない。
【０１００】
これまで実行バイナリ書き換え部３が、実行バイナリプログラムの削除可能領域を特定データに書き換える方式を説明してきたが、それだけではなく、さらに実行バイナリプログラムの削除可能領域、すなわち特定データに書き換える領域をセクション内で集約することも可能である。特定データへの書き換え領域を集約することにより、圧縮技術によってより高い圧縮率による実行バイナリイメージのサイズ削減の効果が得られる。書き換え領域を集約する例について、図１２及び図１３の例を用いて説明する。
【０１０１】
図１２は、実行バイナリ書き換え部３が特定データに書き換える領域を集約しない場合の動作を説明するための模式図である。図１３は、実行バイナリ書き換え部３が特定データに書き換える領域を集約する場合の動作を説明するための模式図である。
【０１０２】
図１２において、“．ｒｅｌ”系セクションの３つのエントリ１８１は、それぞれ“．ｄｙｎｓｙｍ”セクションの３つのエントリ１８２，１８３，１８４に対応付けられている。“．ｄｙｎｓｙｍ”セクションのエントリ１８２は、“．ｄｙｎｓｔｒ”セクションの文字列“ＸＹＺ”を指しており、エントリ１８３は文字列“ＡＢＣ”を指しており、エントリ１８４は文字列“ＤＥＦ”を指している。図１２において、実行バイナリ書き換え部３は、シンボル情報が削除可能であることを表す可否情報にしたがって、“．ｄｙｎｓｙｍ”セクションのエントリ１８２，１８３，１８４、及び“．ｄｙｎｓｔｒ”セクションの３つの文字列を特定データに書き換えることになる。この場合、特定データは、“．ｄｙｎｓｙｍ”セクション及び“．ｄｙｎｓｔｒ”セクションの中で複数領域に分散してしまう。
【０１０３】
そこで、図１３に示すように、実行バイナリ書き換え部３は、特定データに書き換える“．ｄｙｎｓｙｍ”セクションの３つのエントリ１８５，１８６，１８７を一箇所に集約する。また、実行バイナリ書き換え部３は、“．ｄｙｎｓｔｒ”セクションの３つの文字列も一箇所に集約する。なお、図１３の例では、書き換える領域を各セクションの末尾に集約しているが、一箇所に集約するのであれば、セクション内のどの位置でもかまわない。また、特定データへの書き換えと、書き換え領域の集約との処理順序は問わない。
【０１０４】
実行バイナリ書き換え部３が、特定データに書き換える領域を一箇所に集約することによって、セクション内の残りのデータも位置が変化する可能性がある。そこで実行バイナリ書き換え部３は、残りのデータの位置が変化すると、それに関連するセクションの参照先を補正する。
【０１０５】
まず、“．ｄｙｎｓｔｒ”セクション内の書き換え領域を集約する場合、実行バイナリプログラムの残りの文字列の位置が変化することに伴って、その文字列を参照するセクションの各エントリの位置を補正する。これは、削除可能領域検出部２から取得したシンボル情報の内部管理構造から、そのシンボル文字列を参照するセクションの情報を取得して、それぞれのセクションの位置を変更すればよい。
【０１０６】
例えば、“．ｄｙｎｓｔｒ”セクションの書き換え領域が集約されて文字列の位置が変更されると、実行バイナリ書き換え部３は、文字列を参照している“．ｄｙｎｓｙｍ”セクションや“．ｒｅｌ”系セクションの各エントリの位置を補正する。また、実行バイナリ書き換え部３は、その他、動的リンク情報を管理している“．ｄｙｎａｍｉｃ”セクション、シンボルのバージョンを管理している“．ｇｎｕ．ｖｅｒｓｉｏｎ”系セクション、ライブラリ情報を保持する“．ｇｎｕ．ｌｉｂｌｉｓｔ”セクション、及びシンボル文字列を検索するためのハッシュ構造を管理する“．ｈａｓｈ”セクションなどにおいて、文字列を参照している領域の位置を補正する。
【０１０７】
実行バイナリ書き換え部３は、さらに実行バイナリプログラムの削除可能領域、すなわち特定データに書き換える領域をセクション内だけではなく、実行バイナリプログラム全体で集約することも可能である。特定データへの書き換え領域を実行バイナリプログラム全体で集約することにより、セクション単位で集約するよりもさらに大きく集約することができる。さらに、書き換え領域が実行バイナリプログラム全体で集約された実行バイナリイメージを圧縮した場合、セクション単位で集約された実行バイナリイメージを圧縮するよりも、実行バイナリイメージのデータサイズをより削減することができる。ここで、書き換え領域を実行バイナリプログラム全体で集約する例を、図１４を用いて説明する。
【０１０８】
図１４は、実行バイナリ書き換え部が特定データに書き換える領域を実行バイナリプログラム全体で集約する場合の動作を説明するための模式図である。図１４では、例として“．ｄｙｎｓｙｍ”セクションと“．ｄｙｎｓｔｒ”セクションと“．ｇｎｕ．ｖｅｒｓｉｏｎ”系セクションとを、削除可能領域を特定データに書き換えるセクションとして挙げている。この３つのセクションの中で、実行バイナリ書き換え部３が特定データに書き換える部分をそれぞれ領域１９１，１９２，１９３とすると、それらを実行バイナリプログラム全体で集約すると領域１９４に集約される。ただし、この時実行バイナリプログラムの中にあるテキスト情報やデータ情報に関しては、配置アドレスを変化させない。
【０１０９】
実行バイナリプログラム全体で特定データの書き換え部分を集約する方法としては、例えば、直前のセクションの末尾（セクションの特定データではない部分の末尾）に続いて次のセクションを配置するように、対象セクションの位置を補正し、その際セクションの移動によって上書きされた特定データの部分（削除可能領域）を、移動後のセクションの末尾に特定データのデータサイズ分まとめて書き出せばよい。実行バイナリ書き換え部３は、この動作を全てのセクションに対して行えばよい。セクションの位置の補正は、例えばセクションヘッダ等にあるセクションの位置情報を変更すればよい。なお、ここに挙げた方法は一例であり、特定データを実行バイナリプログラム全体で集約する図１４に示す動作が実現できれば他の方法でもかまわない。
【０１１０】
実行バイナリ書き換え部３が実行バイナリプログラム全体で書き換え領域を集約する場合、各セクションの位置が変化する可能性がある。そこで、実行バイナリ書き換え部３は、セクションの位置の変化にしたがって、実行バイナリプログラム全体の情報を補正する必要がある。
【０１１１】
例えば、セクションヘッダにはセクションの配置アドレスとオフセットとが存在するので、実行バイナリ書き換え部３は、セクションの位置の変化にしたがって、それらを補正する必要がある。また、プログラムヘッダもそのプログラムヘッダに属するセクションサイズの合計値を求め、求めた合計値に基づいてプログラムヘッダに含まれるファイルサイズ及びメモリサイズを必要あれば補正する。
【０１１２】
その他にも、実行バイナリ書き換え部３は、削除可能領域検出部２から取得した削除可能領域の情報で、あるセクション全てが削除可能になっている場合、セクションそのものを削除することができる。この場合にも上述した実行バイナリプログラム全体に関して情報を補正する必要があれば行う。また、各セクションには他のセクションを参照することを示す情報があるので、実行バイナリ書き換え部３は、この情報を必要があれば補正する。その他にもＥＬＦヘッダは存在するセクション数を管理しているので、実行バイナリ書き換え部３は、セクション数の情報を補正する必要がある。
【０１１３】
これまで、実行バイナリ書き換え部３が削除可能領域を特定データに書き換えることにより、圧縮率を高めて、実行バイナリイメージのデータサイズを削減する方法を説明してきた。その方法とは別に、実行バイナリイメージ作成部４は、さらに特定データで書き換えられた一定のメモリ領域単位（ページ単位）を、ある実行バイナリプログラムの中で、あるいは全ての実行バイナリプログラムで共用してもよい。この場合、実行バイナリイメージのサイズをより削減することが可能である。この方法に関して、図１５の例を用いて説明する。
【０１１４】
図１５は、特定データに書き換えられたページを全ての実行バイナリプログラムで共用する動作について説明するための模式図である。図１５（Ａ）は、２つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの一例を示す図であり、図１５（Ｂ）は、共用ページを利用した実行バイナリイメージの一例を示す図である。図１５（Ａ）では、実行バイナリプログラムＡと実行バイナリプログラムＢの２つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの例を挙げている。実行バイナリプログラムのファイルデータは、ページ単位で管理されている。そして、実行バイナリプログラムＡ及び実行バイナリプログラムＢともに図１５（Ａ）では“０”で表されている特定データに書き換えられたページ２０１を持つ。通常、実行バイナリイメージは、この“０”で表されたページ２０１を含む所定のサイズのファイルデータ２０２，２０３から成り立つ。
【０１１５】
しかし、本実施の形態における実行バイナリイメージ作成部４は、図１５（Ｂ）に示す通り共用ページを利用した実行バイナリイメージを作成することが可能である。実行バイナリイメージ作成部４は、実行バイナリプログラムのファイルデータをページ単位で管理するためのページ管理情報２０４を作成し、作成したページ管理情報２０４を各実行バイナリプログラムに持たせる。実行バイナリイメージ作成部４は、特定データで書き換えられたページ（図１５（Ａ）で“０”と表されているページ）が、１つの実行バイナリプログラムの複数の領域から共用される一つの共用ページ２０６を指すようにページ管理情報２０４を設定し、また他の実行バイナリプログラムからもページ管理情報２０４によって同一の共用ページ２０６を指すようにページ管理情報２０４を設定して、実行バイナリイメージを作成する。
【０１１６】
ここで、ページ管理情報２０４は、ページ単位ではなく、何らかの物理メモリの管理単位に従って管理すればよい。また、必ずしも特定データで書き換えられたページ（図１５（Ａ）で“０”と表されているページ）個々に対して共用ページへのポインタを管理する必要はない。例えば、ファイルデータの中で、共用ページに割り当てる領域を、ファイルの先頭からのアドレスのオフセット値によって範囲を指定してもよいし、絶対アドレス値によって範囲を指定してもよい。
【０１１７】
そのように設定することにより、従来５ページ分のサイズのファイルデータ２０２，２０３を含めていた実行バイナリイメージが、２ページ分のサイズのファイルデータ２０５，２０７と１ページ分のサイズの共用ページ２０６とを含めるだけでよく、実行バイナリイメージのサイズを削減することができる。
【０１１８】
プログラムを実行する際には、以上のように作成した実行バイナリイメージを、機器やシステムが認識する必要がある。典型的には、オペレーティングシステム（ＯＳ）や基本ソフトウェアと呼ばれるソフトウェアが、記憶媒体に格納されている実行バイナリイメージを読み取って解析し、実行するための実行バイナリプログラムを認識して実行のための環境を整える。
【０１１９】
図１６は、共用ページを利用した実行バイナリイメージと、実行バイナリプログラムが実行される際のアドレス空間との関係を説明するための模式図である。図１６の実行バイナリプログラムＡが起動されると、ＯＳは実行バイナリプログラムＡの情報や実体が、実行バイナリイメージが持つ管理情報、例えば、図１６のｉｎｏｄｅ２１１から特定される。ページ管理情報２１２は、前述した通り、実行バイナリプログラムの実体を指し示す管理情報、あるいは共用ページ２１３を使用する領域を特定するための情報を含む。
【０１２０】
ＯＳは、ページ管理情報２１２を読み取り、実行バイナリイメージの物理的な領域を、プログラムを実行するアドレス空間に割り当てる。ここで、プログラムのアドレス空間上で、実行バイナリプログラムの“．ｔｅｘｔ”セクションなどの位置を変えないために、仮想記憶管理機構２１４により仮想的なアドレス空間が作成される。すなわち、仮想記憶管理機構２１４は、実行バイナリプログラムに対して特定データで書き換えたページ領域と、書き換えていないページ領域とを認識し、仮想的なアドレス空間上で元の実行バイナリプログラムの実体の配置を実現する。
【０１２１】
ここで、具体的な例について図１６を用いて説明する。実行バイナリプログラムＡを仮想的なアドレス空間に展開する場合、ＯＳは、ファイルデータ２１８の最初のページを、プログラムの仮想的なアドレス空間上における最初の位置２１５に割り当てるように仮想記憶管理機構２１４を設定する。そして、ＯＳは、ページ管理情報２１２を参照し、後続する３つのページが共用ページ２１３を使用していることを認識する。ＯＳは、仮想的なアドレス空間上における２番目から４番目の位置２１７にそれぞれ共用ページ２１３を割り当てるように仮想記憶管理機構２１４を設定する。そして、ＯＳは、ファイルデータ２１８の最後のページを、仮想的なアドレス空間上における最後の位置２１６に割り当てるように仮想記憶管理機構２１４を設定する。実行プログラムＡは、仮想記憶管理機構２１４が管理する仮想的なアドレス空間上で動作する。
【０１２２】
同様に、実行バイナリプログラムＢを仮想的なアドレス空間に展開する場合、ＯＳは、ページ管理情報２１２を参照し、１番目と２番目のページが共用ページ２１３を使用していることを認識する。ＯＳは、仮想的なアドレス空間上における１番目と２番目の位置２１９にそれぞれ共用ページ２１３を割り当てるように仮想記憶管理機構２１４を設定する。次に、ＯＳは、ファイルデータ２２３の最初のページを、プログラムの仮想的なアドレス空間上における３番目の位置２２０に割り当てるように仮想記憶管理機構２１４を設定する。そして、ＯＳは、ページ管理情報２１２を参照し、後続する４番目のページが共用ページ２１３を使用していることを認識する。ＯＳは、仮想的なアドレス空間上における４番目の位置２２１に共用ページ２１３を割り当てるように仮想記憶管理機構２１４を設定する。そして、ＯＳは、ファイルデータ２２３の最後のページを、仮想的なアドレス空間上における最後の位置２２２に割り当てるように仮想記憶管理機構２１４を設定する。実行プログラムＢは、仮想記憶管理機構２１４が管理する仮想的なアドレス空間上で動作する。
【０１２３】
以上の動作により、例えば、図１６の仮想的なアドレス空間上の位置２１６に実行バイナリプログラム中の実行コード本体であるテキスト情報やデータ情報が配置されるので、アドレス空間上の配置アドレスを変化させることなくテキスト情報やデータ情報を配置することができ、他の実行コードからも問題なくアクセスすることが可能になる。
【０１２４】
なお、図１６の例では、仮想記憶管理機構２１４は、仮想的なアドレス空間上における位置２１７に、物理的な実行バイナリイメージの共用ページ２１３を割り当てているが、共用ページに全くアクセスしないことが予めわかっている場合、仮想的なアドレス空間上の位置２１７を共用ページの物理的な領域に割り当てなくても動作に問題はない。また、どのプログラムも特定データで書き換えたページ領域にアクセスしないことがわかっている場合、さらに実行バイナリイメージの中から共用ページを除くことも可能である。
【０１２５】
本実施の形態における実行バイナリイメージ作成装置は、情報機器、ＡＶ機器、通信機器及び家電機器などの種々の機器に搭載されるコンピュータで実行される実行バイナリプログラムに適用するものであり、コンピュータが認識するための実行バイナリイメージを出力する。
【０１２６】
図１７は、本実施の形態における情報処理システムの構成を示す図である。図１７に示す情報処理システム１０は、実行バイナリイメージ作成装置１１とコンピュータ１２とを備える。実行バイナリイメージ作成装置１１の構成は、図１に示す実行バイナリイメージ作成装置と同じである。コンピュータ１２は、記憶部２１及びプログラム実行部２２を備える。
【０１２７】
記憶部２１は、例えばＲＯＭ等で構成され、実行バイナリイメージ作成装置１１によって作成された実行バイナリイメージを記憶する。プログラム実行部２２は、例えばＣＰＵ等で構成され、記憶部２１に記憶されている実行バイナリイメージを仮想アドレス空間に展開して実行する。なお、本実施の形態において、記憶部２１が実行バイナリイメージ記憶部の一例に相当し、プログラム実行部２２が実行部の一例に相当する。また、本実施の形態において、実行バイナリイメージ実行プログラムが例えばＲＯＭに記憶されており、実行バイナリイメージ実行プログラムが記憶部２１及びプログラム実行部２２としてＣＰＵ及びＥＥＰＲＯＭを機能させる。
【０１２８】
図１７に示すように、実行バイナリイメージ作成装置１１はコンピュータ１２の外部にあり、実行バイナリイメージ作成装置１１から出力される実行バイナリイメージをコンピュータ１２上で認識し動作せることが可能である。
【０１２９】
また、別の実施の形態として、実行バイナリプログラムが実行されるコンピュータ上で、実行バイナリイメージ作成装置と同様の機能を動作させることも可能である。図１８は、本実施の形態における情報処理システムの別の構成を示す図である。図１８に示すコンピュータ１２’は、実行バイナリイメージ作成処理部１１’、記憶部２１、プログラム実行部２２及び通信部２３を備える。情報処理システム１０’は、実行バイナリイメージ作成処理部１１’、記憶部２１及びプログラム実行部２２で構成される。なお、図１８に示す情報処理システム１０’において、図１７に示す情報処理システム１０と同じ構成については同じ符号を付し、説明を省略する。
【０１３０】
通信部２３は、例えばインターネットなどのネットワークを介して実行バイナリプログラムを受信し、受信した実行バイナリプログラムを実行バイナリイメージ作成処理部１１’の実行バイナリ読み取り部１へ出力する。実行バイナリイメージ作成処理部１１’及びプログラム実行部２２は、例えばＣＰＵ等で構成され、記憶部２１は、例えばＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等で構成される。実行バイナリイメージ作成処理部１１’の構成は、図１に示す実行バイナリイメージ作成装置の構成と同じである。
【０１３１】
このように、ネットワークを介して実行バイナリプログラムが受信され、コンピュータ内で実行バイナリイメージが作成されるので、実行バイナリイメージをアップデートすることができる。
【０１３２】
なお、本実施の形態ではネットワークを介して実行バイナリプログラムを受信して実行バイナリイメージを作成しているが、本発明は特にこれに限定されず、ＣＤ−ＲＯＭなどのコンピュータ読み取り可能な記録媒体から実行バイナリプログラムを読み出して実行バイナリイメージを作成してもよい。この場合、コンピュータ１２’は、記録媒体を駆動する記録媒体駆動部を備える。記録媒体駆動部は、記録媒体から実行バイナリプログラムを読み出し、読み出した実行バイナリプログラムを実行バイナリイメージ作成処理部１１’の実行バイナリ読み取り部１へ出力する。
【０１３３】
以上、本実施の形態では、実行バイナリプログラムの形式としてＥＬＦ形式を代表例に挙げて説明してきたが、ＥＬＦ形式の実行バイナリプログラムのみに実施の範囲を限定するものではなく、他の実行バイナリプログラムの形式においても、これまで説明した再配置情報とシンボル情報とを同様に備え、これまでの説明通り同様に実施することができる。
【０１３４】
また、本実施の形態では、実行バイナリイメージ作成装置を中心に説明してきたが、情報処理システム、情報処理方法、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体に関しても、同様に実施することができる。
【０１３５】
さらにまた、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【０１３６】
また、例えば、実行バイナリ読み取り部１、削除可能領域検出部２、実行バイナリ書き換え部３及び実行バイナリイメージ作成部４のうちの少なくとも１つが、１チップ化されたＬＳＩ（大規模集積回路）に含まれ得る。実行バイナリ読み取り部１、削除可能領域検出部２、実行バイナリ書き換え部３及び実行バイナリイメージ作成部４のうちの少なくとも１つをＬＳＩに含めることによって、実行バイナリイメージ作成装置の製造工程を容易にすることができる。
【０１３７】
なお、上述した具体的実施形態には以下の構成を有する発明が主に含まれている。
【０１３８】
本発明の一局面に係る情報処理システムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部と、前記実行バイナリイメージ変換部によって変換された前記実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
【０１３９】
本発明の他の局面に係る情報処理方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップと、前記実行バイナリイメージ変換ステップにおいて変換された前記実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
【０１４０】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
【０１４１】
したがって、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
【０１４２】
また、上記の情報処理システムにおいて、前記実行バイナリ読み取り部は、シンボルのアドレス解決を実施済みの前記実行バイナリプログラムを読み取ることが好ましい。
【０１４３】
この構成によれば、シンボルのアドレス解決を実施済みの実行バイナリプログラムが読み取られるので、シンボルに関するシンボル情報及びシンボルのアドレス解決に使用される再配置情報を削除することができる。
【０１４４】
また、上記の情報処理システムにおいて、前記特定のデータは、前記実行バイナリプログラム内の他のデータよりも圧縮率の高いデータであり、前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムを圧縮することが好ましい。
【０１４５】
この構成によれば、実行バイナリプログラムを実行バイナリイメージに変換する際に、削除可能領域が特定のデータに書き換えられた実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量を削減することができる。
【０１４６】
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域は、前記セクション内の所定の領域であり、前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラムのセクション単位で集約することが好ましい。
【０１４７】
この構成によれば、実行バイナリプログラムは、セクション単位で分割され、削除可能領域は、セクション内の所定の領域であり、特定のデータに書き換えた領域が実行バイナリプログラムのセクション単位で集約され、実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける集約された特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量をさらに削減することができる。
【０１４８】
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域は、前記セクションであり、前記実行バイナリ書き換え部は、前記特定のデータに書き換えた領域を前記実行バイナリプログラム全体で集約することが好ましい。
【０１４９】
この構成によれば、実行バイナリプログラムは、セクション単位で分割され、削除可能領域は、セクションであり、特定のデータに書き換えた領域が実行バイナリプログラム全体で集約され、実行バイナリプログラムが圧縮されるので、実行バイナリプログラムにおける集約された特定のデータの圧縮率が他のデータよりも高くなり、実行バイナリイメージのデータ量をさらに削減することができる。
【０１５０】
また、上記の情報処理システムにおいて、前記実行バイナリイメージ変換部は、前記実行バイナリプログラムを前記実行バイナリイメージに変換する際に、前記実行バイナリ書き換え部によって特定のデータに書き換えられた領域を削除するとともに、前記実行バイナリプログラム内で共用する前記特定のデータを格納した共用領域を作成し、削除された前記領域の前記実行バイナリプログラム内における位置と前記共用領域とを関連付けて管理する管理情報を作成することが好ましい。
【０１５１】
この構成によれば、実行バイナリプログラムを実行バイナリイメージに変換する際に、特定のデータに書き換えられた領域が削除されるとともに、実行バイナリプログラム内で共用する特定のデータを格納した共用領域が作成され、削除された領域の実行バイナリプログラム内における位置と共用領域とを関連付けて管理する管理情報が作成される。したがって、特定のデータに書き換えられた領域が削除され、特定のデータが共用領域にのみ格納されるので、実行バイナリイメージが含む特定のデータのデータ量を削減することができ、実行バイナリイメージ全体のデータ量を削減することができる。
【０１５２】
また、上記の情報処理システムにおいて、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開する際に、前記管理情報を参照し、削除された前記領域の前記実行バイナリプログラム内における位置を認識し、認識した位置に対応する前記仮想的なアドレス空間に、前記共有領域に格納されている特定のデータを割り当てることが好ましい。
【０１５３】
この構成によれば、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開される際に、管理情報が参照され、削除された領域の実行バイナリプログラム内における位置が認識され、認識された位置に対応する仮想的なアドレス空間に、共有領域に格納されている特定のデータが割り当てられる。したがって、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、仮想的なアドレス空間に実行バイナリイメージを配置することができる。
【０１５４】
また、上記の情報処理システムにおいて、前記実行バイナリ読み取り部は、前記実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報を前記実行バイナリプログラムから読み取り、前記削除可能領域検出部は、前記実行バイナリ読み取り部によって読み取られた前記アドレス解決情報がアドレス解決済みであるか否かを判定し、アドレス解決済みでないと判定された場合、前記実行バイナリプログラムの中から削除可能領域を検出しないことが好ましい。
【０１５５】
この構成によれば、実行バイナリプログラムがアドレス解決済みであるか否かを表すアドレス解決情報が実行バイナリプログラムから読み取られ、読み取られたアドレス解決情報がアドレス解決済みであるか否かが判定され、アドレス解決済みでないと判定された場合、実行バイナリプログラムの中から削除可能領域が検出されない。したがって、アドレス解決済みであると判定された場合にのみ、削除可能領域を検出することができ、シンボル情報や再配置情報を削除可能領域として検出することができる。
【０１５６】
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、セクション単位で分割され、前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報を削除の対象外とすることが好ましい。
【０１５７】
この構成によれば、実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他のセクションから参照される場合、当該情報が削除の対象外とされるので、他のセクションから参照される情報は削除されずに残り、参照先のデータが存在しないという不具合を防止することができる。
【０１５８】
また、上記の情報処理システムにおいて、前記実行バイナリプログラムは、複数の実行バイナリプログラムを含み、前記削除可能領域検出部は、前記実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報を削除の対象外とすることが好ましい。
【０１５９】
この構成によれば、実行バイナリプログラムの中でアドレス解決に使用される情報であっても、当該情報が他の実行バイナリプログラムから参照される場合、当該情報が削除の対象外とされるので、他の実行バイナリプログラムから参照される情報は削除されずに残り、参照先のデータが存在しないという不具合を防止することができる。
【０１６０】
また、上記の情報処理システムにおいて、前記削除可能領域検出部は、前記実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることを検出し、文字列を共用しているシンボル全てが削除可能である場合にのみ、前記複数のシンボル及び前記文字列に対応する領域を削除可能領域として検出することが好ましい。
【０１６１】
この構成によれば、実行バイナリプログラムの中で複数のシンボルが同一の文字列を共用していることが検出され、文字列を共用しているシンボル全てが削除可能である場合にのみ、複数のシンボル及び文字列に対応する領域が削除可能領域として検出される。複数のシンボルが実行バイナリプログラム内の文字列を共用している場合、一のシンボルが削除可能と判定されても、他のシンボルが削除可能と判定されていなければ、実行バイナリプログラム内のシンボルの文字列及びシンボル情報は削除されない。したがって、一のシンボルが削除可能と判定されて文字列が削除されてしまい、文字列を共用している他のシンボルが文字列を指定することができないという不具合を防止することができる。
【０１６２】
本発明の他の局面に係る実行バイナリイメージ作成装置は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部とを備える。
【０１６３】
本発明の他の局面に係る実行バイナリイメージ作成方法は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取りステップと、前記実行バイナリ読み取りステップにおいて読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出ステップと、前記削除可能領域検出ステップにおいて検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換えステップと、前記実行バイナリ書き換えステップにおいて書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換ステップとを含む。
【０１６４】
本発明の他の局面に係る実行バイナリイメージ作成プログラムは、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる。
【０１６５】
本発明の他の局面に係る実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報を読み取る実行バイナリ読み取り部と、前記実行バイナリ読み取り部によって読み取られた前記実行バイナリプログラムの構成情報を取得し、実行時にアドレス解決に使用される情報を解析し、アドレス解決を実施しない場合に前記実行バイナリプログラムの中で削除可能となる領域を検出する削除可能領域検出部と、前記削除可能領域検出部によって検出された前記実行バイナリプログラムの削除可能領域を特定のデータに書き換える実行バイナリ書き換え部と、前記実行バイナリ書き換え部によって書き換えられた前記実行バイナリプログラムに含まれる前記特定のデータのデータ量を削減し、コンピュータ上で認識可能な形式である実行バイナリイメージに前記実行バイナリプログラムを変換する実行バイナリイメージ変換部としてコンピュータを機能させる実行バイナリイメージ作成プログラムを記録している。
【０１６６】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの内部構成を表す構成情報が読み取られる。そして、読み取られた実行バイナリプログラムの構成情報が取得され、実行時にアドレス解決に使用される情報が解析され、アドレス解決が実施されない場合に実行バイナリプログラムの中で削除可能となる領域が検出される。続いて、検出された実行バイナリプログラムの削除可能領域が特定のデータに書き換えられる。そして、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式である実行バイナリイメージに実行バイナリプログラムが変換される。変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶され、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。
【０１６７】
したがって、実行バイナリプログラムの中から再配置情報やシンボル情報などの削除可能領域を検出し、検出した削除可能領域を特定のデータに書き換え、特定のデータのデータ量が削減されるので、実行バイナリプログラムに含まれるテキスト情報やデータ情報などの実行コード本体の配置アドレスを変化させることなく、実行バイナリイメージのデータ量を削減することができる。
【０１６８】
本発明の他の局面に係る実行バイナリイメージ実行装置は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部とを備える。
【０１６９】
本発明の他の局面に係る実行バイナリイメージ実行方法は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを実行バイナリイメージ記憶部に記憶する実行バイナリイメージ記憶ステップと、前記実行バイナリイメージ記憶ステップにおいて前記実行バイナリイメージ記憶部に記憶された前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行ステップとを含む。
【０１７０】
本発明の他の局面に係る実行バイナリイメージ実行プログラムは、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる。
【０１７１】
本発明の他の局面に係る実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる前記特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージを記憶する実行バイナリイメージ記憶部と、前記実行バイナリイメージ記憶部に記憶されている前記実行バイナリイメージを仮想アドレス空間に展開して実行する実行部としてコンピュータを機能させる実行バイナリイメージ実行プログラムを記録している。
【０１７２】
これらの構成によれば、コンピュータ上で実行される実行バイナリプログラムの削除可能領域が特定のデータに書き換えられ、書き換えられた実行バイナリプログラムに含まれる特定のデータのデータ量が削減され、コンピュータ上で認識可能な形式に変換された実行バイナリイメージが実行バイナリイメージ記憶部に記憶される。そして、実行バイナリイメージ記憶部に記憶されている実行バイナリイメージが仮想アドレス空間に展開されて実行される。したがって、データ量が削減された実行バイナリイメージが記憶されるので、実行バイナリイメージを記憶するために必要な記憶容量を削減することができる。
【産業上の利用可能性】
【０１７３】
本発明に係る情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータ上で実行されるプログラムのデータサイズを削減することができ、コンピュータを搭載する種々の機器において、メモリサイズを抑えることができるので産業上有用である。
【図面の簡単な説明】
【０１７４】
【図１】本実施の形態における実行バイナリイメージ作成装置の構成を示すブロック図である。
【図２】実行バイナリプログラムの内部構成の一例を示す図である。
【図３】実行バイナリプログラムの代表的なセクションについて説明するための図である。
【図４】実行バイナリ読み取り部が管理する実行バイナリプログラムの情報の内部管理構造の一例を示す図である。
【図５】シンボルのアドレス解決の処理の流れを説明するための模式図である。
【図６】アドレス解決済みである実行バイナリプログラムの関数呼び出しについて説明するための模式図である。
【図７】“．ｒｅｌ”系セクションと“．ｄｙｎｓｙｍ”セクションと“．ｄｙｎｓｔｒ”セクションとの関係を示す図である。
【図８】シンボル情報の内部管理構造の一例を示す図である。
【図９】実行バイナリプログラムの複数のシンボルが文字列を共用する場合の動作を説明するための模式図である。
【図１０】シンボル情報の内部管理構造を作成する処理手順の一例を示す第１のフローチャートである。
【図１１】シンボル情報の内部管理構造を作成する処理手順の一例を示す第２のフローチャートである。
【図１２】実行バイナリ書き換え部が特定データに書き換える領域を集約しない場合の動作を説明するための模式図である。
【図１３】実行バイナリ書き換え部が特定データに書き換える領域を集約する場合の動作を説明するための模式図である。
【図１４】実行バイナリ書き換え部が特定データに書き換える領域を実行バイナリプログラム全体で集約する場合の動作を説明するための模式図である。
【図１５】（Ａ）は、２つの実行バイナリプログラムから成り立つ通常の実行バイナリイメージの一例を示す図であり、（Ｂ）は、共用ページを利用した実行バイナリイメージの一例を示す図である。
【図１６】共用ページを利用した実行バイナリイメージと、実行バイナリプログラムが実行される際のアドレス空間との関係を説明するための模式図である。
【図１７】本実施の形態における情報処理システムの構成を示す図である。
【図１８】本実施の形態における情報処理システムの別の構成を示す図である。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2007026484.tif 000021
【図２】
2007026484.tif 000022
【図３】
2007026484.tif 000023
【図４】
2007026484.tif 000024
【図５】
2007026484.tif 000025
【図６】
2007026484.tif 000026
【図７】
2007026484.tif 000027
【図８】
2007026484.tif 000028
【図９】
2007026484.tif 000029
【図１０】
2007026484.tif 000030
【図１１】
2007026484.tif 000031
【図１２】
2007026484.tif 000032
【図１３】
2007026484.tif 000033
【図１４】
2007026484.tif 000034
【図１５】
2007026484.tif 000035
【図１６】
2007026484.tif 000036
【図１７】
2007026484.tif 000037
【図１８】
2007026484.tif 000038
【国際調査報告】
2007026484.tif 000039
2007026484.tif 000040