説明

プログラムローダ、データ処理装置、プログラムロード方法及びロードプログラム

【課題】MMUやMPUを搭載していないプロセッサにおいて、不正なメモリアクセスを防止することを目的とする。
【解決手段】ロードしたプログラムコードに含まれるメモリアクセス命令が、アクセスを許可するメモリ領域である許可領域へのアクセス命令であるか、許可領域の外部の領域へのアクセス命令であるかを判定する検査コードを、プログラムコードにおけるメモリアクセス命令の前に挿入するとともに、NOP命令をプログラムコードに挿入する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、不正なメモリアクセスを防止するプログラムコードのロード技術に関する。
【背景技術】
【0002】
組み込み機器では、製品出荷後の機能追加等に対応するために、必要に応じてサーバからモジュールをダウンロードし、機器内に展開する機能を搭載することが求められる。この機能を実現するのがプログラムローダである。
ここで、プログラムローダがダウンロードしたモジュールが、許可されていないメモリアクセスを行うことで、機密情報が漏洩する危険性がある。
【0003】
悪意のあるコードを含む可能性のあるモジュールを実行する際、通常はMMU(Memory Management Unit)やMPU(Memory Protection Unit)によるアドレス変換やアクセス制御を行う。これにより、不正なメモリアクセスを防止できる。
しかし、MMUやMPUを搭載するプロセッサは一般的に高価であり、MMUやMPUを搭載しないプロセッサも多く存在する。MMUやMPUを搭載しないプロセッサでは別の方法により不正なメモリアクセスを防止する必要がある。
【0004】
MMUやMPUを搭載していないプロセッサで不正なメモリアクセスを防止する方法の1つとして、Java(登録商標)等の仮想マシンにおいてプログラムコード(以下、単にコードと呼ぶ)をインタプリタ方式で実行する方法がある。この方法では、仮想マシンにおいてコードが実行されるため、不正なメモリアクセスを検知することができる。
【0005】
別の方法として、非特許文献1には、モジュールをダウンロードして、機器内の不揮発性の記憶領域(フラッシュメモリ、HDD(Hard Disk Drive)等)に格納する際に、不正なメモリアクセスが発生することを防止するための検査コードやアドレスマスキングコードを挿入する方法についての記載がある。
【0006】
さらに別の方法として、特許文献1には、対象モジュールに電子署名を付与し、改竄の有無を検知した後、適当なメモリ領域(RAM)に展開して実行する方法についての記載がある。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2007−133860号公報
【非特許文献】
【0008】
【非特許文献1】Robert Wahbe, Steven Lucco, Thomas E. Anderson, Susan L. Graham “ Efficient Software−Based Fault Isolation”, Proceedings of the Symposium on Operating System Principles 1993
【発明の概要】
【発明が解決しようとする課題】
【0009】
しかし、仮想マシンにおいてコードをインタプリタ方式で実行する場合、コードを1行ずつ解釈しながら実行するため、大幅な速度低下を招く虞がある。例えば、鉄道等の交通系のICカードマイコンでは処理速度が求められる。こののように処理速度が求められる用途では、速度低下は大きなデメリットとなる。
【0010】
また、非特許文献1に記載された方法のように、検査コードやアドレスマスキングコードを挿入する場合、挿入されたコードを実行させずバイパスさせるようなバイパスコードを、ダウンロードするモジュールに予め挿入される虞がある。また、非特許文献1に記載された方法では、コードをRAMに展開し、コードを書き換えた上で実行される虞がある。このような場合には、不正なメモリアクセスを行う命令が実行される虞がある。
【0011】
また、特許文献1に記載された方法の場合、モジュール全体をRAMに展開する必要があるため、大量のRAMが必要になる。通常の組み込み機器は、高々数キロバイト程度のRAMしか持たないため、モジュール全体をRAMに展開することは困難である。また、署名されたプログラムが不正なメモリアクセスを行わない保証はない。
【0012】
この発明は、MMUやMPUを搭載していないプロセッサにおいて、不正なメモリアクセスを防止することを目的とする。
【課題を解決するための手段】
【0013】
この発明に係るプログラムローダは、
メモリアクセス命令を含むプログラムコードをロードするロード部と、
前記ロード部がロードしたプログラムコードに含まれるメモリアクセス命令が、アクセスを許可するメモリ領域である許可領域へのアクセス命令であるか、前記許可領域の外部の領域へのアクセス命令であるかを判定する検査コードを、前記プログラムコードにおける前記メモリアクセス命令の前に挿入するとともに、NOP(No OPeration)命令を前記プログラムコードに挿入して、挿入後プログラムコードを処理装置により生成する挿入後プログラムコード生成部と、
前記挿入後プログラムコード生成部が生成した挿入後プログラムコードを記憶装置に記憶するプログラムコード記憶部と
を備えることを特徴とする。
【発明の効果】
【0014】
この発明に係るプログラムローダは、検査コードとともに、NOP命令を挿入するため、バイパスコードを挿入されたコードであっても、検査コードの実行を回避することができない。そのため、バイパスコードを挿入されたコードであっても、検査コードにより、不正なメモリアクセスを防止することができる。
【図面の簡単な説明】
【0015】
【図1】プログラムローダ200を備えるデータ処理装置100の構成図。
【図2】プログラムローダ200とOS300との機能を示す機能ブロック図。
【図3】実行コードと挿入後実行コードとを示す図。
【図4】データ処理装置100における各モジュール401、プログラムローダ200、OS300に許可する操作の一覧を示す図。
【図5】OS300が挿入後モジュール404を呼び出す際の処理の流れを示す図。
【図6】実施の形態2における実行コードと挿入後実行コードとを示す図。
【発明を実施するための形態】
【0016】
実施の形態1.
実施の形態1では、非特許文献1に記載された方法と同様に、ロードしたプログラムコードに検査コードを埋め込み、不正なメモリアクセスを防止するプログラムローダ200について説明する。特に、実施の形態1では、非特許文献1に記載された方法の課題である検査コードを実行させることなくバイパスさせるバイパスコード挿入に対応可能なプログラムローダ200について説明する。
また、実施の形態1では、プログラムローダ200を備えるデータ処理装置100について説明する。
【0017】
図1は、プログラムローダ200を備えるデータ処理装置100の構成図である。
データ処理装置100は、ハードウェアとして、CPU101、不揮発性メモリ102、RAM103を備える。なお、不揮発性メモリ102は、書き換え可能な記憶装置であり、例えば、フラッシュメモリ、HDD等である。CPU101は、不揮発性メモリ102を直接フェッチできるものとする。
また、データ処理装置100は、ソフトウェアとして、プログラムローダ200、OS300を備える。OS300は、デバイスドライバの提供や、タスク管理等を行う。プログラムローダ200は、外部からモジュール401をダウンロードする。また、プログラムローダ200は、ダウンロードしたモジュール401が実行された場合に不正なメモリアクセスが発生することを防止する処置をモジュール401に施し、挿入後モジュール404として不揮発性メモリ102に書き込む。
なお、ダウンロードしたモジュール401には、オブジェクト情報402とリソース情報403とが含まれる。オブジェクト情報402は、コード本体である実行コードと、実行コードが使用する定数情報とを含む情報である。リソース情報403は、実行コードを実行した場合に必要となるRAM容量、不揮発メモリ容量等、実行コードを実行した場合に必要となるリソース情報である。
【0018】
不揮発性メモリ102には、モジュール用コード領域104、モジュール用データ領域105、OS・ローダ用コード領域106、OS・ローダ用データ領域107が割り当てられる。
モジュール用コード領域104は、モジュール401の実行コードを記憶するための記憶領域である。モジュール用データ領域105は、モジュール401が使用するデータを記憶するための記憶領域である。OS・ローダ用コード領域106は、プログラムローダ200とOS300とのコードを記憶するための記憶領域であり、プログラムローダ200のコードと、OS300のコードとが記憶されている。OS・ローダ用データ領域107は、プログラムローダ200とOS300とが使用するデータを記憶するための記憶領域である。
【0019】
RAM103には、モジュール用データ領域108、OS・ローダ用データ領域109、アドレス検査領域110が割り当てられる。
モジュール用データ領域108は、モジュール401が使用するデータを記憶するための記憶領域である。OS・ローダ用データ領域107は、プログラムローダ200とOS300とが使用するデータを記憶するための記憶領域である。アドレス検査領域110は、不正なメモリアクセスを検出するために使用される領域である。
【0020】
図2は、プログラムローダ200とOS300との機能を示す機能ブロック図である。
プログラムローダ200は、ロード部201、禁止命令抽出部202(エラー出力部)、アドレス変換部203、コード挿入部204(挿入後プログラムコード生成部)、モジュール書込部205(プログラムコード記憶部)を備える。
また、OS300は、アドレス計算部301、不揮発性メモリ制御部302を備える。なお、OS300が備えるアドレス計算部301、不揮発性メモリ制御部302は、プログラムローダ200が備えているとしてもよい。
【0021】
ロード部201は、ネットワークを介してモジュール401をダウンロードし、モジュール401に含まれるオブジェクト情報402とリソース情報403とをCPU101により抽出する。
ロード部201は、抽出したオブジェクト情報402を禁止命令抽出部202へ送信するとともに、抽出したリソース情報403をアドレス計算部301へ送信する。
【0022】
禁止命令抽出部202は、オブジェクト情報402に含まれる実行コードから、予め決められた禁止命令をCPU101により抽出する。
禁止命令が抽出された場合には、禁止命令抽出部202はエラーを出力する。エラーを出力した場合の対処は、システムに依存するものであるが、例えば、モジュール401を不揮発性メモリ102に書き込むことなく削除する。
禁止命令が抽出されない場合には、禁止命令抽出部202はオブジェクト情報402をアドレス変換部203へ送信する。
【0023】
アドレス計算部301は、リソース情報403に含まれるRAM容量、不揮発メモリ容量に基づき、モジュール用コード領域104とモジュール用データ領域105とを不揮発性メモリ102に割り当てるとともに、モジュール用データ領域108をRAM103に割り当てる。そして、アドレス計算部301は、不揮発性メモリ102におけるモジュール用コード領域104及びモジュール用データ領域105のアドレスと、RAM103におけるモジュール用データ領域108のアドレスとを割り当てアドレス情報405として、アドレス変換部203、コード挿入部204、モジュール書込部205へ送信する。
また、アドレス計算部301は、OS・ローダ用コード領域106におけるOS300のシステムコールが記憶された記憶領域のアドレスと、OS・ローダ用データ領域109における記憶領域であって、データ処理装置100におけるソフトウェアに共通で使用される記憶領域である共通RAM領域のアドレスとを共通領域情報406として、アドレス変換部203、コード挿入部204へ送信する。
また、アドレス計算部301は、不揮発性メモリ制御部302と協調して、割り当てアドレス情報405に含めたアドレスを不揮発性メモリ102のOS・ローダ用データ領域107へ書き込む。
【0024】
アドレス変換部203は、割り当てアドレス情報405と共通領域情報406とに基づき、オブジェクト情報402に含まれる実行コードにおける相対アドレスを絶対アドレスへ変換して、変換後実行コードをCPU101により生成する。
アドレス変換部203は、生成した変換後実行コードと定数情報とを含む変換後オブジェクト情報407をコード挿入部204へ送信する。
【0025】
コード挿入部204は、変換後オブジェクト情報407に含まれる変換後実行コードから、メモリアクセスを行うコード(メモリアクセス命令)を抽出する。そして、コード挿入部204は、抽出したメモリアクセス命令の前に、アドレス検査を行うための検査コードを挿入して、CPU101により挿入後実行コードを生成する。なお、コード挿入部204は、検査コードを挿入する際、割り当てアドレス情報405、共通領域情報406を参照する場合もある。例えば、コード挿入部204は、検査コードの戻り値を格納するアドレスを指定した検査コードを挿入する場合には、割り当てアドレス情報405を参照する。
また、コード挿入部204は、検査コードとともに、NOP(No OPeration)命令をランダムに挿入する。NOP命令とは、何もしない命令である。また、ランダムに挿入するとは、ランダムな個数のNOP命令を検査コードとメモリアクセス命令との間や、検査コード中に挿入するということである。
コード挿入部204は、生成した挿入後実行コードと定数情報とを含む挿入後オブジェクト情報408をモジュール書込部205へ送信する。
【0026】
モジュール書込部205は、不揮発性メモリ制御部302と協調して、挿入後オブジェクト情報408を不揮発性メモリ102のモジュール用コード領域104へ書き込む。
【0027】
図3は、実行コードと挿入後実行コードとを示す図である。
なお、図3に示す実行コードと挿入後実行コードとは一例であり、実行コードから生成される挿入後実行コードは、CPU101の種類等の条件によって異なる。
【0028】
実行コードにおける相対アドレスへの分岐命令(JSR _label)は、挿入後実行コードでは絶対アドレスへの分岐命令(JSR 0x#####)に、アドレス変換部203により変換されている。
また、挿入後実行コードには、アドレスレジスタ間接参照を行う命令(SUB R1,[A0])の前に、検査コードの一種であるアドレス間接参照用検査コード501が、コード挿入部204により挿入されている。なお、アドレス間接参照用検査コード501は、アドレスレジスタA0の値がアクセス可能な領域にあるか否かを検査するコードである。
同様に、挿入後実行コードには、スタックを使用する命令(PUSH R1)の前に、検査コードの一種であるスタック計算用検査コード502が、コード挿入部204により挿入されている。スタック計算用検査コード502は、命令実行によって変化するスタックポインタの値がアクセス可能な領域にあるか否かを検査するコードである。
さらに、挿入後実行コードには、NOP(No OPeration)命令が、コード挿入部204によりランダムに挿入されている。
【0029】
図4は、データ処理装置100における各モジュール401、プログラムローダ200、OS300に許可する操作の一覧を示す図である。
なお、図4において、“R”は読み込み可、“W”は書き込み可、“X”は実行可、“−”はアクセス不可を示す。また、“*”はシステムコールについてのみであることを示し、“$”はオブジェクト間のデータ共有のための領域のみであることを示す。
【0030】
各モジュール401は、自身に割り当てられたモジュール用コード領域104に対する実行、自身に割り当てられたモジュール用データ領域105に対する読み込み、自身に割り当てられたモジュール用データ領域108に対する読み込み/書き込みが許可されている。また、各モジュール401は、OS・ローダ用データ領域107におけるシステムコールが記憶された領域に対する実行、OS・ローダ用データ領域109におけるオブジェクト間のデータ共有のための領域に対する読み込み/書き込みが許可されている。
各モジュール401は、上記以外については許可されていない。つまり、RAM103のいずれの領域に対しても実行は許可されていない。また、不揮発性メモリ102のいずれの領域に対しても書き込みは許可されていない。そのため、各モジュール401が自身に割り当てられたモジュール用データ領域105に書き込みを行う必要がある場合は、OS300のシステムコールを使用して書き込みを行うことになる。
【0031】
図5は、OS300が挿入後モジュール404を呼び出す際の処理の流れを示す図である。
まず、(S1)で、OS300は、挿入後モジュール404に割り当てられた記憶領域のアドレスをOS・ローダ用データ領域107から呼び出し、アドレス検査領域110に書き込む。なお、挿入後モジュール404に割り当てられた記憶領域とは、その挿入後モジュール404に割り当てられたモジュール用コード領域104、モジュール用データ領域105、モジュール用データ領域108である。また、OS300は、OS300のシステムコールが記憶された記憶領域のアドレスと、オブジェクト間データ共有のための記憶領域のアドレスとをアドレス検査領域110に書き込む。ここでアドレス検査領域110に書き込まれたアドレスが示す記憶領域を許可領域と呼ぶ。
そして、(S2)で、OS300は、挿入後モジュール404をコールする。OS300からコールされると、挿入後モジュール404は起動され、挿入後モジュール404に含まれる挿入後実行プログラムが実行される。
【0032】
(S2)で挿入後モジュール404がコールされると、その挿入後モジュール404における挿入後実行コードは、CPU101に不揮発性メモリ102から直接フェッチされて実行される。直接フェッチされるとは、RAM103等に展開されることなく、不揮発性メモリ102からフェッチされるということを意味する。挿入後モジュール404には、RAM103に対して実行が許可されていないため、RAM103にコードを展開したとしても、実行することができない。そのため、挿入後モジュール404は、不揮発性メモリ102から直接フェッチされ、実行されることになる。
また、挿入後実行コードには、上述したようにメモリアクセス命令の前に、検査コードが挿入されている。検査コードが実行されると、アクセスしようとしているアドレスが、(S1)でアドレス検査領域110に書き込まれたアドレスから検索される。そして、アクセスしようとしているアドレスが検索にヒットした場合、そのアドレスに対して実行しようとしている操作が、許可されているか否かが判定される。操作が許可されている場合、処理は継続して実行される。一方、アクセスしようとしているアドレスが検索にヒットしない場合、及び、操作が許可されていない場合、エラーが出力され、その操作は実行されない。つまり、不正なメモリアクセスは実行されない。
【0033】
以上のように、プログラムローダ200は、ダウンロードしたモジュール401を不揮発性メモリ102に書き込む際に、検査コードを挿入した挿入後モジュール404を生成する。そして、データ処理装置100が挿入後モジュール404を実行する際に、検査コードにより、不正なメモリアドレスが実行されることを防止する。これにより、データ処理装置100は、ネイティブコードの実行を安全に行うことができる。
特に、プログラムローダ200は、検査コードを挿入する際、ランダムにNOP命令を挿入する。これにより、ダウンロードしたモジュール401に含まれる実行コードに、検査コードの挿入を見越したバイパスコードが挿入されている場合にも、検査コードのスキップを防止できる。
【0034】
また、データ処理装置100は、挿入後モジュール404にRAM103に対して実行権を与えていない。そのため、挿入後モジュール404がRAM103にコードを展開して実行することができず、RAM103に書き換えたコードを展開して不正なアクセスを行うことができない。
【0035】
なお、データ処理装置100における不正なメモリアクセスを防止してコードを実行する方法は、仮想マシンにおいてインタプリタ方式でコードを実行する方法に比べ、高速にコードを実行することができる。
【0036】
実施の形態2.
実施の形態1では、検査コード全てを実行コードに組み込んだが、実施の形態2では、検査コードの共通部をOS300に実装する。
【0037】
図6は、実施の形態2における実行コードと挿入後実行コードとを示す図である。
なお、図6に示す実行コードと挿入後実行コードとは一例であり、実行コードから生成される挿入後実行コードは、CPU101の種類等の条件によって異なる。
【0038】
挿入後実行コードでは、アドレスレジスタ間接参照を行う命令(SUB R1,[A0])の前に、検査コードの一種であるアドレス間接参照用検査コード601が、コード挿入部204により挿入されている。アドレス間接参照用検査コード601は、OS300の_verifyA0の示すアドレスへのサブルーチンコールを含むコードである。
同様に、挿入後実行コードには、スタックを使用する命令(PUSH R1)の前に、スタック計算用検査コード602が、コード挿入部204により挿入されている。スタック計算用検査コード602は、OS300の_verifyPUSHの示すアドレスへのサブルーチンコールを含むコードである。
【0039】
実施の形態2に係るプログラムローダ200では、検査コードの共通部分をOS300に実装した。これにより、挿入後モジュール404のコードサイズを小さくすることができる。
なお、ここでは、検査コードの共通部をOS300に実装したが、検査コードの共通部を他のプログラムに実装してもよい。
【0040】
また、上記説明におけるOS300の処理は、OS300が存在しない場合等は、所定のプログラム(初期化ルーチンやメインルーチン等)により実行されてもよい。
【0041】
以上をまとめると、次のようになる。
プログラムローダ200は、プログラムを不揮発性メモリ102に展開しておき、不揮発性メモリ102からプログラムを直接フェッチするデータ処理装置100で動作するプログラムローダ200であって、ロード対象のモジュール401を不揮発性メモリ102に展開するにあたって、当該モジュール401が不正なメモリアクセスを行わないよう、メモリアクセスを行う命令の前に、前記命令がアクセスするメモリアドレスを検査するコードを挿入することを特徴とする。
【0042】
また、プログラムローダ200は、メモリアドレスを検査するコードを挿入する際に、ランダムにNOP命令を挿入することを特徴とする。
【0043】
また、プログラムローダ200は、予め禁止命令と定めた命令を前記ロード対象のモジュール401が含む際に、エラーを出力することを特徴とする。
【0044】
また、プログラムローダ200は、検査コードの一部を、前記挿入されるコードとは別のプログラム領域に実装し、モジュールに挿入するコードには前記別のプログラム領域に実装した検査コードの一部へのサブルーチンコールを含むことを特徴とする。
【0045】
プログラムローダ200を含むソフトウェアであって、不揮発性メモリ102に展開した挿入後モジュール404を実行する際に、当該挿入後モジュール404がアクセス可能なメモリ領域を示す情報をRAM103領域に展開し、前記検査コードは前記展開したRAM103領域を参照することでアドレスの検査を行うことを特徴とする。
【0046】
プログラムを不揮発性メモリ102に展開しておき、不揮発性メモリ102からプログラムを直接フェッチするデータ処理装置100であって、上記ソフトウェアを搭載することを特徴とする。
【符号の説明】
【0047】
100 データ処理装置、101 CPU、102 不揮発性メモリ、103 RAM、104 モジュール用コード領域、105 モジュール用データ領域、106 OS・ローダ用コード領域、107 OS・ローダ用データ領域、108 モジュール用データ領域、109 OS・ローダ用データ領域、110 アドレス検査領域、200 プログラムローダ、201 ロード部、202 禁止命令抽出部、203 アドレス変換部、204 コード挿入部、205 モジュール書込部、300 OS、301 アドレス計算部、302 不揮発性メモリ制御部、401 モジュール、402 オブジェクト情報、403 リソース情報、404 挿入後モジュール、405 割り当てアドレス情報、406 共通領域情報、407 変換後オブジェクト情報、408 挿入後オブジェクト情報、501,601 アドレス間接参照用検査コード、502,602 スタック計算用検査コード。

【特許請求の範囲】
【請求項1】
メモリアクセス命令を含むプログラムコードをロードするロード部と、
前記ロード部がロードしたプログラムコードに含まれるメモリアクセス命令が、アクセスを許可するメモリ領域である許可領域へのアクセス命令であるか、前記許可領域の外部の領域へのアクセス命令であるかを判定する検査コードを、前記プログラムコードにおける前記メモリアクセス命令の前に挿入するとともに、NOP(No OPeration)命令を前記プログラムコードに挿入して、挿入後プログラムコードを処理装置により生成する挿入後プログラムコード生成部と、
前記挿入後プログラムコード生成部が生成した挿入後プログラムコードを記憶装置に記憶するプログラムコード記憶部と
を備えることを特徴とするプログラムローダ。
【請求項2】
前記プログラムローダは、さらに、
禁止命令を記憶装置に記憶する禁止命令記憶部と、
前記ロード部がロードしたプログラムコードに、前記禁止命令記憶部が記憶した禁止命令が含まれる場合にはエラー情報を出力するエラー出力部と
を備えることを特徴とする請求項1に記載のプログラムローダ。
【請求項3】
前記挿入後プログラムコード生成部は、外部サブルーチンを呼び出す命令を含む検査コードをメモリアクセス命令の前に挿入して、挿入後プログラムコードを生成する
ことを特徴とする請求項1又は2に記載のプログラムローダ。
【請求項4】
請求項1から3までのいずれかに記載のプログラムローダを備えるデータ処理装置であり、
前記プログラムコード記憶部は、前記挿入後プログラムコードを記憶装置である不揮発性メモリに記憶し、
前記データ処理装置は、さらに、
前記プログラムコード記憶部が不揮発性メモリに記憶した挿入後プログラムコードを、前記不揮発性メモリからフェッチして実行するコード実行部
を備えることを特徴とするデータ処理装置。
【請求項5】
処理装置が、メモリアクセス命令を含むプログラムコードをロードするロード工程と、
処理装置が、前記ロード工程でロードしたプログラムコードに含まれるメモリアクセス命令が、アクセスを許可するメモリ領域である許可領域へのアクセス命令であるか、前記許可領域の外部の領域へのアクセス命令であるかを判定する検査コードを、前記プログラムコードにおける前記メモリアクセス命令の前に挿入するとともに、NOP(No OPeration)命令を前記プログラムコードに挿入して、挿入後プログラムコードを生成する挿入後プログラムコード生成工程と、
処理装置が、前記挿入後プログラムコード生成工程で生成した挿入後プログラムコードを記憶装置に記憶するプログラムコード記憶工程と
を備えることを特徴とするプログラムロード方法。
【請求項6】
メモリアクセス命令を含むプログラムコードをロードするロード処理と、
前記ロード処理でロードしたプログラムコードに含まれるメモリアクセス命令が、アクセスを許可するメモリ領域である許可領域へのアクセス命令であるか、前記許可領域の外部の領域へのアクセス命令であるかを判定する検査コードを、前記プログラムコードにおける前記メモリアクセス命令の前に挿入するとともに、NOP(No OPeration)命令を前記プログラムコードに挿入して、挿入後プログラムコードを生成する挿入後プログラムコード生成処理と、
前記挿入後プログラムコード生成処理で生成した挿入後プログラムコードを記憶するプログラムコード記憶処理と
をコンピュータに実行させることを特徴とするロードプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate