JP2006072584A - 実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラム - Google Patents

実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラム Download PDF

Info

Publication number
JP2006072584A
JP2006072584A JP2004253636A JP2004253636A JP2006072584A JP 2006072584 A JP2006072584 A JP 2006072584A JP 2004253636 A JP2004253636 A JP 2004253636A JP 2004253636 A JP2004253636 A JP 2004253636A JP 2006072584 A JP2006072584 A JP 2006072584A
Authority
JP
Japan
Prior art keywords
code
address
target code
encoding target
encoding
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004253636A
Other languages
English (en)
Inventor
Mitsuhisa Kamei
光久 亀井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Xerox Co Ltd filed Critical Fuji Xerox Co Ltd
Priority to JP2004253636A priority Critical patent/JP2006072584A/ja
Publication of JP2006072584A publication Critical patent/JP2006072584A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

【課題】 コードを復号するプログラムのソースコードを、開示することなしに、符号化しようとするコードを含む関数内に、その復号プログラムの実行コードをインライン展開することができる実行プログラム生成装置を提供する。
【解決手段】 挿入手段102は、符号化対象コード120を一部に含むプログラムコード内に該符号化対象コードの範囲を示す符号化開始マーク118及び符号化終了マーク131を挿入する。アドレス計算手段103は、プログラムコードのコンパイル実行後に、符号化開始マーク118及び符号化終了マーク131に基づいて符号化対象コードのアドレスを計算する。アドレス表作成手段104は、符号化対象コードのアドレスに基づいて、アドレス解決テーブルを挿入コード開始マーク112の位置に作成する。符号化手段105は、符号化対象コード120を符号化する。
【選択図】 図2

Description

