(57)【要約】【課題】費用及び手間を掛けずに実行プログラムの動作を修正可能な実行プログラム、コンパイラ、実行プログラム動作修正装置及び実行プログラム動作修正方法を提供することを目的とする。【解決手段】コンピュータを、実行環境から指示情報を受け取る指示情報受取り手段６２と、指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈手段６３と、ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報５３を参照し、解釈したソースプログラム内の位置に対応する実行プログラム本体内の位置を特定し、特定した実行プログラム本体内の位置を解釈した実行内容に従って書き換える指示情報実行手段６４として機能させることにより上記課題を解決する。【選択図】  図８
2011090511.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
実行環境から指示情報を受け取る指示情報受取り手段と、
受け取った前記指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈手段と、
前記ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報を参照し、前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の位置を特定し、前記特定した実行プログラム本体内の位置を前記解釈した前記実行内容に従って書き換える指示情報実行手段と
して機能させるための実行プログラム。
【請求項２】
前記指示情報実行手段は、前記コンピュータを、
前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の機械語及びメモリを特定し、前記特定した実行プログラム本体内の機械語及びメモリを前記解釈した実行内容に従って書き換え、又は、前記解釈した実行内容に従って、前記特定した実行プログラム本体内の機械語及びメモリへ追加を行う
ように機能させる請求項１記載の実行プログラム。
【請求項３】
前記実行プログラム本体は、前記指示情報受取り手段，前記指示情報解釈手段及び前記指示情報実行手段の処理が終了したあとで実行を開始する請求項１又は２記載の実行プログラム。
【請求項４】
コンピュータを、
実行環境から指示情報を受け取る指示情報受取り手段と、
受け取った前記指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈手段と、
前記ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報を参照し、前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の位置を特定し、前記特定した実行プログラム本体内の位置を前記解釈した前記実行内容に従って書き換える指示情報実行手段と
して機能させるための実行プログラムを前記ソースプログラムから生成するように前記コンピュータを機能させるコンパイラ。
【請求項５】
実行プログラムの動作を修正する実行プログラム動作修正装置であって、
実行環境から指示情報を受け取る指示情報受取り手段と、
受け取った前記指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈手段と、
前記ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報を参照し、前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の位置を特定し、前記特定した実行プログラム本体内の位置を前記解釈した前記実行内容に従って書き換える指示情報実行手段と、
前記指示情報受取り手段，前記指示情報解釈手段及び前記指示情報実行手段の処理が終了したあとで実行を開始する実行プログラム本体手段と
を有する実行プログラム動作修正装置。
【請求項６】
コンピュータによって実行される実行プログラム動作修正方法であって、
前記コンピュータが、
実行環境から指示情報を受け取る指示情報受取りステップと、
受け取った前記指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈ステップと、
前記ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報を参照し、前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の位置を特定し、前記特定した実行プログラム本体内の位置を前記解釈した前記実行内容に従って書き換える指示情報実行ステップと、
前記指示情報受取りステップ，前記指示情報解釈ステップ及び前記指示情報実行ステップの処理が終了したあとで実行を開始する実行プログラム本体ステップと
を実行する実行プログラム動作修正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラによって生成された実行プログラム、実行プログラムを生成するコンパイラ、実行プログラムの動作を修正する実行プログラム動作修正装置及び実行プログラム動作修正方法に関する。
【背景技術】
【０００２】
コンパイラとは、人間がプログラム言語で記述したソフトウェアの設計図であるソースプログラム（ソースコード）をコンピュータが実行できる形式であるオブジェクトプログラム（オブジェクトコード）に変換する変換ソフトウェアである。コンパイラによって生成されたオブジェクトプログラム（以下、実行プログラムという）の実行開始後の動作はソースプログラムの記述に沿ったものである。実行プログラムの利用者は、実行プログラムの動作を確認，拡張又は変更する必要が生じることもある。
【０００３】
実行プログラムの動作を確認，拡張又は変更する為には、確認，拡張又は変更するようにソースプログラムを変更し、コンパイラによって実行プログラムを再生成してから動作させる必要があった。
【０００４】
また、実行プログラムの動作を確認，拡張又は変更する為には、デバッガのような外部ツールによって実行プログラムをメモリ内に書き込んでから機械語（マシン語）命令を変更し、データメモリ内容を参照又は変更した上で動作させる必要があった（例えば非特許文献１参照）。
【０００５】
また、実行プログラムの動作を確認，拡張又は変更する為には、ＯＳ機能によって実行プログラムを指定位置で停止させ、データ内容を表示させ、データ内容を変更した上で実行プログラムを動作させる必要があった。
【０００６】
また、実行プログラムの動作を確認，拡張又は変更する為には、コンパイラによる実行プログラムの生成過程の一つであるリンク時に、予め指定された動的な書き込み及び呼び出しが可能な別の実行プログラムに差し替えたりしていた。
【０００７】
さらに、プログラムのソースコードの変更を行うことなく、コンピュータプログラムの出力フォーマットの修正を行う方法は知られていた（例えば特許文献１参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２００３−５２１７６６号公報
【非特許文献】
【０００９】
【非特許文献１】ＧＤＢ：Ｔｈｅ  ＧＮＵ  Ｐｒｏｊｅｃｔ  Ｄｅｂｕｇｇｅｒ、［平成２０年７月２９日検索］、インターネット＜URL:http://www.gnu.org/software/gdb/＞
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従来、実行プログラムの動作を確認，拡張又は変更する為には、ソースプログラムを変更して実行プログラムを再生成するか、デバッガのような外部ツールを利用するか、ＯＳ機能によって実行プログラムを変更するか、実行プログラムの生成過程の一つであるリンク時に別の実行プログラムと差し替える必要があった。なお、プログラムのソースコードの変更を行うことなく、コンピュータプログラムの出力フォーマットの修正を行う方法は出力フォーマットの修正を行うものであって、実行プログラムの動作を確認，拡張又は変更するものではない。
【００１１】
このように、従来は実行プログラムの動作を確認，拡張又は変更する為、ソースプログラムの変更，外部ツールの利用，ＯＳ機能による実行プログラムの変更，リンク時における別の実行プログラムとの差し替え等が必要であり、費用及び手間が掛かるという問題があった。
【００１２】
本発明の一実施形態は、上記の点に鑑みなされたもので、費用及び手間を掛けずに実行プログラムの動作を修正可能な実行プログラム、コンパイラ、実行プログラム動作修正装置及び実行プログラム動作修正方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するため、本発明の一実施形態は、コンピュータを、実行環境から指示情報を受け取る指示情報受取り手段と、受け取った前記指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈手段と、前記ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報を参照し、前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の位置を特定し、前記特定した実行プログラム本体内の位置を前記解釈した前記実行内容に従って書き換える指示情報実行手段として機能させるための実行プログラムであることを特徴とする。
【００１４】
なお、本発明の一実施形態の構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも本発明の態様として有効である。
【発明の効果】
【００１５】
上述の如く、本発明の一実施形態によれば、費用及び手間を掛けずに実行プログラムの動作を修正可能である。
【図面の簡単な説明】
【００１６】
【図１】実行プログラムのコンパイル及び実行を行うシステムの一例の構成図である。
【図２】コンピュータの一例のハードウェア構成図である。
【図３】実行プログラムをコンパイルする処理を表したブロック図である。
【図４】通常の実行プログラムの一例のブロック構成図である。
【図５】本実施例の実行プログラムの一例のブロック構成図である。
【図６】実行プログラムを実行する処理を表したブロック図である。
【図７】実行プログラムの動作開始までの処理手順を表したフローチャートである。
【図８】実行プログラムの動作開始までの処理を視覚的に表したイメージ図である。
【図９】デバッグ情報と、ソースプログラム及び実行プログラムとの関係を表した一例の模式図である。
【図１０】デバッグ情報が提供するデータの一例のイメージ図である。
【図１１】デバッグ情報の基本的なルールの一例のイメージ図である。
【図１２】デバッグ情報の基本的なルールの具体例を表すイメージ図である。
【図１３】デバッグ情報のタグの具体例を表すイメージ図である。
【図１４】指示情報の与え方の第１の例を説明するための説明図である。
【図１５】指示情報の与え方の第２の例を説明するための説明図である。
【図１６】指示情報の与え方の第３の例を説明するための説明図である。
【図１７】指示情報の与え方の第４の例を説明するための説明図である。
【図１８】指示情報の与え方の第５の例を説明するための説明図である。
【図１９】指示情報の与え方の第６の例を説明するための説明図である。
【発明を実施するための形態】
【００１７】
次に、本発明を実施するための形態を、以下の実施例に基づき図面を参照しつつ説明していく。
【００１８】
図１は実行プログラムのコンパイル及び実行を行うシステムの一例の構成図である。図１（Ａ）のシステムはパソコン等のコンピュータ１を有する。図１（Ｂ）のシステムはインターネットやＬＡＮなどのネットワーク４経由でデータ通信可能に接続されたサーバ２及びクライアント３を有する。以下では、実行プログラムのコンパイル及び実行を行うシステムの一例として図１（Ａ）の構成を一例として説明する。図１（Ｂ）の構成の場合は図１（Ａ）のコンピュータ１が行う処理を、サーバ２とクライアント３とがデータ通信により連携して行う。
【００１９】
図２はコンピュータの一例のハードウェア構成図である。コンピュータ１は、それぞれバスＢで相互に接続された入力装置１１，出力装置１２，ドライブ装置１３，補助記憶装置１４，主記憶装置１５，演算処理装置１６及びインターフェース装置１７を有する。図２のハードウェア構成図は入力装置１１，出力装置１２，ドライブ装置１３，補助記憶装置１４，主記憶装置１５，演算処理装置１６及びインターフェース装置１７が一つの筐体内に設けられることを示したものではなく、複数の筐体内に分離して設けてもよい。
【００２０】
入力装置１１はキーボードやマウス等である。入力装置１１は、各種信号を入力するために用いられる。出力装置１２はディスプレイ装置等である。出力装置１２は、各種ウインドウやデータ等を表示するために用いられる。また、インターフェース装置１７はモデム，ＬＡＮカード等である。インターフェース装置１７は、ネットワークに接続する為に用いられる。
【００２１】
本実施例におけるコンパイラや実行プログラムは、コンピュータ１を制御する各種プログラムの少なくとも一部である。コンパイラや実行プログラム（以下、単にプログラムと呼ぶ）は例えば記録媒体１８の配布やネットワークからのダウンロードなどによって提供される。なお、実行プログラムはソースプログラムの形態で提供されることもある。
【００２２】
プログラムを記録した記録媒体１８は、ＣＤ−ＲＯＭ、フレキシブルディスク、光磁気ディスクなどの様に情報を光学的，電気的或いは磁気的に記録する記録媒体、ＲＯＭ、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
【００２３】
また、プログラムを記録した記録媒体１８がドライブ装置１３にセットされると、プログラムは記録媒体１８からドライブ装置１３を介して補助記憶装置１４にインストールされる。ネットワークからダウンロードされたプログラムは、インターフェース装置１７を介して補助記憶装置１４にインストールされる。
【００２４】
補助記憶装置１４は、インストールされたプログラムを格納すると共に、必要なファイル，データ等を格納する。主記憶装置１５は、プログラムの起動時に補助記憶装置１４からプログラムを読み出して格納する。そして、演算処理装置１６は主記憶装置１５に格納されたプログラムに従って、後述するような各種処理を実現している。
【００２５】
以下では、本実施例について、実行プログラムのコンパイルと実行プログラムの実行とに分けて説明していく。
【００２６】
（実行プログラムのコンパイル）
図３は実行プログラムをコンパイルする処理を表したブロック図である。コンパイル環境２１はコンパイラ２２を動作させるための環境である。なお、コンピュータ環境２１はＯＳやハードウェアの種類、ハードウェアの構成等によって決まる状態である。コンパイラ２２はコンパイル環境２１上で動作する。
【００２７】
コンパイラ２２は翻訳機能によりソースプログラム２３から後述のデバッグ情報と実行プログラム本体とを生成し、デバッグ情報と実行プログラム本体とを含む実行プログラム２４を生成する。デバッグ情報と実行プログラム本体とはコンパイラ２２が作成したオブジェクトである。
【００２８】
ここでは、本実施例の理解を容易とするため、通常の実行プログラムの構成と本実施例の実行プログラムの構成とを説明する。図４は通常の実行プログラムの一例のブロック構成図である。
【００２９】
図４の実行プログラム４１は、実行制御部４２，デバッグ情報４３，実行時初期化処理部４４，実行プログラム本体４５，実行時終了時処理部４６，実行時ライブラリ４７，実行時ライブラリ４８を有する。なお、デバッグ情報４３，実行時ライブラリ４７及び４８は存在しない場合がある。実行時ライブラリ４７は実行プログラム４１の一部として存在する例を表している。実行時ライブラリ４８は実行プログラム４１の外部に存在する例を表している。実行時ライブラリ４８はＯＳが提供するものを含んでいる。
【００３０】
実行制御部４２は実行時初期化処理部４４，実行プログラム本体４５，実行時終了時処理部４６を呼び出して処理を行う。また、実行時初期化処理部４４，実行プログラム本体４５，実行時終了時処理部４６は実行時ライブラリ４７，４８を呼び出して処理を行う。実行時初期化処理部４４は通常の初期化処理を行う。実行時終了時処理部４６は通常の終了時処理を行う。
【００３１】
図５は本実施例の実行プログラムの一例のブロック構成図である。図５の実行プログラム５１は、実行制御部５２，デバッグ情報５３，実行時初期化処理部５４，実行プログラム本体５５，実行時終了時処理部５６，実行時ライブラリ５７，実行時ライブラリ５８を有する。
【００３２】
実行時初期化処理部５４は、通常初期化処理部６１，指示情報受取り部６２，指示情報解釈部６３，指示情報実行部６４を有する。実行時終了時処理部５６は、通常終了時処理部６５，指示情報後処理部６６を有する。なお、実行時ライブラリ５７及び５８は存在しない場合がある。実行時ライブラリ５７は実行プログラム５１の一部として存在する例を表している。実行時ライブラリ５８は実行プログラム５１の外部に存在する例を表している。実行時ライブラリ５８はＯＳが提供するものを含んでいる。
【００３３】
実行制御部５２は実行時初期化処理部５４，実行プログラム本体５５，実行時終了時処理部５６を呼び出して処理を行う。また、実行時初期化処理部５４，実行プログラム本体５５，実行時終了時処理部５６は実行時ライブラリ５７，５８を呼び出して処理を行う。
【００３４】
実行時初期化処理部５４の通常初期化処理部６１は指示情報受取り部６２，指示情報解釈部６３，指示情報実行部６４を呼び出して処理を行う。実行時終了時処理部５６の通常終了時処理部６５は指示情報後処理部６６を呼び出して処理を行う。なお、指示情報後処理部６６は存在しない場合がある。
【００３５】
実行プログラム本体５５はソースプログラム２３に由来する機械語及びメモリ配置を有している。デバッグ情報５３は、ソースプログラム２３に由来する機械語及びメモリ配置を有する実行プログラム本体５５と、ソースプログラム２３の構成要素との対応情報を有する。デバッグ情報５３の詳細は後述する。
【００３６】
（実行プログラムの実行）
図６は実行プログラムを実行する処理を表したブロック図である。実行環境７１は実行プログラム５１を動作させるための環境である。なお、実行環境７１はＯＳやハードウェアの種類、ハードウェアの構成等によって決まる状態である。実行プログラム５１は実行環境７１上で動作する。
【００３７】
図７は実行プログラムの動作開始までの処理手順を表したフローチャートである。図８は実行プログラムの動作開始までの処理を視覚的に表したイメージ図である。なお、図８では説明に不要な部分を適宜省略している。ステップＳ１に進み、実行プログラム５１はメモリ内（コンピュータ１の主記憶装置１５）に書き込まれる。
【００３８】
ステップＳ２に進み、実行制御部５２に呼び出された実行時初期化処理部５４は最初に必要なプログラム実行環境初期化処理を実施する。最初に必要なプログラム実行環境初期化処理は通常初期化処理部６１が行う。ステップＳ３に進み、通常初期化処理部６１は実行環境７１に指示情報があるかを判定する。なお、通常初期化処理部６１は指示情報があるかを、例えば指定した環境変数の有無をＯＳに問い合わせることで判定できる。
【００３９】
指示情報は、実行プログラム５１を特定し、ソースプログラム２３で指定されていない動作を、ソースプログラム２３の構成要素を対象に指定するものである。指示情報は例えばソースプログラム２３内の位置及び実行内容（動作の内容）を指定する。
【００４０】
実行環境７１に指示情報があれば、通常初期化処理部６１に呼び出された指示情報受取り部６２はステップＳ４に進み、実行環境７１からソースプログラム２３内の位置及び実行内容を含む指示情報を受け取る。
【００４１】
ステップＳ５に進み、通常初期化処理部６１に呼び出された指示情報解釈部６３は指示情報からソースプログラム２３内の位置及び実行内容を解釈する。通常初期化処理部６１に呼び出された指示情報実行部６４はステップＳ６に進み、ステップＳ５で解釈した指示情報の内容とデバッグ情報５３とを参照し、実行プログラム本体５５に含まれる特定の機械語及びメモリ位置を特定する。指示情報実行部６４はデバッグ情報５３を参照することにより、ソースプログラム２３と実行プログラム本体５５との対応情報を取得する。
【００４２】
ステップＳ７に進み、通常初期化処理部６１に呼び出された指示情報実行部６４は特定した実行プログラム本体５５の機械語及びメモリ位置の内容に対して、指示情報の実行内容に従った追加又は変更を実施する。
【００４３】
ステップＳ８に進み、通常初期化処理部６１は、その他の必要なプログラム実行環境初期化処理を実施する。なお、通常初期化処理部６１はステップＳ３において実行環境７１に指示情報がなければ、ステップＳ８に進み、その他の必要なプログラム実行環境初期化処理を実施する。そして、ステップＳ８に続いてステップＳ９に進み、実行制御部５２から呼び出された実行プログラム本体５５は実行（動作）を開始する。
【００４４】
なお、ステップＳ６で利用するデバッグ情報５３は、以下のようなものである。図９はデバッグ情報と、ソースプログラム及び実行プログラムとの関係を表した一例の模式図である。
【００４５】
デバッグ情報５３はソースプログラム２３と実行プログラム本体５５との対応関係を保持するものである。デバッグ情報５３はソースプログラム２３の「構文ブロック・変数宣言・実行文等」と実行プログラム本体５５の「実行文等の機械語」との対応関係を保持している。また、デバッグ情報５３はソースプログラム２３の「手続き・関数・変数宣言・実行文等」と実行プログラム本体５５の「手続き・関数・実行文等の機械語」との対応関係を保持している。さらに、デバッグ情報５３はソースプログラム２３の「プログラム宣言・変数宣言等」と実行プログラム本体５５との対応関係を保持している。
【００４６】
図１０はデバッグ情報が提供するデータの一例のイメージ図である。図１０ではソースプログラム２３の構造情報として、関数Ｆの定義、変数Ａの宣言，ブロックＢの記述及びその他の言語構成要素を例示している。
【００４７】
ソースプログラム２３の構造情報が「関数Ｆの定義」である場合、デバッグ情報５３は実行プログラム５１の構造情報として「関数Ｆが機械語命令群として翻訳されているかどうか、翻訳されている場合、その開始アドレスと終了アドレス等」を保持する。ソースプログラム２３の構造情報が「変数Ａの宣言」である場合、デバッグ情報５３は実行プログラム５１の構造情報として「変数Ａのメモリ領域が確保されているかどうか、確保されている場合、その開始アドレスとサイズと形式（整数、浮動小数点等）」を保持する。
【００４８】
また、ソースプログラム２３の構造情報が「ブロックＢの記述」である場合、デバッグ情報５３は実行プログラム５１の構造情報として「ブロックＢの開始アドレスと終了アドレス」を保持する。ソースプログラム２３の構造情報が「その他の言語構成要素」である場合、デバッグ情報５３は実行プログラム５１の構造情報として「該当する言語要素がデバッグ対象として存在する場合、その言語要素の機械語またはデータとしてのアドレス範囲、メモリ内での格納形式、値等」を保持する。
【００４９】
図１１はデバッグ情報の基本的なルールの一例のイメージ図である。図１１のデバッグ情報はソースプログラム２３の構成単位を表すタグの集合として表現されている。各タグの配置及び保持する情報によって、デバッグ情報は図１１に示すようにソースプログラム２３内での論理的な関係を表現する。
【００５０】
図１２はデバッグ情報の基本的なルールの具体例を表すイメージ図である。図１２ではデバッグ情報の基本ルールに基づくタグのデータ配置と論理的な関係との対応を一例として表している。例えば図１２ではタグＡ，Ｂ，Ｃ，Ｄの順に配置され、タグＡがタグＣを指す「DW_AT_sibling」を情報として保持している為、図１２の下部に示すようなタグの論理的な関係を表すことができる。
【００５１】
図１３はデバッグ情報のタグの具体例を表すイメージ図である。図１３ではタグの具体例として、ソースプログラム２３の情報を保持するタグ，ソースプログラム２３に含まれる手続き情報を保持するタグ，ソースプログラム２３に含まれる変数情報を保持するタグ及びソースプログラム２３に含まれる型の情報を保持するタグを表している。
【００５２】
以下、指示情報の与え方の例を説明する。図１４は指示情報の与え方の第１の例を説明するための説明図である。「$ setenv INSTRUCTION_INFO "/home/userid/userapp disp_args_value(func1,1,int4);disp_arg_value(func2)"」は、「INSTRUCTION_INFO」という環境変数を用いて、実行プログラム「/home/userid/userapp」内の指示情報受取り部６２に指示情報を受渡し、指示情報解釈部６３及び指示情報実行部６４が動作した結果として以下の動作をするように、実行プログラム本体５５に追加・変更することを想定している。
【００５３】
実行プログラム本体５５に追加・変更したあと、実行プログラム本体５５は実行プログラム５１内の関数ｆｕｎｃ１が動作する際にｆｕｎｃ１の第一引数の値を４バイト整数型で表示するように動作する。また、実行プログラム本体５５に追加・変更したあと、実行プログラム本体５５は実行プログラム５１内の関数ｆｕｎｃ２が動作する際にｆｕｎｃ２のすべての引数の値を、デバッグ情報が保持するソースプログラム２３でのデータ形式で表示するように動作する。なお、指示情報による指示の形式にはデバッグ情報を利用して得られるソースプログラム２３上の表現を利用してもよい。
【００５４】
図１５は指示情報の与え方の第２の例を説明するための説明図である。
【００５５】
「$ setenv INSTRUCTION_INFO "/home/userid/userapp skip_func(func1,10);skip_block(src.c::func2,3)"」は、「INSTRUCTION_INFO」という環境変数を用いて、実行プログラム「/home/userid/userapp」内の指示情報受取り部６２に指示情報を受渡し、指示情報解釈部６３及び指示情報実行部６４が動作した結果として以下のような動作をするように、実行プログラム本体５５に追加・変更することを想定している。
【００５６】
実行プログラム本体５５に追加・変更したあと、実行プログラム本体５５は実行プログラム５１内の関数ｆｕｎｃ１が動作する箇所において、ｆｕｎｃ１内の機械語を実行することなく、値１０を返すように設定して直ちにｆｕｎｃ１の呼出しを終了するように動作する。また、実行プログラム本体５５に追加・変更したあと、実行プログラム本体５５はソースプログラム「src.c」で定義されていた実行プログラム５１内の関数ｆｕｎｃ２が動作する際に、ｆｕｎｃ２内の３番目の構文ブロックの内容を実行せず、その次の位置の機械語命令へ実行を進めるように動作する。
【００５７】
図１６は指示情報の与え方の第３の例を説明するための説明図である。
【００５８】
「$ setenv INSTRUCTION_INFO "/home/userid/userapp eval(src.c:line=10:a, stdout)"」は、「INSTRUCTION_INFO」という環境変数を用いて、実行プログラム「/home/userid/userapp」内の指示情報受取り部６２に指示情報を受渡し、指示情報解釈部６３及び指示情報実行部６４が動作した結果として以下のような動作をするように、実行プログラム本体５５に追加・変更することを想定している。
【００５９】
実行プログラム本体５５に追加・変更したあと、実行プログラム本体５５はソースプログラム「src.c」の１０行目の位置に相当する機械語位置で、変数aに相当するメモリの値を、ソースプログラム２３内でのａのデータ形式に従って、標準出力に出力するように動作する。
【００６０】
図１７は指示情報の与え方の第４の例を説明するための説明図である。
【００６１】
「$ setenv INSTRUCTION_INFO "/home/userid/userapp check_argtype(src.c:func1)"」は、「INSTRUCTION_INFO」という環境変数を用いて、実行プログラム「/home/userid/userapp」内の指示情報受取り部６２に指示情報を受渡し、指示情報解釈部６３及び指示情報実行部６４が動作した結果として以下のような動作をするように、実行プログラム本体５５に追加・変更することを想定している。
【００６２】
実行プログラム本体５５に追加・変更したあと、実行プログラム本体５５はソースプログラム「src.c」で定義されている関数ｆｕｎｃ１の動作時に、その引数である型を検証するように動作する。これは、ソースプログラム２３が従っている言語仕様では許されるが、言語仕様では暗黙の変換によって、厳密性が要求されていないデータの型を厳密に検証するように機能追加する例である。
【００６３】
図１８は指示情報の与え方の第５の例を説明するための説明図である。
【００６４】
「$ setenv INSTRUCTION_INFO "/home/userid/userapp call_dynamic (src.c:line=10:a,/home/userid/optional_program.so, extfunc, 1)"」は、「INSTRUCTION_INFO」という環境変数を用いて、実行プログラム「/home/userid/userapp」内の指示情報受取り部６２に指示情報を受渡し、指示情報解釈部６３及び指示情報実行部６４が動作した結果として以下のような動作をするように、実行プログラム本体５５に追加・変更することを想定している。
【００６５】
実行プログラム本体５５に追加・変更したあと、実行プログラム本体５５はソースプログラム「src.c」の１０行目の位置における変数ａに、動的読み込み可能な別の実行プログラム「/home/userid/optional_program.so」に含まれる関数ｅｘｔｆｕｎｃに引数１を渡した結果を代入するように動作する。
【００６６】
図１９は指示情報の与え方の第６の例を説明するための説明図である。
【００６７】
「$ setenv INSTRUCTION_INFO "/home/userid/userapp scriptfile (./instruction.scr)"
./instruction.scr ファイルの内容：
disp_args_value(func1,1,int4);
disp_arg_value(func2)」は、「INSTRUCTION_INFO」という環境変数を用いて、実行プログラム「/home/userid/userapp」内の指示情報受取り部６２に０個上の指示情報を所定の形式で保持するファイルで受渡し、その内容を指示情報解釈部６３及び指示情報実行部６４が動作した結果として以下のような動作をするように、実行プログラム本体５５に追加・変更することを想定している。
【００６８】
実行プログラム本体５５に追加・変更したあと、実行プログラム本体５５は実行プログラム５１内の関数ｆｕｎｃ１が動作する際にｆｕｎｃ１の第一引数の値を４バイト整数型で表示するように動作する。また、実行プログラム本体５５に追加・変更したあと、実行プログラム本体５５は実行プログラム５１内の関数ｆｕｎｃ２が動作する際にｆｕｎｃ２のすべての引数の値を、デバッグ情報が保持するソースプログラム２３でのデータ形式で表示するように動作する。
【００６９】
なお、図１９の例では所定の形式として図１４〜図１８に例示した対象となる実行プログラム５１の記述方法を採用できる。
【００７０】
（まとめ）
本実施例によれば、実行プログラム５１はソースプログラム２３で指定されていない動作の追加及び変更をソースプログラム２３の変更及び実行プログラム５１の再作成をすることなく、かつ、外部ツールを利用することなく、かつ、ＯＳ機能による実行プログラム５１の変更を行うことなく、かつ、予め実行中に呼び出すよう定めた実行プログラム５１とは別の実行プログラムを差し替えることなく、動作を修正可能である。
【００７１】
指示情報を与えない場合、メモリ内に読み込まれた実行プログラム５１および実行プログラム５１を呼出し起点とする動的に呼出しが可能な別の実行プログラムは、ソースプログラム２３で指定された通りの動作をする。
【００７２】
実行環境７１に指示情報を与えた場合、メモリ内に読み込んだ実行プログラム５１および実行プログラム５１を呼出し起点とする動的に呼出しが可能な別の実行プログラムはソースプログラム２３で指定されなかった動作をすることができる。
【００７３】
また、リンク時にあらかじめ指定されていなかった動的な呼び出しが可能な別の実行プログラムの呼出しを追加することができ、また、実行プログラム５１を呼出し起点としてリンク時にあらかじめ指定される動的に呼出しが可能な別の実行プログラムの呼出しを削除することができる。このため、生成済みのために変更不可能な実行プログラム５１の動作を追加および変更（修正）するための自由度を、外部ツールに頼ることなく飛躍的に高めることができる。
【００７４】
指示情報によって指定できるメモリ内の範囲はデバッガと同等であり、かつ、メモリ範囲内において実行プログラム５１および実行プログラム５１を呼出し起点としてリンク時にあらかじめ指定される動的に呼出し可能な別の実行プログラムに対する動作の追加および変更の自由度が高められるため、本実施例の実行プログラム５１では、デバッガ等の外部ツールを利用することなく、ソースプログラム２３内で指定されている手続き相当部分の実行回数や実行順序の記録や、ソースプログラム２３内で指定されている任意の手続き相当部分内の任意の引数相当部分や変数相当部分の情報の表示・変更・検証などが可能になる。
【００７５】
生成済みであっても有効なため、本実施例の実行プログラム５１はハードウェアの制限によって実行プログラム５１の入れ替えが難しい機器向けであっても、動作を拡張および変更することが可能になる。
【００７６】
本発明は、以下に記載する付記のような構成が考えられる。
（付記１）
コンピュータを、
実行環境から指示情報を受け取る指示情報受取り手段と、
受け取った前記指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈手段と、
前記ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報を参照し、前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の位置を特定し、前記特定した実行プログラム本体内の位置を前記解釈した前記実行内容に従って書き換える指示情報実行手段と
して機能させるための実行プログラム。
（付記２）
前記指示情報実行手段は、前記コンピュータを、
前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の機械語及びメモリを特定し、前記特定した実行プログラム本体内の機械語及びメモリを前記解釈した実行内容に従って書き換え、又は、前記解釈した実行内容に従って、前記特定した実行プログラム本体内の機械語及びメモリへ追加を行う
ように機能させる付記１記載の実行プログラム。
（付記３）
前記実行プログラム本体は、前記指示情報受取り手段，前記指示情報解釈手段及び前記指示情報実行手段の処理が終了したあとで実行を開始する付記１又は２記載の実行プログラム。
（付記４）
コンピュータを、
実行環境から指示情報を受け取る指示情報受取り手段と、
受け取った前記指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈手段と、
前記ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報を参照し、前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の位置を特定し、前記特定した実行プログラム本体内の位置を前記解釈した前記実行内容に従って書き換える指示情報実行手段と
して機能させるための実行プログラムを前記ソースプログラムから生成するように前記コンピュータを機能させるコンパイラ。
（付記５）
実行プログラムの動作を修正する実行プログラム動作修正装置であって、
実行環境から指示情報を受け取る指示情報受取り手段と、
受け取った前記指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈手段と、
前記ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報を参照し、前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の位置を特定し、前記特定した実行プログラム本体内の位置を前記解釈した前記実行内容に従って書き換える指示情報実行手段と、
前記指示情報受取り手段，前記指示情報解釈手段及び前記指示情報実行手段の処理が終了したあとで実行を開始する実行プログラム本体手段と
を有する実行プログラム動作修正装置。
（付記６）
コンピュータによって実行される実行プログラム動作修正方法であって、
前記コンピュータが、
実行環境から指示情報を受け取る指示情報受取りステップと、
受け取った前記指示情報からソースプログラム内の位置及び実行内容を解釈する指示情報解釈ステップと、
前記ソースプログラムと実行プログラム本体との対応関係を保持しているデバッグ情報を参照し、前記解釈したソースプログラム内の位置に対応する前記実行プログラム本体内の位置を特定し、前記特定した実行プログラム本体内の位置を前記解釈した前記実行内容に従って書き換える指示情報実行ステップと、
前記指示情報受取りステップ，前記指示情報解釈ステップ及び前記指示情報実行ステップの処理が終了したあとで実行を開始する実行プログラム本体ステップと
を実行する実行プログラム動作修正方法。
【００７７】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【００７８】
１    コンピュータ
２    サーバ
３    クライアント
４    ネットワーク
１１    入力装置
１２    出力装置
１３    ドライブ装置
１４    補助記憶装置
１５    主記憶装置
１６    演算処理装置
１７    インターフェース装置
１８    記録媒体
２１    コンパイル環境
２２    コンパイラ
２３    ソースプログラム
２４，４１，５１    実行プログラム
４２，５２    実行制御部
４３，５３    デバッグ情報
４４，５４    実行時初期化処理部
４５，５５    実行プログラム本体
４６，５６    実行時終了時処理部
４７，４８，５７，５８    実行時ライブラリ
６１    通常初期化処理部
６２    指示情報受取り部
６３    指示情報解釈部
６４    指示情報実行部
６５    通常終了時処理部
６６    指示情報後処理部
７１    実行環境
【図１】
2011090511.tif 000003
【図２】
2011090511.tif 000004
【図３】
2011090511.tif 000005
【図４】
2011090511.tif 000006
【図５】
2011090511.tif 000007
【図６】
2011090511.tif 000008
【図７】
2011090511.tif 000009
【図８】
2011090511.tif 000010
【図９】
2011090511.tif 000011
【図１０】
2011090511.tif 000012
【図１１】
2011090511.tif 000013
【図１２】
2011090511.tif 000014
【図１３】
2011090511.tif 000015
【図１４】
2011090511.tif 000016
【図１５】
2011090511.tif 000017
【図１６】
2011090511.tif 000018
【図１７】
2011090511.tif 000019
【図１８】
2011090511.tif 000020
【図１９】
2011090511.tif 000021