本発明は、実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラムに関する。
従来、プログラムコードの一部分を符号化しておいて、実行時に復号する自己復元型プログラムと呼ばれる技術が存在する。このような従来技術として特許文献1記載のものが提案されている。特許文献1記載のプログラムでは、符号化しておいたコードを実行時に復号化するために、復号するコードの位置をアドレスの形で、復号するコードに知らせる必要がある。この様な機能は、アセンブリ言語を用いて、符号化するコードの開始位置および終了位置に対してラベルを埋め込み、復号するコードがそのラベルを参照するように記述することで実現することができる。
さらに、この様な機能は、プログラムを作成する都度実現するのではなく、ライブラリとして前もって作成しておくことで、効率のよい機能提供が可能となる。このようなライブラリを用いる従来技術として特許文献2および特許文献3記載のものが提案されている。コードの復号機能をライブラリで実現する場合には、ライブラリ関数に対して引数などの形で復号するコードのアドレスを渡す必要がある。ここで、復号するコードのアドレスをライブラリ関数に知らせるためには、上述のように、アセンブリ言語のラベル機能を用いて実現することができる。
また、上記復号するコードを符号化されたコードを含む関数内にインライン展開することで、実行効率の向上などの効果が期待できる。このインライン展開のためには、復号するコードのソースコードとともに、符号化されたプログラムをコンパイルおよびリンクすることで、実現することができる。
また、特許文献4記載の装置は、プログラムのアドレス解決方式として外部シンボルアドレス表を利用したもので、オペレーティングシステムのバーションによらずに、プログラムの移行を簡単に行うことができるというものである。
特開2003−280755号公報 特開2002−222081号公報 特開平6−250828号公報 特開昭63−37426号公報
しかしながら、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で復号してから復号したコードを実行する場合、復号するモジュールに対して、復号すべきコードの範囲をアドレスによって知らせる必要がある。復号すべきコードが存在するアドレスを復号するモジュールに対して知らせるためには、復号すべきコードが存在するアドレスをアセンブリ言語を用いて表現する必要がある。
プログラムをアセンブリ言語で記述するには、CPU(Central Processing Unit)およびマシン語の知識が要求される。このため、アセンブラの知識を持たない一般のプログラマには困難な作業となるため、復号すべきコードが存在するアドレスを高級言語で記述することはできなかった。さらに、プログラムをアセンブリ言語で作成することは、プログラムを高級言語で作成する場合と比較して、プログラム作成および管理の負荷が増大する。
また、一つのプログラム内さらには、関数内で、複数の箇所または多重に符号化する場合、アセンブリ言語のラベル機能を用いて符号化するコードの開始位置および終了位置を取得しようとしたとき、さらにラベル名の唯一性を維持するための管理が必要となり、管理の負荷がより増大してしまう。
また、復号モジュールをコンパイルされたライブラリの形式で提供する場合、復号されるコードを含む関数内にインラインに展開することができなかった。復号モジュールをインライン展開するためには、復号モジュールのソースプログラムを符号化するプログラムのソースコードとともに、コンパイルおよびリンクする必要がある。したがって、符号化を行うプログラムをコンパイルする作業者に対して、復号モジュールのソースプログラムを開示する必要があった。
そこで、本発明は、上記問題点に鑑みてなされたもので、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で復号してから、復号したコードを実行する機能を、アセンブラの知識を持たない一般のプログラム作成者に対しても提供できる実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラムを提供することを目的とする。
上記課題を解決するために、本発明は、請求項1に記載のように、符号化対象コードを一部に含むプログラムコード内に該符号化対象コードの範囲を示すマークを挿入する挿入手段と、前記プログラムコードのコンパイル実行後に、前記マークに基づいて前記符号化対象コードのアドレス計算するアドレス計算手段と、前記符号化対象コードのアドレスに基づいて、前記符号化対象コードのアドレス表を作成するアドレス表作成手段とを含むことを特徴とする実行プログラム生成装置である。
本発明によれば、符号化対象コードを一部に含むプログラムコード内に符号化対象コードの範囲を示すマークを挿入し、プログラムコードのコンパイル実行後に、前記マークに基づいて符号化対象コードのアドレス計算し、符号化対象コードのアドレスに基づいて、符号化対象コードのアドレス表を作成しておく。後述するプログラム処理装置により、この符号化対象コードのアドレス表を参照して、符号化対象コードのアドレスを算出し、この符号化対象コードのアドレスに基づいて、前記符号化対象コードを復号することで、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で復号してから、復号したコードを実行する機能を、アセンブラの知識を持たない一般のプログラム作成者に対しても提供できる。また、符号化しようとする符号化対象コードをコンパイルする作業者に対して、コードを復号するプログラムのソースコードを開示することなしに、符号化対象コードを含む関数内に、その復号プログラムの実行コードをインライン展開することができる。また、ラベル名の唯一性を維持するための管理が必要ないため、管理の負荷が増大することもない。
本発明の実行プログラム生成装置は、請求項2に記載のように、更に、前記符号化対象コードを符号化する符号化手段を含む。
前記アドレス計算手段は、請求項3に記載のように、前記マークと所定のマークとの位置の差分に基づいて、前記符号化対象コードのアドレスを計算する。本発明によれば、相対アドレスによる符号化対象コードの開始アドレスおよび終了アドレスを算出できる。
前記アドレス計算手段は、請求項4に記載のように、実行ファイルがメモリ内にロードされるベースアドレスから所定のマークがロードされるアドレスの差分を該ベースアドレスに加えることで、前記符号化対象コードのアドレスを計算する。本発明によれば、絶対アドレスによる前記符号化対象コードの開始アドレスおよび終了アドレスを計算できる。
本発明の実行プログラム生成装置は、請求項5に記載のように、更に、前記プログラムコードのコンパイル前に、所定のマーク、前記符号化対象コードのアドレスを算出するアドレス算出コード及び前記符号化対象コードを復号する復号コードのうちの少なくともいずれか一つを含む挿入コードを前記プログラムコード内に挿入する挿入手段を含む。
前記アドレス表作成手段は、請求項6に記載のように、所定のマークの位置に前記符号化対象コードのアドレス表を作成する。本発明によれば、復号コードは所定のマークを検出することでアドレス表の位置を知ることができる。
前記符号化手段は、請求項7に記載のように、前記挿入手段は、前記符号化対象コード及び前記符号化対象コードの範囲を示すマークを含む第2の符号化対象コードの範囲を示す第2のマークを挿入し、前記アドレス計算手段は、前記第2のマークに基づいて前記第2の符号化対象コードのアドレスを計算し、前記アドレス表作成手段は、前記第2の符号化対象コードのアドレスに基づいて前記第2の符号化対象コードのアドレス表を作成し、前記符号化手段は、前記第2の符号化対象コードを符号化する。これにより符号化対象コードの符号化を多重にすることができる。
本発明は、請求項8に記載のように、符号化対象コードを一部に含むプログラムコード内に前記符号化対象コードの範囲を示すマークを挿入する挿入ステップと、前記プログラムコードのコンパイル実行後に、前記マークに基づいて前記符号化対象コードのアドレスを計算するアドレス計算ステップと、前記符号化対象コードのアドレスに基づいて、前記符号化対象コードのアドレス表を作成するアドレス表作成ステップとを含むことを特徴とする実行プログラム生成方法である。本発明によれば、符号化対象コードのアドレス表を作成しておき、後で、この符号化対象コードのアドレス表を参照して、符号化対象コードのアドレスを計算し、この符号化対象コードのアドレスに基づいて、前記符号化対象コードを復号することで、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で復号してから、復号したコードを実行する機能を、アセンブラの知識を持たない一般のプログラム作成者に対しても提供できる。
本発明の実行プログラム生成方法は、請求項9に記載のように、更に、前記符号化対象コードを符号化する符号化ステップを含む。
前記アドレス計算ステップは、請求項10に記載のように、前記マークと所定のマークとの位置の差分に基づいて、前記符号化対象コードのアドレスを計算する。本発明によれば、相対アドレスによる符号化対象コードの開始アドレスおよび終了アドレスを算出できる。
前記アドレス計算ステップは、請求項11に記載のように、実行ファイルがメモリ内にロードされるベースアドレスから所定のマークがロードされるアドレスの差分を該ベースアドレスに加えることで、前記符号化対象コードのアドレスを計算する。絶対アドレスによる前記符号化対象コードの開始アドレスおよび終了アドレスを計算できる。
本発明の実行プログラム生成方法は、請求項12に記載のように、更に、前記プログラムコードのコンパイル前に、所定のマーク、前記符号化対象コードのアドレスを計算するコード及び前記符号化対象コードを復号する復号コードのうちの少なくともいずれか一つを含む挿入コードを前記プログラムコード内に挿入するステップを含む。
本発明の実行プログラム生成方法は、請求項13に記載のように、更に、前記プログラムコードのコンパイル前に、少なくとも所定のマークを含む挿入コードを前記プログラムコード内に挿入する第1挿入ステップと、前記プログラムコードのコンパイル後に、前記符号化対象コードを復号するためのコンパイル済みの復号コード及び前記符号化対象コードのアドレスを算出するためのコンパイル済みのアドレス算出コードのうちの少なくともいずれか一方を前記第1挿入ステップで挿入したマークの位置に挿入する第2挿入ステップとを含む。
本発明は、請求項14に記載のように、符号化対象コードを一部に含むプログラムコード内に前記符号化対象コードの範囲を示すマークを挿入する挿入ステップ、前記プログラムコードのコンパイル実行後に、前記マークに基づいて前記符号化対象コードのアドレスを計算するアドレス計算ステップ、前記符号化対象コードのアドレスに基づいて、前記符号化対象コードのアドレス表を作成するアドレス表作成ステップをコンピュータに実行させるプログラムである。本発明によれば、符号化対象コードのアドレス表を作成しておき、後で、この符号化対象コードのアドレス表を参照して、符号化対象コードのアドレスを計算し、この符号化対象コードのアドレスに基づいて、前記符号化対象コードを復号することで、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で復号してから、復号したコードを実行する機能を、アセンブラの知識を持たない一般のプログラム作成者に対しても提供できる。
前記プログラムは、請求項15に記載のように、更に、前記符号化対象コードを符号化する符号化ステップを前記コンピュータに実行させる。
本発明は、請求項16に記載のように、符号化された符号化対象コードを一部に含むプログラムコード内に挿入され、該符号化対象コードの範囲を示すマークに基づき生成された符号化対象コードのアドレス表を参照して、該符号化対象コードのアドレスを算出するアドレス算出手段と、前記アドレス算出手段が算出した符号化対象コードのアドレスに基づいて、前記符号化対象コードを復号する復号手段と、前記復号手段が復号した符号化対象コードを符号化する符号化手段とを含むことを特徴とするプログラム処理装置である。
本発明によれば、符号化された符号化対象コードを一部に含むプログラムコード内に挿入された符号化対象コードのアドレス表を参照して、符号化対象コードのアドレスを計算し、この符号化対象コードのアドレスに基づいて、前記符号化対象コードを復号し、復号した符号化対象コードを実行し、符号化対象コードを再度符号化することで、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で復号してから、復号したコードを実行する機能を、アセンブラの知識を持たない一般のプログラム作成者に対しても提供できる。また、符号化しようとする符号化対象コードをコンパイルする作業者に対して、コードを復号するプログラムのソースコードを開示することなしに、符号化対象コードを含む関数内に、その復号プログラムの実行コードをインライン展開することができる。また、ラベル名の唯一性を維持するための管理が必要ないため、管理の負荷が増大することもない。
本発明は、請求項17に記載のように、符号化された符号化対象コードを一部に含むプログラムコード内に挿入され、該符号化対象コードの範囲を示すマークに基づき生成された符号化対象コードのアドレス表を参照して、該符号化対象コードのアドレスを算出するアドレス算出ステップと、前記符号化対象コードのアドレスに基づいて、前記符号化対象コードを復号する復号ステップと、前記符号ステップで復号した符号化対象コードを実行する実行ステップと、前記復号ステップで復号された符号化対象コードを符号化する符号化ステップとを含むことを特徴とするプログラム処理方法である。
本発明によれば、符号化された符号化対象コードを一部に含むプログラムコード内に挿入された符号化対象コードのアドレス表を参照して、符号化対象コードのアドレスを算出し、この符号化対象コードのアドレスに基づいて、符号化対象コードを復号し、復号した符号化対象コードを実行後、符号化対象コードを再度符号化できる。
本発明は、請求項18に記載のように、符号化された符号化対象コードを一部に含むプログラムコード内に挿入され、該符号化対象コードの範囲を示すマークに基づき生成された符号化対象コードのアドレス表を参照して、該符号化対象コードのアドレスを算出するアドレス算出ステップ、前記復号ステップで復号された符号化対象コードを符号化する符号化ステップをコンピュータに実行させるプログラムである。本発明によれば、符号化された符号化対象コードを一部に含むプログラムコード内に挿入された符号化対象コードのアドレス表を参照して、符号化対象コードのアドレスを算出し、この符号化対象コードのアドレスに基づいて、符号化対象コードを復号し、復号した符号化対象コードを実行後、符号化対象コードを再度符号化することができる。
本発明によれば、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で復号してから、復号したコードを実行する機能を、アセンブラの知識を持たない一般のプログラム作成者に対しても提供できる実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラムを提供できる。
以下、本発明を実施するための最良の形態について実施例を用いて説明する。
実施例1は、実行プログラムを部分的に符号化する場合に本発明を適用した実施例である。本発明を実現したプログラムコードは、例えば、所定のオペレーティングシステムをインストールした汎用コンピュータ・システム上に実行可能である。汎用コンピュータ・システムは、一般に、プログラムコードを実行するプロセッサと、プログラムコードをロードしたり作業データを一時格納するためのメモリと、ディスプレイやキーボード/マウスなどのユーザ入出力装置と、プログラム・ファイルやデータ・ファイルなどを不揮発的に保管するハード・ディスク・ドライブなどの外部記憶装置を含んでいる。
図1は、実施例1のプログラム生成の全体的な手順である。まず、ステップS100で、プログラム作成者は、実行プログラムのソースコードを作成する。次に、ステップS200で、符号化したい符号化対象コードの直前に開始挿入コードを挿入し、符号化対象コードの直後に終了挿入コードを挿入する。ここで、コードの挿入方法は、直接コードないし、そのコードにコンパイルされるソースコードを挿入しても実現可能であるが、簡便な方法としては、コードをインクルードファイルとして用意しておき、そのファイルをインクルードする方法がある。
また別の簡便な方法としては、コードをプリプロセッサなどが提供するマクロとして定義しておき、そのマクロを挿入する方法も可能である。いずれの方法においても、挿入するコードは最終的なものである必要はない。なお、後で説明するアドレス解決プログラムが、最終的なコードを挿入するための空領域とともに、その領域をアドレス解決プログラムが発見できる様にするためのマークを挿入しておき、アドレス解決プログラムが後でコードを挿入する方法も選択できる。
図2は、開始挿入コードと終了挿入コードを挿入した後の実行プログラムのイメージである。図2の上部が、ファイルの先頭方向で、プログラムの実行は、上から下のコードへと処理が進む。図では、実行コードのイメージであるが、理解しやすくするため、ジャンプ命令やラベルなどを、アセンブラ表現で表現している。図2に示すように、実行プログラムは、開始挿入コード110、符号化対象コード120および終了挿入コード130を含む。開始挿入コード110が符号化対象コード120の直前に挿入され、終了挿入コード130が符号化対象コード120の直後に挿入されている。この状態では符号化対象コード120はまだ符号化されていない。
開始挿入コード110は、ジャンプ命令111、挿入コード開始マーク112、アドレス解決テーブル領域113、ジャンプ命令114、開始アドレス算出コード115、終了アドレス算出コード116、復号コード117および符号化開始マーク118を含む。開始挿入コード110の最初には、アドレス解決プログラムを適用した後に作成されるアドレス解決テーブルが実行されない様にするためのジャンプ命令111がある。その次に、アドレス解決プログラムが挿入コードおよびアドレス解決テーブルを作成する位置を特定するための挿入コード開始マーク112がある。アドレス解決プログラムの適用後には、挿入コード開始マーク112は不要になるので、アドレス解決テーブル領域113などと兼ねることも可能である。
その次に、挿入コード開始マーク112より大きな場合にのみ必要となるアドレス解決テーブルのための領域がある。このアドレス解決テーブル領域113は、アドレス解決プログラムがアドレス解決テーブルを作成するためのデータ領域である。その次に、一回の実行の時は何もせず、二回目以降の実行の時に符号化対象コードにジャンプするジャンプ命令114がある。これは、復号処理は一度だけでよく、二度目以降の復号を実行しなくするために必要である。本実施例では、一度復号したコードはそのままにしておくので、同じコードを何度も実行する場合には、二度目以降の実行時に復号処理を重ねて行わないために、二度目以降の実行であるか判定して、二度目以降である場合には、復号処理を回避する様に構成しておく。
その次に、アドレス解決テーブルから符号化対象コード120の開始位置へのオフセットを読み出し、これとアドレス解決テーブルの開始アドレスとから符号化対象コード120の開始アドレスを算出する開始アドレス算出コード115があり、次に同様に符号化対象コード120の終了アドレスを算出する終了アドレス算出コード116がある。次に、算出された符号化対象コード120のアドレスを元に符号化されている符号化対象コード120を復号する復号コード117がある。
復号コード117は、アドレス解決テーブルを参照して、符号化対象コード120の位置を取得して復号を行うものである。復号処理は、一般に知られている符号化の復号処理に従って行えばよい。復号コード117と、アドレス解決テーブルの相対位置が固定になっていれば、相対アドレス参照により復号コード117からアドレス解決テーブルを参照することができる。復号コード117と、アドレス解決テーブルの相対位置が変動する場合には、アドレス解決プログラムが、アドレス解決テーブルを参照する命令のオペランドを書きかえるか、または、復号コード117内に相対位置を示す情報または、絶対アドレスを埋め込み、アドレス解決テーブルを参照する命令がその相対位置または絶対アドレスを参照することで、アドレス解決テーブルが参照可能になる。
その次に、アドレス解決プログラムが符号化対象コード120の開始位置を特定するための符号化開始マーク118がある。終了挿入コード130には、アドレス解決プログラムが符号化対象コード120の終了位置を特定するための符号化終了マーク131がある。符号化開始マーク118および符号化終了マーク131は、符号化を行うコードの位置を特定するためのマークである。
再度図1に戻り、ステップS300で、開始挿入コード110と終了挿入コード130を挿入した実行プログラムのソースコードをコンパイラ、リンカにかけて、実行形式のプログラムに変換する。ここで、コンパイル処理およびリンク処理は汎用のコンパイラおよびリンカを利用することができる。
ステップS400で、実行形式のプログラムが生成できたら、生成されたプログラムにアドレス解決プログラムを適用する。アドレス解決プログラムの適用と、符号化の処理はまとめて行うようにすると、適用する上で簡便である。ステップS400の詳しい説明は後で行う。なお、リンカをかける前のオブジェクトコードに対して、上記のアドレス解決プログラムを適用することも可能である。この場合には、挿入するコードは位置独立コードになっている必要がある。さらに、符号化の実施は、リンカによってリンクした後に、別のプログラムの形で符号化を実行するのが適当である。
次にアドレス解決プログラム適用後の実行プログラムのイメージについて説明する。図3は、アドレス解決プログラムの適用後の実行プログラムのイメージを示している。アドレス解決後の実行プログラムは、開始挿入コード210、符号化対象コード120、終了挿入コード230を含む。符号化対象コード120は、アドレス解決プログラム適用後に符号化されている。開始挿入コード210は、ジャンプ命令111、アドレス解決テーブル119、ジャンプ命令114、開始アドレス算出コード115、終了アドレス算出コード116、復号コード117を含む。
図2で示した挿入コード開始マーク112およびアドレス解決テーブル領域113の箇所には、アドレス解決テーブル119が生成される。また、符号化開始マーク118および符号化終了マーク131の位置には、何もしないという命令nopが書き込まれる。
図4は、アドレス解決プログラムの処理の流れ(ステップ400)を示す。ステップS401で、最初はファイルの先頭から挿入コード開始マーク112を探す。マークを探す方法は、ファイルの先頭から順に、マークと比較することで可能である。マークが存在しえない領域を検索範囲から除外することで、検索の時間は短縮できる。また、アライメントなどの条件によりマークが挿入される場所のアドレスに特徴がある場合には、その特徴を利用してさらに検索範囲を限定することができる。
ステップS402で、挿入コード開始マーク112が見つからずにファイルの末尾に到達した時には、それまでに処理をしたファイルを出力してそこで処理を停止する。ステップS402で、挿入コード開始マーク112が見つかった場合には、ステップS403で、そのマークの次から符号化開始マーク118を検索する。挿入コード開始マーク112と符号化開始マーク118が置かれる距離が定まっていたり、ある一定以上の距離があることが確認されている場合には、符号化開始マーク118の検索を省略したり、定まった場所以降を検索することで、処理を省略することが可能になる。
ステップS403で符号化開始マーク118が正しく見つかった場合には、ステップS404で、挿入コード開始マーク112と符号化開始マーク118のコード中の距離を計算する。相対的アドレスを用いる方法では、例えば、アドレス解決テーブル119を開始マークの位置に設置して、アドレス解決テーブル119のエントリとして、開始マークの開始アドレスから符号化開始マーク118の開始アドレスの差分を記入する。
絶対アドレスを用いる方法では、メモリ内に対象とする実行ファイルがロードされた時に、ファイルがロードされるベースアドレスから、挿入コード開始マーク112がロードされるアドレスの差分を、実行ファイルが置かれると前提としているベースアドレスに加えて計算可能である。実行ファイルが置かれると前提としているベースアドレスは、一般に実行ファイルのへッダーに書かれているので、それを読めばよい。
ステップS405で、ステップS404で計算されたデータをアドレス解決テーブル119の最初のエントリに書き込む。本実施例では、挿入コード開始マーク112があった位置にアドレス解決テーブル119を作成するので、挿入コード開始マーク112の先頭部分に書き込む。次に、ステップS406で、符号化開始マーク118の次の位置から符号化終了マーク131を探す。探す方法は、挿入コード開始マーク112および符号化開始マーク118と同様である。ステップS406で正しくマークが見つかった場合には、ステップS407で、ステップS404と同様に、符号化終了マーク131までの距離を計算する。
次に、ステップS408で、ステップS407で計算した値をステップS405で書き込んだ次のエントリに書き込む。そして、ステップS409で、符号化開始位置から終了位置までのコードを予め定めておいた符号化方法に従って符号化する。これにより符号化対象コード120が符号化される。
さらに、符号化した次の位置から、次の挿入開始マークを検索して(ステップS401)、一つのファイルに対して複数の符号化を施す場合に対応する。また、挿入コード開始マーク112、符号化開始マーク118および符号終了マーク131の位置関係が正しくなかったり、一部見つからないマークがある場合には、エラー処理を行うことも当然必要となる。
図5は実施例1によるプログラム処理方法を説明する図である。プログラム処理方法では、ステップS500で、符号化された符号化対象コード120を一部に含むプログラムコード内に挿入され、符号化対象コードの範囲を示す符号化開始マーク及び符号化終了マークに基づき生成された符号化対象コードのアドレス表を参照して、該符号化対象コードのアドレスを計算し、この符号化対象コードのアドレスを用いて、符号化対象コード120を復号する。ステップS600で、復号した符号化対象コード120を実行する。ステップS700で、復号された符号化対象コード120を再度符号化する。これにより符号化対象コード120が符号化されていない時間を最小限に抑えることができる。
実施例1によれば、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で復号してから、復号したコードを実行する機能を、アセンブラの知識を持たない一般のプログラム作成者に対しても提供できる。
次に実施例2について説明する。実施例2は、符号化の範囲を入れ子の形にして、符号化を多重に適用する例である。図6は、多重の符号化を行う時のマークの並び方を示したイメージである。符号化の範囲を入れ子の形にして、符号化を多重に適用する際には処理の順序が異なる。図6に示すように、実行プログラムは、挿入コード開始マーク112A、符号化開始マーク118A、符号化終了マーク131A、挿入コード開始マーク112B、符号化開始マーク118Bおよび符号化終了マーク131Bを含む。
挿入コード開始マーク112A、符号化開始マーク118Aおよび符号化終了マーク131Aが二重符号化のためのマークである。挿入コード開始マーク112B、符号化開始マーク118Bおよび符号化終了マーク131Bは、一重符号化のためのマークである。図6に示す例では、挿入コード開始マーク112A、符号化開始マーク118A、挿入コード開始マーク112B、符号化開始マーク118Bが、見つかった所までスタックが積まれ、符号化終了マーク131Bが見つかった所で、スタックから挿入コード開始マーク112B、符号化開始マーク118Bの位置を取り出し、処理を行う。次に、符号化終了マーク131Aが見つかった所で、スタックから挿入コード開始マーク112A、符号化開始マーク118Aの位置を取り出し、アドレス解決テーブルの作成および符号化を行う。
図7は、多重化の場合のアドレス解決の処理フローチャートである。ステップS411で、ファイルの先頭からマークを検索していき、ステップS412で、マークを発見した場合、ステップS413に進み、マークを発見できない場合は、ステップS420で、スタックが空であるかどうかを調べ、スタックが空の場合は処理を終了し、スタックが空でない場合は、ステップ421でエラー処理を行う。
ステップS413で、見つかったマークが挿入コード開始マーク112Bの場合、ステップS414で次のマークの検索を行う。ステップS415で、見つかったマークが符号化開始マーク118Aの場合、ステップS416に進む。ステップS416で、挿入コード開始マーク112Bと符号化開始マーク118Bの位置情報をスタックへプッシュし、ステップS417で、次のマークを検索する。ステップS418で、見つかったマークが符号化終了マーク131Bの場合、ステップS419に進む。
ステップS419で、挿入コード開始マーク112Bと符号化開始マーク118Bの位置情報をスタックの先頭からポップし、一組みのマーク位置を元にアドレス解決および符号化を実行する。以下の手順と同様にして、三重以上の多重の符号化や、さらに複雑な入れ子構造の符号化の場合にも適用することが可能である。
実施例2によれば、符号化対象コード120を一部に含むプログラムコード内に符号化対象コードの範囲を示す符号化開始マーク118B及び符号化終了マーク131Bを挿入し、プログラムコードのコンパイル実行後に、符号化開始マーク118B及び符号化終了マーク131Bに基づいて符号化対象コードのアドレスを計算し、符号化対象コードのアドレスに基づいて、符号化対象コードのアドレス表を作成後、符号化対象コード120を符号化する。
その後、符号化対象コード120及び符号化対象コードの範囲を示す符号化開始マーク118B及び符号化終了マーク131Bを含む第2の符号化対象コードの範囲を示す符号化開始マーク118A及び符号化終了マーク131Aを挿入し、符号化開始マーク118A及び符号化終了マーク131Aに基づいて第2の符号化対象コードのアドレスを計算し、第2の符号化対象コードのアドレスに基づいて第2の符号化対象コードのアドレス表を作成し、第2の符号化対象コードを符号化する。これにより、符号化対象コードを入れ子状態にすることができる。なお、第2の符号化対象コードは、符号化対象コード120及び符号化対象コードの範囲を示す符号化開始マーク118B及び符号化終了マーク131Bを含む。
次に実施例3について説明する。実施例3は、アドレス解決プログラムによって、コンパイル後に開始挿入コードおよび終了挿入コードを挿入する例である。図8は実施例3の実行プログラム生成の全体的な手順である。実施例1と同一箇所には同一符号を付して説明する。図9は符号化対象コードの前後に開始挿入コードマークと終了挿入コードマークを挿入した後の実行プログラムを示す。まず、ステップS100で、プログラム作成者は、実行プログラムのソースコードを作成する。
次に、ステップS230で、開始挿入コードを挿入する位置を示すためのマークと、アドレス解決プログラムが開始挿入コードを挿入するための領域を確保するためのコードとを含む開始挿入コードマーク310を符号化対象コード120の前に挿入する。ステップS230で、終了挿入コードを挿入する位置を示すためのマークと、アドレス解決プログラムが終了挿入コードを挿入するための領域を確保するためのコードとを含む終了挿入コードマーク330を符号化対象コード120の後に挿入する。
このように、実施例3では、実施例1と異なり、ステップS230では、挿入するのは開始終了コードと終了挿入コードそのものではなく、後で開始挿入コードと終了挿入コードを挿入する位置を示すためのマークと、アドレス解決プログラムが後で開始挿入コードと終了挿入コードを挿入するための領域を確保するためのコードとを挿入する。ここで、コードの挿入方法は、直接コードないし、そのコードにコンパイルされるソースコードを挿入してもよいし、コードをインクルードファイルとして用意しておき、そのファイルをインクルードするようにしてもよい。また、コードをプリプロセッサなどが提供するマクロとして定義しておき、そのマクロを挿入してもよい。
図10は、ステップS230で挿入する開始挿入コードマーク310を説明する図である。オフセット位置0バイト目から8バイト目には所定の情報が記述されている。オフセット位置12バイト目の1が開始マークであることを示す。オフセット位置16バイト目の数字が、挿入するコードのための領域の大きさを示す。この例では、開始マークが256バイトの領域を確保していることを示す。オフセット位置20バイト目の0の配列はスペースを示す。
図11は、ステップS230で挿入する終了挿入コードマーク330を説明する図である。オフセット位置0バイト目から8バイト目には所定の情報が記述されている。オフセット位置12バイト目の2が、終了マークであることを示す。オフセット位置16バイト目の数字が、挿入するコードのための領域の大きさを示す。この例では、終了マークが256バイトの領域を確保していることを示す。オフセット位置20バイト目以降は、領域を確保するためのデータであり、その大きさは領域の大きさからマークの大きさである20バイトを引いただけの大きさである。オフセット位置20バイト目の0の配列はスペースを示す。
再度図8に戻り、ステップS300で、実行プログラムのソースコードをコンパイラ、リンカにかけて、実行形式のプログラムに変換する。ステップS400で、実行形式のプログラムができたら、生成されたプログラムにアドレス解決プログラムを適用する。
次に、アドレス解決プログラム適用後の実行プログラムのイメージについて説明する。図12はアドレス解決プログラム適用後の実行プログラムのイメージを示している。図12に示すように、アドレス解決後の実行プログラムは、開始挿入コード410、符号化対象コード120および終了挿入コード430を含む。次にステップS430によるアドレス解決プログラムの手順について説明する。図13は、実施例3におけるアドレス解決プログラムの手順の内で、一箇所の符号化を行う手順を示す。
まず、ステップS431で、符号化対象コード120の前に挿入された開始挿入コードマーク310を検索する。そして、ステップS432で、開始挿入コードマーク310にある領域の大きさを取得する。必要であれば、これから埋め込むコードの大きさに十分な領域が存在するか確認し、不足していればエラー処理を行う。
次に、ステップS433で、終了挿入コードマーク330を検索する。そして、ステップS434で、終了挿入コードマーク330にある領域の大きさを取得する。必要であれば、これから埋め込むコードの大きさに十分な領域が存在するか確認し、不足していればエラー処理を行う。次に、ステップS435で、開始挿入コード410の領域の先頭にジャンプ命令411を挿入する。また、終了挿入コード430の領域の先頭にジャンプ命令431を挿入する。
本実施例では、開始挿入コード410に二つのエントリを持つアドレス解決テーブルを設置するので、その大きさの8バイト(一エントリ4バイトとする)をまたぐジャンプ命令411を埋め込む。同様に、終了挿入コード430には、一つのエントリを持つアドレス解決テーブルを設置するので、4バイトをまたぐジャンプ命令431を埋め込む。次に、ステップS436で、開始挿入コード410の領域にアドレス解決テーブル412を作成する。このアドレス解決テーブル412は復号のためのものである。アドレス解決テーブル412を作成する場所は、ステップS435で埋め込んだジャンプ命令411の直後である。
埋め込むエントリは、本実施例では二つあり、符号化開始オフセットと符号化終了オフセットである。符号化開始オフセットは、開始挿入コード410に対するアドレス解決テーブル412の先頭から符号化開始の位置までの差分である。したがって、ステップ432で取得した開始挿入コード410の領域の大きさから、ジャンプ命令411の大きさ(ここでは、4バイトとする)を引いた大きさである。この様に算出されたオフセット値をアドレス解決テーブル412の先頭に書き込む。
符号化終了オフセットは、開始挿入コード410に対するアドレス解決テーブル412の先頭から符号化終了の位置までの差分である。したがって、ステップS433で見つけた終了挿入コードマーク330の位置とステップS431で見つけた開始挿入コードマーク310の位置の差分から、ジャンプ命令411の大きさ(ここでは、4バイトとする)を引いた大きさである。この様に算出されたオフセット値をアドレス解決テーブル412の次のエントリ(一つのエントリは4バイトである)に書き込む。
次に、ステップS437で、終了挿入コード430に対してアドレス解決テーブル432を作成する。このアドレス解決テーブルは再符号化のためのものである。アドレス解決テーブル432を作成する場所は、ステップS435で埋め込んだジャンプ命令431の直後である。終了挿入コード430の領域に埋め込むエントリは、本実施例では一つあり、開始挿入コード410の領域にあるアドレス解決テーブル412への終了挿入コード430の領域にあるアレドス解決テーブル432からのオフセットである。なお、復号用のアドレス解決テーブル412と同様の方法で、再暗号化用のアドレス解決テーブル432を作成する。
実施例3では、アレドス解決テーブル412、432はそれぞれの領域の先頭からジャンプ命令を置いた次から始まるので、開始挿入コード410の先頭と、終了挿入コード430の先頭の差分と等しい。この値を、ステップS435で埋め込んだジャンプ命令431の直後に書き込む。次に、ステップS438で、開始挿入コード410の領域に用意しておいたコードを埋め込む。ここでは、開始挿入コード410の領域に、符号化対象コード120の開始アドレスおよび終了アドレスを計算するためのコンパイル済みの開始アドレス算出コード414および終了アドレス算出コード415、符号化対象コード120を復号するためのコンパイル済みの復号コード416を挿入している。
開始挿入コード410は、決まったコードであるので、前もって用意しておき、アドレス解決プログラムに保持させておくか、アドレス解決プログラムが参照できる場所に格納しておき、読み出したコードをそのままアドレス解決テーブル412の直後に埋め込めばよい。開始挿入コード410の準備は、センブリ言語で作成し、コンパイラで位置独立コードを生成する指定とともにコンパイルして生成することができる。アセンブリ言語だけでなく、高級言語と必要であればインラインアセンブラを組み合せて作成すると、作成およびコードの管理が容易になる。
次に、ステップS439で、ステップS438と同様の方法で、終了挿入コード430の領域に用意しておいた挿入コードを埋め込む。ここでは、終了挿入コード430の領域に、符号化対象コード120の開始アドレスおよび終了アドレスを算出するためのコンパイル済みの開始アドレス算出コード434および終了アドレス算出コード435、符号化対象コード120を再度符号化(暗号化)のためのコンパイル済みの再暗号化コード436を挿入している。最後に、ステップS439で、符号化対象コード120を符号化して、元のコードの位置に上書きして、アドレス解決プログラムの一箇所の符号化の処理は終了する。
その後、実施例1の図5で説明したように、プログラム処理方法では、符号化された符号化対象コード120を一部に含むプログラムコード内に挿入された符号化対象コードのアドレス表を参照して、符号化対象コードのアドレスを算出し、符号化対象コードのアドレスに基づいて、符号化対象コード120を復号する。復号した符号化対象コード120を実行する。復号された符号化対象コード120を再度符号化する。
ステップ438および439において、挿入するコードは、以下のようにアセンブリ言語を用いて作成可能である。例えば、以下のアセンブリ(GNU アセンブラgas、armアーキテクチャ)のコードによって、アドレス解決テーブルから、符号化開始、終了のアドレスを計算することが可能である。
・0: .space 8 /* テーブルのダミー後で削除 */
・adr r1, 0b /* これ以降が開始挿入コード*/
・ldr r2, [r1]
・ldr r3, [r1, 4]
・add r2, r2, r1
・add r3, r3, r1
・mov r0, r2
・mov r1, r3
また復号コード417の実装は、特に新しい技術を必要としないので、すでに知られているものを利用できる。高級言語で実装して、コンパイルしたものを利用するのも容易である。例えば高級言語で実装する場合には、復号機能を関数で実装しておき、前のアドレス取得コードが復号アドレス情報を、スタックまたはレジスタに関数の呼び出し規約にしたがって正しく設定しておけばよい。上のアセンブラのコード例では、最後のmov命令によって、レジスタr0とr1にそれぞれ符号化されたコードの先頭アドレスと終了アドレスが設定されている。復号関数のコンパイル時には、レジスタr0とr1をポインタ型の引数として受けとる様にしておけばよい。
実施例3によれば、コンパイル後に開始挿入コードおよび終了挿入コードを挿入する場合でも、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で復号してから、復号したコードを実行する機能、さらに、実行後に再び暗号化し直す機能を、アセンブラの知識を持たない一般のプログラム作成者に対しても提供できる。
図14は、実施例1乃至3に係る実行プログラムを好適に生成することができる実行プログラム生成装置の構成を模式的に示したブロック図である。図14に示すように、実行プログラム生成装置100は、コンパイラ101、挿入手段102、アドレス計算手段103、アドレス表作成手段104、符号化手段105及び領域確保手段106を含む。実行プログラム生成装置100の実体は、同様の機能を実現するソフトウェア・プログラムをインストールした汎用コンピュータ・システムである。
コンパイラ101は、高級言語形式のソース・プログラム・コードをオブジェクト・プログラム・コードに変換するためのものである。挿入手段102は、符号化対象コード120を一部に含むプログラムコード内に符号化対象コードの範囲を示す符号化開始マーク及び符号化終了マークを挿入する。アドレス計算手段103は、プログラムコードのコンパイル実行後に、符号化開始マーク及び符号化終了マークに基づいて符号化対象コードのアドレスを計算する。
アドレス表作成手段104は、符号化対象コードのアドレスに基づいて、符号化対象コードのアドレス表を挿入コード開始マーク112の位置に作成する。このとき、アドレス計算手段104は、符号化開始マーク118及び符号化終了マーク118と挿入コード開始マーク112との位置の差分に基づいて、符号化対象コードのアドレスを計算してもよく。アドレス計算手段104は、実行ファイルがメモリ内にロードされるベースアドレスから挿入コード開始マーク112がロードされるアドレスの差分をベースアドレスに加えることで、符号化対象コードのアドレスを計算してもよい。符号化対象コードのアドレス表が上述したアドレス解決テーブルに対応する。
符号化手段105は、符号化対象コード120を符号化するものである。なお、符号化手段105は、符号化対象コード120を多重に符号化するようにしてもよい。領域確保手段106は、後で挿入できるためのコード領域を確保しておくものである。なお、挿入手段102は、実施例1で説明したように、プログラムコードのコンパイル前に、挿入コード開始マーク112、符号化対象コードのアドレスを計算する開始アドレス算出コード115、終了アドレス算出コード116、及び符号化対象コード120を復号する復号コード117を含む挿入コードをプログラムコード内に挿入してもよい。また、挿入手段102は、実施例3で説明したように、プログラムコードのコンパイル前に、開始挿入コードマーク310及び終了挿入コードマーク330をプログラムコード内に挿入し、プログラムコードのコンパイル後に、符号化対象コード120を復号するためのコンパイル済みの復号コード417及び符号化対象コードのアドレスを計算するためのコンパイル済みの開始アドレス算出コード415、終了アドレス算出コード416等を開始挿入コードマーク310や終了挿入コードマーク330の位置に挿入してもよい。なお、アドレス解決プログラムにより、図14で示した挿入手段102、アドレス計算手段103、アドレス表作成手段104、符号化手段105及び領域確保手段106が実現される。
図15はプログラム処理装置の構成を模式的に示したブロック図である。図15に示すように、プログラム処理装置200は、制御手段201、アドレス計算(算出)手段202、復号手段203及び符号化手段204を含む。このプログラム処理装置200は、実行プログラム生成装置100により生成された実行プログラムを処理するものである。制御手段201は、プログラム処理装置200の全体を制御する。アドレス計算手段202は、符号化された符号化対象コード120を一部に含むプログラムコード内に挿入された符号化対象コードのアドレス表を参照して、符号化対象コードのアドレスを算出する。復号手段203は、アドレス計算手段202が算出した符号化対象コードのアドレスに基づいて、符号化対象コード120を復号する。符号化手段204は、復号手段が復号した符号化対象コード120を符号化する。なお、アドレス計算手段202は、例えば図2で示した開始アドレス算出コード115及び終了アドレス算出コードにより実現され、復号手段203は、例えば図2で示した復号コード117により実現される。
また、上記各実施例によれば、高級言語で記述されたプログラムをコンパイルした後の実行コードの一部を、符号化しておき、実行時に復号する機能を提供するにあたって、符号化するプログラムコードの範囲を示すための符号化開始マークおよび符号化終了マークを挿入し、コンパイルの実行後に、マークで挟まれたプログラムコードを符号化するとともに、復号手段が復号するコードの範囲のアドレス解決のための表を作成する。
符号化するプログラムの範囲を示すための符号化開始マークおよび符号化終了マークを挿入する手段は、復号手段も同時に挿入するか、後で挿入できるためのコード領域を確保しておく。加えて、復号するコードの範囲を始めとするコードを、復号手段が参照する挿入先のコード箇所の数だけ、アドレス解決に必要となる表の為の領域を確保するように構成しておく。コンパイルの実行後に、プログラムコードを符号化する手段は、前記のマークで挟まれたプログラムコードを、符号化するとともに、符号化開始マークおよび符号化終了マークを参照することによって、復号する手段が復号するコードの範囲のアドレスを取得のために、アドレス解決のための表を作成する。
さらに、符号化開始マークおよび符号化終了マークを挿入する手段が、コードを復号する手段を挿入せずに、コードを復号する手段を挿入するための領域を確保していた場合には、符号化する手段にて、コードを復号する手段のコードを挿入する。そして、コードを復号する手段は、最終的に作成されたプログラムの実行時に、コードを復号する手段が作成した復号するコードが、アドレス解決に必要となる表を参照してアドレス計算を行い、符号化されたコードを参照して、復号するように構成しておく。
以上の構成により、プログラムコードの一部分を符号化しておき、自らのプログラムコード内で、復号してから復号したコードを実行する機能を符号化を行うプログラムをコンパイルする作業者に対して、復号モジュールのソースプログラムを開示することなく、符号化したコードを含む関数内にインライン展開する方法を実現する。さらに、コードを復号する手段から、符号化されたコードのアドレスを取得するようなコードを記述するために、アセンブリ言語のラベルを使用する必要がない。このため、ラベル名の唯一性を維持する必要なしに、一つの関数内で複数箇所または多重に符号化する構成をとることが可能となる。
以上本発明の好ましい実施例について詳述したが、本発明は係る特定の実施例に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形、変更が可能である。
実施例1のプログラム生成の全体的な手順である。 開始挿入コードと終了挿入コードを挿入した後の実行プログラムのイメージである。 アドレス解決プログラムの適用後の実行プログラムのイメージを示している。 アドレス解決プログラムの処理の流れを示している。 実施例1によるプログラム処理方法のフローチャートである。 多重の符号化を行う時のマークの並び方を示したイメージである。 多重化の場合のアドレス解決の処理フローチャートである。 実施例3の実行プログラム生成の全体的な手順である。 符号化対象コードの前後に開始挿入コードマークと終了挿入コードマークを挿入した後の実行プログラムである。 開始挿入コードマークを説明する図である。 終了挿入コードマークを説明する図である。 アドレス解決プログラム適用後の実行プログラムのイメージを示している。 実施例3におけるアドレス解決プログラムの手順を示す図である。 実行プログラム生成装置の構成を模式的に示したブロック図である。 プログラム処理装置の構成を模式的に示したブロック図である。
符号の説明
100 実行プログラム生成装置
101 コンパイラ
102 挿入手段
103 アドレス計算手段
104 アドレス表作成手段
105 符号化手段
200 プログラム処理装置
201 制御手段
202 アドレス計算手段
203 復号手段
204 符号化手段

Claims (18)

  1. 符号化対象コードを一部に含むプログラムコード内に該符号化対象コードの範囲を示すマークを挿入する挿入手段と、
    前記プログラムコードのコンパイル実行後に、前記マークに基づいて前記符号化対象コードのアドレスを計算するアドレス計算手段と、
    前記符号化対象コードのアドレスに基づいて、前記符号化対象コードのアドレス表を作成するアドレス表作成手段と
    を含むことを特徴とする実行プログラム生成装置。
  2. 前記実行プログラム生成装置は更に、前記符号化対象コードを符号化する符号化手段を含むことを特徴とする請求項1記載の実行プログラム生成装置。
  3. 前記アドレス計算手段は、前記マークと所定のマークとの位置の差分に基づいて、前記符号化対象コードのアドレスを計算することを特徴とする請求項1記載の実行プログラム生成装置。
  4. 前記アドレス計算手段は、実行ファイルがメモリ内にロードされるベースアドレスから所定のマークがロードされるアドレスの差分を該ベースアドレスに加えることで、前記符号化対象コードのアドレスを計算することを特徴とする請求項1記載の実行プログラム生成装置。
  5. 前記実行プログラム生成装置は更に、前記プログラムコードのコンパイル前に、所定のマーク、前記符号化対象コードのアドレスを算出するアドレス算出コード及び前記符号化対象コードを復号する復号コードのうちの少なくともいずれか一つを含む挿入コードを前記プログラムコード内に挿入する挿入手段を含むことを特徴とする請求項1から請求項4のいずれか一項に記載の実行プログラム生成装置。
  6. 前記アドレス表作成手段は、所定のマークの位置に前記符号化対象コードのアドレス表を作成することを特徴とする請求項1から請求項5のいずれか一項に記載の実行プログラム生成装置。
  7. 前記挿入手段は、前記符号化対象コード及び前記符号化対象コードの範囲を示すマークを含む第2の符号化対象コードの範囲を示す第2のマークを挿入し、
    前記アドレス計算手段は、前記第2のマークに基づいて前記第2の符号化対象コードのアドレスを計算し、
    前記アドレス表作成手段は、前記第2の符号化対象コードのアドレスに基づいて前記第2の符号化対象コードのアドレス表を作成し、
    前記符号化手段は、前記第2の符号化対象コードを符号化することを特徴とする請求項2記載の実行プログラム生成装置。
  8. 符号化対象コードを一部に含むプログラムコード内に該符号化対象コードの範囲を示すマークを挿入する挿入ステップと、
    前記プログラムコードのコンパイル実行後に、前記マークに基づいて前記符号化対象コードのアドレスを計算するアドレス計算ステップと、
    前記符号化対象コードのアドレスに基づいて、前記符号化対象コードのアドレス表を作成するアドレス表作成ステップと
    を含むことを特徴とする実行プログラム生成方法。
  9. 前記実行プログラム生成方法は更に、前記符号化対象コードを符号化する符号化ステップを含むことを特徴とする請求項8記載の実行プログラム生成方法。
  10. 前記アドレス計算ステップは、前記マークと所定のマークとの位置の差分に基づいて、前記符号化対象コードのアドレスを計算することを特徴とする請求項8記載の実行プログラム生成方法。
  11. 前記アドレス計算ステップは、実行ファイルがメモリ内にロードされるベースアドレスから所定のマークがロードされるアドレスの差分を該ベースアドレスに加えることで、前記符号化対象コードのアドレスを計算することを特徴とする請求項8記載の実行プログラム生成方法。
  12. 前記実行プログラム生成方法は更に、前記プログラムコードのコンパイル前に、所定のマーク、前記符号化対象コードのアドレスを算出するアドレス算出コード及び前記符号化対象コードを復号する復号コードのうちの少なくともいずれか一つを含む挿入コードを前記プログラムコード内に挿入するステップを含むことを特徴とする請求項8から請求項11のいずれか一項に記載の実行プログラム生成方法。
  13. 前記実行プログラム生成方法は更に、前記プログラムコードのコンパイル前に、少なくとも所定のマークを含む挿入コードを前記プログラムコード内に挿入する第1挿入ステップと、
    前記プログラムコードのコンパイル後に、前記符号化対象コードを復号するためのコンパイル済みの復号コード及び前記符号化対象コードのアドレスを算出するためのコンパイル済みのアドレス算出コードのうちの少なくともいずれか一方を前記第1挿入ステップで挿入したマークの位置に挿入する第2挿入ステップとを含むことを特徴とする請求項8から請求項11のいずれか一項に記載の実行プログラム生成方法。
  14. 符号化対象コードを一部に含むプログラムコード内に該符号化対象コードの範囲を示すマークを挿入する挿入ステップ、
    前記プログラムコードのコンパイル実行後に、前記マークに基づいて前記符号化対象コードのアドレスを計算するアドレス計算ステップ、
    前記符号化対象コードのアドレスに基づいて、前記符号化対象コードのアドレス表を作成するアドレス表作成ステップをコンピュータに実行させるプログラム。
  15. 前記プログラムは更に、前記符号化対象コードを符号化する符号化ステップを前記コンピュータに実行させる請求項14記載のプログラム。
  16. 符号化された符号化対象コードを一部に含むプログラムコード内に挿入され、該符号化対象コードの範囲を示すマークに基づき生成された符号化対象コードのアドレス表を参照して、該符号化対象コードのアドレスを算出するアドレス算出手段と、
    前記アドレス算出手段が算出した符号化対象コードのアドレスに基づいて、前記符号化対象コードを復号する復号手段と、
    前記復号手段が復号した符号化対象コードを符号化する符号化手段と
    を含むことを特徴とするプログラム処理装置。
  17. 符号化された符号化対象コードを一部に含むプログラムコード内に挿入され、該符号化対象コードの範囲を示すマークに基づき生成された符号化対象コードのアドレス表を参照して、該符号化対象コードのアドレスを算出するアドレス算出ステップと、
    前記符号化対象コードのアドレスに基づいて、前記符号化対象コードを復号する復号ステップと、
    前記符号ステップで復号した符号化対象コードを実行する実行ステップと、
    前記復号ステップで復号された符号化対象コードを符号化する符号化ステップと
    を含むことを特徴とするプログラム処理方法。
  18. 符号化された符号化対象コードを一部に含むプログラムコード内に挿入され、該符号化対象コードの範囲を示すマークに基づき生成された符号化対象コードのアドレス表を参照して、該符号化対象コードのアドレスを算出するアドレス算出ステップ、
    前記符号化対象コードのアドレスに基づいて、前記符号化対象コードを復号する復号ステップ、
    前記復号ステップで復号された符号化対象コードを符号化する符号化ステップをコンピュータに実行させるプログラム。
JP2004253636A 2004-08-31 2004-08-31 実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラム Pending JP2006072584A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004253636A JP2006072584A (ja) 2004-08-31 2004-08-31 実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004253636A JP2006072584A (ja) 2004-08-31 2004-08-31 実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラム

Publications (1)

Publication Number Publication Date
JP2006072584A true JP2006072584A (ja) 2006-03-16

Family

ID=36153167

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004253636A Pending JP2006072584A (ja) 2004-08-31 2004-08-31 実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP2006072584A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101328012B1 (ko) 2013-08-12 2013-11-13 숭실대학교산학협력단 애플리케이션 코드 난독화 장치 및 그 방법
KR101350390B1 (ko) * 2013-08-14 2014-01-16 숭실대학교산학협력단 코드 난독화 장치 및 그 방법
WO2015046655A1 (ko) * 2013-09-27 2015-04-02 숭실대학교 산학협력단 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
JP2016538640A (ja) * 2013-11-14 2016-12-08 インカ・エントワークス・インコーポレイテッドInka Entworks, Inc. プログラム保護装置

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101328012B1 (ko) 2013-08-12 2013-11-13 숭실대학교산학협력단 애플리케이션 코드 난독화 장치 및 그 방법
WO2015023024A1 (ko) * 2013-08-12 2015-02-19 숭실대학교 산학협력단 애플리케이션 코드 난독화 장치 및 그 방법
KR101350390B1 (ko) * 2013-08-14 2014-01-16 숭실대학교산학협력단 코드 난독화 장치 및 그 방법
WO2015023023A1 (ko) * 2013-08-14 2015-02-19 숭실대학교 산학협력단 코드 난독화 장치 및 그 방법
WO2015046655A1 (ko) * 2013-09-27 2015-04-02 숭실대학교 산학협력단 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
JP2016538640A (ja) * 2013-11-14 2016-12-08 インカ・エントワークス・インコーポレイテッドInka Entworks, Inc. プログラム保護装置

Similar Documents

Publication Publication Date Title
KR100841282B1 (ko) 보호된 실행 프로그램의 작성을 위한 기록 매체, 방법 및장치
CN108681457B (zh) 基于代码下沉与残码解释的Android应用程序保护方法
EP3812894B1 (en) A system and method for encapsulating and enabling protection through diverse variations in software libraries
US8453128B2 (en) Method and system for implementing a just-in-time compiler
US10635823B2 (en) Compiling techniques for hardening software programs against branching programming exploits
TWI453671B (zh) 用於程式碼轉換期間之本機碼和目標碼的組合執行之方法與裝置
BRPI0614089A2 (pt) método para evitar engenharia reversa de software, modificação não autorizada e interceptação de dados de tempo de execução
US20030167458A1 (en) Programmatic access to the widest mode floating-point arithmetic supported by a processor
JP2011123917A (ja) 対象プログラム・コードを目的プログラム・コードに変換するための方法、並びにコンピュータ・プログラム及びコンピュータ
KR102028091B1 (ko) 덱스 파일의 메모리 적재 장치 및 방법
CN109598107B (zh) 一种基于应用安装包文件的代码转换方法及装置
JP2001175466A (ja) 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体
US9489315B2 (en) Method of executing, by a microprocessor, a polymorphic binary code of a predetermined function
CN111597514A (zh) 安卓源代码保护方法和装置
Hirschowitz et al. Compilation of extended recursion in call-by-value functional languages
US6802060B1 (en) Linker using relocation sequences
JP2006072584A (ja) 実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラム
JP5387089B2 (ja) プログラム及びプログラム実行装置
JP2006318465A (ja) 実行可能コードのコピーについての固有の識別を生成する方法及びその管理
US6314564B1 (en) Method for resolving arbitrarily complex expressions at link-time
EP0790555B1 (en) Compile apparatus and method
US20050125783A1 (en) Program optimization with intermediate code
JP2002182926A (ja) コンパイル方法及びコンピュータ読み取り可能な記録媒体
JP2009258796A (ja) プログラム開発装置及びプログラム開発方法
JP5910197B2 (ja) 組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム