JP4559937B2 - プログラム生成装置 - Google Patents

プログラム生成装置 Download PDF

Info

Publication number
JP4559937B2
JP4559937B2 JP2005253463A JP2005253463A JP4559937B2 JP 4559937 B2 JP4559937 B2 JP 4559937B2 JP 2005253463 A JP2005253463 A JP 2005253463A JP 2005253463 A JP2005253463 A JP 2005253463A JP 4559937 B2 JP4559937 B2 JP 4559937B2
Authority
JP
Japan
Prior art keywords
domain
function
instruction
program
access
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.)
Expired - Fee Related
Application number
JP2005253463A
Other languages
English (en)
Other versions
JP2007066163A (ja
Inventor
信 茂 太 國
博 正 進
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2005253463A priority Critical patent/JP4559937B2/ja
Priority to US11/514,224 priority patent/US20070079283A1/en
Publication of JP2007066163A publication Critical patent/JP2007066163A/ja
Application granted granted Critical
Publication of JP4559937B2 publication Critical patent/JP4559937B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Description

本発明は、プログラム生成方法およびプログラムに関する。
単一メモリアドレス空間上で複数のプログラムコンポーネントが実行される環境においては、1つのプログラムコンポーネントにバグや悪意が含まれているだけで、他のコンポーネントの利用しているメモリ領域を破壊してしまい、システム全体がダウンしてしまう可能性がある。そこで、単一メモリアドレス空間上にコンポーネント境界を設け、1つのプログラムコンポーネントにバグや悪意が含まれていても、他のコンポーネントに影響を与えないようにする技術がある。
例えば、アクセス制限を付与したいメモリの領域とその領域に対するアクセス制限の種類( Execute(EX)・Read-Write(RW)・Read-Only(RO)・Access-Inhibit(NO) )を表したアクセス制御表を用意し、CPUとメモリ装置間のメモリ保護装置が、このアクセス制御表を元にCPUからメモリ装置へのアクセスを管理することでメモリ保護を実現する。このためには、ソフトウェア開発者は、プログラムの利用するメモリ領域(テキスト領域・データ領域・ヒープ領域・スタック領域)の使用方法を考慮し、メモリ保護装置を利用することを前提としたコードをプログラムに書かならず、ソフトウェア開発者にとって大きな負担となっている。さらに、人手でメモリ保護機能という主機能でない付加的な機能を加えることにより、プログラムの信頼性が低下する危険性がある。また、他者の開発したプログラムを利用する場合、メモリ保護機能を利用できない場合もある。
特開平5−289944公報
本発明は、メモリ空間を保護するプログラムをソフトウェア開発者に大きな負担をかけることなく生成できるようにしたプログラム生成方法およびプログラムを提供する。
本発明の一態様としてのプログラム生成装置は、
メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
前記ソースプログラムを解析して前記ソースプログラムに記述された関数と前記関数に含まれる大域変数とを検出し、前記メモリ保護ポリシーに記述された前記情報に従って、前記大域変数と、前記大域変数を利用するドメインとを対応づけた情報を生成する生成部と、
前記メモリ保護ポリシーに記述された前記ドメイン間の上位下位関係に従って、前記大域変数を利用するドメインを上位ドメインと下位ドメインとに分割する分割部と、
前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
(A)前記上位ドメインに対応するアクセス制御表において前記大域変数に対してのアクセス制限を読み書き許可に設定する命令を前記ソースプログラムに追加
(B)前記下位ドメインに対応するアクセス制御表において前記大域変数に対してのアクセス制限を読み出し許可に設定する命令を前記ソースプログラムに追加する
追加部と、
を備え、
前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記(A)および前記(B)で追加された前記命令の実行によって操作されることを特徴とする。
本発明の一態様としてのプログラム生成装置は、
メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
(A)前記関数が他の関数によって呼び出された場合に前記関数がスタック領域にアクセスできるようにするため、前記関数が属するドメインに対応するアクセス制御表においてスタックポインタからベースポインタによって指定される範囲までのメモリ領域に対するアクセス制限を読み書き可能に設定する命令を前記関数に追加し、
(B)前記関数が属するドメインに対応する前記アクセス制御表において前記メモリ領域に対するアクセス制限をアクセス禁止に設定する命令を、前記関数におけるリターン命令の前に追加する
追加部と、
を備え、
前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記(A)および前記(B)で追加された命令の実行によって操作される
ことを特徴とする。
本発明の一態様としてのプログラム生成装置は、
メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
(A)前記関数が、前記関数と異なるドメインに属する他の関数によって呼び出された場合に、前記関数が前記関数の引数にアクセスできるようにするため、前記関数が属するドメインに対応するアクセス制御表において前記引数へのアクセス制限を読み書き許可または読み出し許可に設定する第1命令を前記ソースプログラムに追加し、
(B)前記関数の実行後に前記関数の属するドメインから前記引数へアクセスできないようにするため、前記関数が属するドメインに対応する前記アクセス制御表において前記引数へのアクセス制限をアクセス禁止に設定する第2命令を前記ソースプログラムに追加する
追加部と
前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記(A)および前記(B)で追加された前記第1命令および前記第2命令の実行よって操作されることを特徴とする
本発明の一態様としてのプログラム生成装置は、
メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
前記ソースプログラムから動的メモリ確保命令およびメモリ解放命令を検出する検出部と
前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
(A)検出された前記動的メモリ確保命令が属するドメインとこのドメインの上位ドメインとのそれぞれに対応するアクセス制御表において、前記動的メモリ確保命令によって確保されたメモリ領域に対するアクセス制限を読み書き許可に設定する命令を前記ソースプログラムに追加し、
(B)前記検出された前記動的メモリ確保命令が属するドメインの下位ドメインに対応するアクセス制御表において、前記動的メモリ確保命令によって確保されたメモリ領域に対するアクセス制限を読み出し許可に設定する命令を前記ソースプログラムに追加
(C)前記検出された前記動的メモリ確保命令が属するドメインと前記上位ドメインと前記下位ドメインとのそれぞれに対応するアクセス制御表において、前記メモリ解放命令によって開放されたメモリ領域に対するアクセス制限をアクセス禁止に設定する命令を前記ソースプログラムに追加する、
追加部と、
前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記(A)、前記(B)および前記(C)で追加された前記命令の実行によって操作されることを特徴とする
本発明の一態様としてのプログラム生成装置は、
メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
前記プログラムの実行時に前記関数が配置されるメモリ領域にアクセスできるようにするため、前記関数が属するドメインに対応するアクセス制御表において、前記メモリ領域に対するアクセス制限を実行可能に設定する命令を前記ソースプログラムに追加する、追加部と、
前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記追加された命令の実行によって操作されることを特徴とする
本発明により、メモリ空間を保護するプログラムをソフトウェア開発者に大きな負担をかけることなく生成できる。
本実施の形態は、プログラム内の各関数を、プログラムで利用される機能毎にドメインとして分類したメモリ保護ポリシーと、プログラムとを入力とし、ドメイン境界を越えてバグ等の不具合が伝播しないような形でメモリ保護装置を利用できるプログラムを自動作成しようとするものである。以下、本実施の形態について、図面を参照しながら、説明する。
図1は、本実施の形態によって作成したメモリ保護機能付きプログラムの実行環境を示すシステム構成図である。
このシステムは、CPU12と、メモリ装置13と、アクセス制御装置11とを備える。メモリ装置13は、本実施の形態によって作成したメモリ保護機能付きプログラムを格納し、CPU12は、このメモリ保護機能付きプログラムを実行する。メモリ保護装置(アクセス制御装置)11はCPU12とメモリ装置13との間に位置し、メモリ装置13内のアクセス制御表を参照して、CPU12からメモリ装置13へのアクセスを監視する。アクセス制御表はドメインごとに存在する。アクセス制御表は、本実施の形態により作成されたメモリ保護機能付きプログラムからアクセス制御表を操作する関数によって操作される。また、アクセス制御装置11にどのドメインのアクセス制御表を参照させるかも、作成されたメモリ保護機能付きプログラムによって指定する。アクセス制御装置11は、CPU12からのアクセスが、対応するアクセス制御表によって許容されている場合はメモリ装置13へのアクセスを通過させるが許容されていない場合はアクセスを遮断するように機能する。
図2は、本発明の実施の形態に従ったプログラム生成方法を実行する環境としてのプログラム生成装置の構成を示すブロック図である。このプログラム生成装置は、入力されたメモリ保護ポリシーと、入力されたソースプログラムとから、メモリ保護機能付きソースプログラムを作成する機能を有する。図1で説明したメモリ保護機能付きプログラムは、このメモリ保護機能付きソースプログラムをコンパイルおよびリンク処理して実行可能形式にしたものに相当する。
図2のプログラム生成装置は、入力されたソースプログラムにメモリ保護に関するコードを織り込むために、大きくWeaver1とWeaver2の2つの装置を利用する。Weaver1およびWeaver2は、これらの機能がハードウェアによって実現される場合はハードウェアモジュールを表し、プログラムによって実現される場合はプログラムモジュールを表す。
Weaver1は、データ領域・スタック領域・ヒープ領域に関するアクセス制御表操作命令をソースプログラムに織り込む。Weaver1は、テキスト領域に関するアクセス制御表操作命令に関しては、メモリアドレス範囲を未設定の状態でプログラムに織り込んでおく。
コンパイラ&リンカ3は、Weaver1を経たソースプログラムを元に、テキスト領域における関数の終端アドレスを記した終端アドレス表を作成する。
Weaver2は、コンパイラ&リンカ3の出力する終端アドレス表を利用して、Weaver1において未設定であった関数のメモリアドレス範囲を確定し、確定したメモリアドレス範囲を、Weaver1を経たソースプログラムに書き込む。
Weaver2を経たソースプログラム(メモリ保護付きソースプログラム)に、通常のコンパイル処理およびリンク処理を施すことにより、CPU12により実行可能なメモリ保護機能付きプログラムを得る。
図3は、Weaver1の機能ブロック図である。図4は、Weaver1により行われる処理を詳細に説明するフローチャートである。
Weaver1は、図4のステップ[1]〜[10]において元のソースプログラムの適切な箇所にメモリ保護用命令を書き加える。図4のフローチャートにおけるステップ[1]〜[10]の順は一例であり、これらの順は任意でもよい。各ドメインの各々に対応するアクセス制御表の初期状態は、全領域(スタック領域、ヒープ領域、データ領域、テキスト領域)でNO(アクセス禁止)とする。
図5は、アクセス制御表の例を示す。
ここでは、2つのドメイン(domain1, domain2)のアクセス制御表が示される。アクセス制御表は、メモリ領域における各メモリアドレスのアクセス制限を管理する。アクセス制限には、Execute(EX)・Read-Write(RW)・Read-Only(RO)・Access-Inhibit(NO)があり、各メモリアドレスはこれらのうちのいずれかのアクセス制限が設定される。初期状態では、domain1およびdomain2のいずれのアクセス制御表においても全メモリアドレスにおいてNOが設定されている。
以下、図3および図4を用いて、Weaver1について詳細に説明する。
ステップ[0]:Weaver1は、ポリシー解析機能21を用いて、メモリ保護ポリシーから、「関数−ドメイン対応情報」「ドメイン階層情報」「引数情報」を作成する。また、Weaver1は、大域変数利用ドメイン解析機能22を用いて、ソースプログラムおよびメモリ保護ポリシーから、「大域変数−利用ドメイン情報」を作成する。
図6は、メモリ保護ポリシーの一例を示す。また、図7(A)は関数―ドメイン対応情報の例を示し、図7(B)はドメイン階層情報の例を示し、図7(C)は引数情報の例を示し、図7(D)は、大域変数―利用ドメイン情報の例を示す。
図6において、メモリ保護ポリシーは、ソースプログラム内の各関数を機能毎にドメインとして分類したものである。メモリ保護ポリシーはプログラマなどによってあらかじめ作成される。図6の例では、2つのドメイン、すなわちdomain1およびdomain2が定義される。関数mainはdomain1に属し、関数show_stringはdomain2に属する。関数show_stringはchar型をさすポインタ引数cを含み、関数show_stringが属するドメインに対応するアドレス制御表において、ポインタcによって示されるアドレスからサイズ100(例えば100バイト)の領域(データ領域)を、RO(Read Only)に設定することが示される。hierarchyは各ドメイン間の階層を定めたものであり、本例では、domain1の階層がdomain2よりも上位である。
図7(A)において、関数−ドメイン対応情報は、関数と、当該関数の属するドメインとを対応づけたものである。
図7(B)において、ドメイン階層情報は、ドメイン間の階層関係を表したものである。
図7(C)において、引数情報は、プログラムで用いられる各関数に含まれる引数の情報を表したものである。「引数指定」は、関数で用いられる引数を識別するものであり、関数に複数の引数が用いられる場合、最初の引数(例えばカッコ内の一番左側に記述された引数)は第一引数、2番目の引数は第二引数として識別する。show_stringは1つの引数しかもたないため第一引数のみが記述される。「引数のタイプ」は引数が参照型か値かを示すものであり、引数がポインタ等の場合は「参照」になり、数値等である場合は「値」になる。「サイズ」は引数のサイズ(本例では4バイト)である。「参照先のサイズ」は、ポインタ等によって指定されるアドレスから何バイト先までを扱うかを示すものである。「参照先のアクセス制限」は、「参照先のサイズ」によって示される領域のアクセス制限を表すものである。
図7(D)において、大域変数−利用ドメイン情報は、プログラムで用いられる各大域変数の情報を表したものである。各大域変数はソースプログラムを走査することで検出される。「利用するドメイン」は大域変数が用いられる関数が属するドメインである。大域変数が属する関数をソースプログラムから全て検出し、検出された関数がどのドメインに属するかをメモリ保護ポリシーもしくは関数−ドメイン対応情報から検出することで、大域変数の「利用するドメイン」を決定する。
ステップ[1]:Weaver1は、アクセス制御表操作関数、スタックポインタ取得関数、ベースポインタ取得関数およびアクセス制御表切り替え関数を、新たな関数として、ソースプログラムに定義する(後述する図12の[1]参照)。
アクセス制御表操作関数は、ドメイン、メモリアドレス範囲およびアクセス制限を指定することにより、指定されたドメインに対応するアクセス制御表における指定されたメモリアドレス範囲に、指定されたアクセス制限を登録する関数である。
以後の説明では、ドメイン集合Dに含まれるドメインd(d∈D)のアクセス制御表において、アドレスstからedまでの範囲を、アクセス制限a∈{RO, RW, EX, NO}で登録する関数を
add_address(st , ed , a , {d})
と表記する。
また、ドメイン集合Dに含まれるドメインdのアクセス制御表において、アドレスstからサイズsバイトの範囲をアクセス制限aで登録する関数を
add_address2(st , s , a , {d})
と表記する。
スタックポインタ取得関数は、実行中の関数において、スタックポインタのアドレスを取得する関数である。
以後の説明では、スタックポインタ取得関数を
get_esp()
と表記する。
ベースポインタ取得関数は、実行中の関数において、ベースポインタのアドレスを取得する関数である。
以後の説明では、ベースポインタ取得関数を
get_ebp()
と表記する。
アクセス制御表切り替え関数は、アクセス制御装置11が参照するアクセス制御表を指定のドメインdのものに切り替えるための関数である。
以後の説明では、この関数を
dom_change(d)
と表記する。
ステップ[2]:大域変数が利用する領域についてのアクセス制限をアクセス制御表に登録する命令を、図8に示すフローチャートの手順にしたがって、プログラムの開始直後(main関数開始直後)に1回だけ実行される形で追加する。大域変数−利用ドメイン情報に現れる全ての大域変数について、図8の手順に従い、命令を追加する。より詳細には以下の通りである。
Weaver1における、大域変数を介した不具合伝播防止情報作成機能23は、対象とする大域変数(ここでは仮にgとする)を利用するドメインが1つであるか否かを、大域変数―利用ドメイン情報を元に判定する(S11)。
大域変数gを利用するドメインが1つである場合は(S11のYES)、そのドメイン(ここでは仮にdとする)を対象に、add_address2(&g, sizeof(g), RW, {d});を生成する。そして、この命令と、この命令を挿入すべきソースプログラム上の位置(main関数開始直後)とを、大域変数を介した不具合伝播防止情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この不具合伝播防止情報を元に、ソースプログラムに、上記命令を挿入する(S12)(図12の[2]参照)。
S11において大域変数gを利用するドメインが複数の場合は(S11のNO)、ドメイン階層情報を元に、各ドメイン間で最上位ドメインが決定可能か否かを判定する(S13)。最上位ドメインを決定可能な場合は(S13のYES)、最上位ドメインをd1、それ以外のドメインをd2,…dnとすると、最上位ドメインd1を対象にadd_address2(&g, sizeof(g), RW, {d1});を、それ以外のドメインd2,…dnを対象にadd_address2(&g, sizeof(g), RO, { d2,…dn });を生成する。そして、これらの命令と、これらの命令を挿入すべきソースプログラム上の位置(main関数開始直後)とを、大域変数を介した不具合伝播防止情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この不具合伝播防止情報を元に、ソースプログラムに、これらの命令を挿入する(S14)。
S13において最上位ドメインを決定可能でない場合は(S13のNO)、大域変数gを利用するドメインをd1,…dnとすると、add_address2(&g, sizeof(g), RO, { d1,…dn });を生成する。そして、この命令と、この命令を挿入すべきソースプログラム上の位置(main関数開始直後)とを、大域変数を介した不具合伝播防止情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この不具合伝播防止情報を元に、ソースプログラムに、上記命令を挿入する。
以上の手順において、各ドメインに対するアクセス制御を、大域変数−利用ドメイン情報の作成の際に、これに「利用方法」として含めておき、この利用方法を含んだ大域変数−利用ドメイン情報を用いて、大域変数を介した不具合伝播防止情報を作成してもよい。この場合、図8の手順において、ドメイン間の階層関係を判断する手順(S11、S13)を省略できる。
なお、最上位ドメインが複数、もしくは、1つに決まる場合でも、プログラム解析により、その最上位ドメインに属する全ての関数が大域変数gから値を読み込まないことが分かるならば(例えば書き込みのみの場合)、最上位ドメインに対してはa = RWとした上で、第2順位のドメインを最上位のドメインとして扱うことができる(第2順位のドメインに対してもa=RWとできる)。
ステップ[3]:Weaver1は、ソースプログラム内の全関数について、各々の関数のプログラム命令が格納される領域に対するアクセス制限をアクセス制御表に登録する命令をソースプログラムに追加する。
プログラムの開始直後(main関数開始直後)に1回だけ実行される形で以下の命令を追加する(図12の[3]参照)。ただし、dは関数fが所属するドメインで、関数−ドメイン対応情報から知ることができる。
add_address(f , 0 , EX , {d});
領域の終端アドレスは仮に0(仮アドレス)としてあるが、これは、ソースプログラムをコンパイラ&リンカ3を通す以前では、終端アドレスが未決定のためである。後にWeave2において、コンパイラ&リンク3から得られた終端アドレス表を元に、上記仮アドレスを正しい終端アドレスに書き換える(後述する図13参照)。なお、fは関数fの開始アドレスであり、図2のプログラム生成装置によって生成されたプログラムをコンパイルおよびリンク処理した際にfの位置にこの開始アドレスが挿入される。
ステップ[4]:関数fが呼び出された際、関数fが利用するスタック領域に対するアクセス制限をアクセス制御表に登録する命令をソースプログラムに追加する。より詳細には以下の通りである。
Weaver1における、スタック領域を介した不具合伝播防止情報作成機能25は、プログラム内の全関数について、各々の関数の開始直後に挿入すべき、以下の命令を生成する。ただし、dは関数fが所属するドメインで、関数−ドメイン対応情報から知ることができる。
add_address(get_esp(), get_ebp(), RW , {d} );
スタック領域を介した不具合伝播防止情報作成機能25は、各関数ごとに生成した命令と、各命令を挿入すべき位置(各関数の開始直後)とを、スタック領域を介した不具合伝播防止情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この不具合伝播防止情報を元に、ソースコードにおける各関数の開始直後に、各関数に対応する命令を挿入する(図12の[4]参照)。
ステップ[5]:呼び出された関数fの処理が終了し、呼び出し元にリターン(return)される際、関数fが利用していたスタック領域に対するアクセス制限をアクセス制御表から削除する命令をソースプログラムに追加する。より詳細には以下の通りである。
Weaver1における、スタック領域を介した不具合伝播防止情報作成機能25は、プログラム内の全関数について、各々の関数の終了直前(return文の直前)に挿入すべき、以下の命令を生成する。ただし、dは関数fが所属するドメインであり、関数−ドメイン対応情報から知ることができる。この命令は、ステップ[4]における命令のアクセス制限をNOに変えたものに等しい。
add_address(get_esp() , get_ebp() , NO , {d} );
スタック領域を介した不具合伝播防止情報作成機能25は、各関数ごとに生成した命令と、各命令を挿入すべき位置(return文の直前)とを、スタック領域を介した不具合伝播防止情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この不具合伝播防止情報を元に、ソースコードにおける各関数の開始直後に、各関数に対応する命令を挿入する(図12の[5]参照)。
ステップ[6]:動的に確保されるメモリ領域に対するアクセス制限をアクセス制御表に登録する命令をソースプログラムに追加する。より詳細には以下の通りである。
Weaver1における、動的に確保されたメモリ領域を介した不具合伝播防止情報作成機能24は、ソースプログラム中の動的メモリ確保命令(例えばmalloc)の直前または直後に挿入すべき以下の命令を生成する。ただし、di,...,djは、メモリ確保命令が記述された関数の属するドメインdよりも上位のドメインであり、dn....,dm はドメインdよりも下位のドメインである。これらは、関数−ドメイン対応情報、およびドメイン階層情報から知ることができる。
add_address2(malloc文の返り値 , malloc文の引数(=サイズ) , RW , {d, di,...,dj} ) ;
add_address2(malloc文の返り値 , malloc文の引数(=サイズ) , RO , {dn,...,dm} );
動的に確保されたメモリ領域を介した不具合伝播防止情報作成機能24は、これらの命令と、これらの命令を挿入すべき位置(mallocの直前または直後)とを、動的に確保されたメモリ領域を介した不具合伝播防止情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この不具合伝播防止情報を元に、ソースコードにおけるmallocの直前または直後に、上記命令を挿入する(図12の[6]参照)。
ステップ[7]:動的に確保されていたメモリ領域が開放される際に、当該メモリ領域に対するアクセス制限をアクセス制御表から削除する命令をソースプログラムに追加する。より詳細には以下の通りである。
Weaver1における、動的に確保されたメモリ領域を介した不具合伝播防止情報作成機能24は、ソースプログラムにおける動的に確保したメモリ領域を開放する命令(free)の直前または直後に挿入すべき以下の命令を生成する。ただし、d,di,...dj,dn,...,dmは、ステップ[6]におけるd,di,...dj,dn,...,dmと同一ドメインを表す。
add_address2(free文の引数, 確保してあるサイズ, NO, {d,di,...,dj,dn,...,dm}) ;
動的に確保されたメモリ領域を介した不具合伝播防止情報作成機能24は、この命令と、この命令を挿入すべき位置(freeの直前または直後)とを、動的に確保されたメモリ領域を介した不具合伝播防止情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この不具合伝播防止情報を元に、ソースコードにおけるfreeの直前または直後に、上記命令を挿入する(図12の[7]参照)。
ステップ[8]:関数呼び出しの際、呼び出された関数が、実引数の領域、または実引数が参照先アドレスの場合は参照先の領域を参照できるように、引数領域に対するアクセス制限をアクセス制御表に登録する命令を、ソースプログラムに追加する。より詳細には以下の通りである。
Weaver1における引数公開情報作成機能26は、ソースプログラム内の全関数について、各々の関数の全引数を対象に、以下の命令を生成する(実際は、呼び出した関数と呼び出された関数のドメインが異なる場合にのみ、以下の命令が実行されればよい)。ただし、dは関数fのドメインであり、iは引数である。関数fの引数iにconst装飾子がつけられている場合、アクセス制限は、RWでなく、ROでもよい。
add_address2(&i, sizeof(i) , RW , {d} ) ;
引数iのタイプが「参照」の場合は、上記命令に加え、以下の命令も生成する。
add_address2(i ,「引数情報」におけるiの参照先サイズ ,
「引数情報」におけるiの参照先のアクセス制限 , {d});
引数公開情報作成機能26は、上記命令と、上記命令を挿入すべき位置(読み出し元の関数において呼び出す文の直前または読み出された関数の開始直後)とを、引数公開情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この引数公開情報を元に、ソースプログラムに対し上記命令を挿入する(図12の[8]参照)。
ステップ[9]:関数の処理が終了する際に、当該関数に公開していた引数領域を、アクセス制御表において非公開にする命令をソースプログラムに追加する。より詳細には以下の通りである。
Weaver1における引数公開情報作成機能26は、ソースプログラム内の全ての関数について、各々の関数の全引数を対象に、関数の終了直前(return文の直前)に、以下の命令を生成する。ただし、dは関数fの属するドメインであり、iは引数である。
add_address2( &i , sizeof(i) , NO , {d} );
引数のタイプが「参照」の場合は、上記命令に加え、以下の命令も生成する。
add_address2( i ,「引数情報」におけるiの参照先サイズ , NO , {d} );
引数公開情報作成機能26は、上記命令と、上記命令を挿入すべき位置(return文の直前)とを、引数公開情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この引数公開情報を元に、ソースプログラムに対し上記命令を挿入する(図12の[9]参照)。
ステップ[10]:関数呼び出しにより、実行ドメインが変更される場合(=呼び出し元の関数のドメインと呼び出し先の関数のドメインが異なる場合)、アクセス制御装置11が参照するアクセス制御表を変更する命令をソースプログラムに追加する。より詳細には以下の通りである。
Weaver1における使用アクセス制御表切り替え情報作成機能27は、プログラム内の全関数の開始直後に追加すべき以下の命令を生成する。ただし、dは関数fのドメインである。
dom_change(d);
使用アクセス制御表切り替え情報作成機能27は、この命令と、この命令を挿入すべき位置(関数の開始直後)とを、使用アクセス制御表切り替え情報として、メモリ保護命令織り込み機能28に渡す。メモリ保護命令織り込み機能28は、この使用アクセス制御表切り替え情報を元に、ソースプログラムに対し上記命令を挿入する(図12の[10]参照)。
図9は、図2におけるコンパイラ&リンカ3およびWeaver2による処理を説明する図である。
コンパイラ&リンカ3は、Weaver1によって作成されたプログラムを入力とし、テキスト領域における各関数の終端アドレスを抽出する。コンパイラ&リンカ3は、関数と終端アドレスとを対応づけた表を終端アドレス表として出力する(S21)。終端アドレス表の一例を図10に示す。
Weaver2は、上記ステップ[3]において作成したアクセス制御表の操作命令に含まれる仮アドレスを、ステップS21で作成した終端アドレス表を元に、正しい終端アドレスに置き換える(S22)。このようにしてメモリ保護機能付きソースプログラムが作成される。
以下、本実施の形態に対する理解をさらに深めるため、図11に示すソースプログラムからメモリ保護機能付きソースプログラムを作成する例を示す。
図11のソースプログラムは、mainとshow_stringという2つの簡単な関数から構成されている。show_string関数は引数として渡された文字列を表示する機能をもつ関数である。一方、main関数は文字列をセットする機能をもつ関数となっている。
ここで、文字列表示機能(show_string関数のみからなる機能)と文字列をセットする機能(main関数のみからなる機能)とをドメイン切り分けし、show_string関数に不具合があってもmain関数には影響を及ぼさないようにする。このため、図6に示したのと同一のメモリ保護ポリシーを用意する。
図11のソースプログラムと図6のメモリ保護ポリシーとを図2におけるWeaver1に入力すると、図12に示すプログラムがWeaver1から出力される。図12のプログラムにおいて、コメント行に書かれている[1]〜[10]は、図4のフローチャートにおける[1]〜[10]に対応している。
図12のプログラムをコンパイラ&リンカ3に入力すると、図10に示したのと同一の終端アドレス表がコンパイラ&リンカ3から出力される。
図12のプログラムと図10の終端アドレス表とをWeaver2に入力すると図13に示すメモリ保護機能付きソースプログラムがWeaver2から出力される。このメモリ保護機能付きソースプログラムをコンパイルおよびリンク処理することでCPU12に実行可能な形式のメモリ保護機能付きプログラムが生成される。
以上のように、本実施の形態により、ソフトウェア開発者はソースプログラムを自ら書き換えることなくとも、簡易なメモリ保護ポリシーを記述するだけで、メモリ保護付きプログラムを取得できる。よって、ソフトウェア開発者の負担は軽減される。またデバッグの効率化にも役立つ。また、プログラム解析による情報を利用してメモリ保護付きプログラムを作成するため、アクセス制限の厳しすぎないメモリ保護が実現できる。また、自動でメモリ保護機能付きプログラムを作成するため、プログラムの機能品質が下がることを防止できる。
本実施の形態によって作成したメモリ保護機能付きプログラムの実行環境を示すシステム構成図。 本発明の実施の形態に従ったプログラム生成装置の構成を示すブロック図。 Weaver1の機能ブロック図。 Weaver1により行われる処理を詳細に説明するフローチャート。 アクセス制御表の例を示す図。 メモリ保護ポリシーの一例を示す図。 関数―ドメイン対応情報の例、ドメイン階層情報の例、引数情報の例、大域変数―利用ドメイン情報の例を示す図。 大域変数が利用する領域についてのアクセス制限をアクセス制御表に登録する命令をソースプログラムに追加する手順を示すフローチャート。 図2におけるコンパイラ&リンカ3およびWeaver2による処理を説明する図。 終端アドレス表の一例を示す図。 ソースプログラムの例を示す図。 図11のソースプログラムと図6のメモリ保護ポリシーとからWeaver1によって生成されたプログラムを示す図。 図12のプログラムと図10の終端アドレス表とからWeaver2によって生成されたメモリ保護機能付きソースプログラムを示す図。
符号の説明
1、2:Weaver
3:コンパイラ&リンカ
11:アクセス制御装置(メモリ保護装置)
12:CPU
13:メモリ装置
21:ポリシー解析機能
22:大域変数利用ドメイン解析機能
23:大域変数を介した不具合伝播防止情報作成機能
24:動的に確保されたメモリ領域を介した不具合伝播防止情報作成機能
25:スタック領域を介した不具合伝播防止情報作成機能
26:引数公開情報作成機能
27:使用アクセス制御表切り替え情報作成機能
28:メモリ保護命令織り込み機能

Claims (13)

  1. メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
    ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
    前記ソースプログラムを解析して前記ソースプログラムに記述された関数と前記関数に含まれる大域変数とを検出し、前記メモリ保護ポリシーに記述された前記情報に従って、前記大域変数と、前記大域変数を利用するドメインとを対応づけた情報を生成する生成部と、
    前記メモリ保護ポリシーに記述された前記ドメイン間の上位下位関係に従って、前記大域変数を利用するドメインを上位ドメインと下位ドメインとに分割する分割部と、
    前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
    (A)前記上位ドメインに対応するアクセス制御表において前記大域変数に対してのアクセス制限を読み書き許可に設定する命令を前記ソースプログラムに追加
    (B)前記下位ドメインに対応するアクセス制御表において前記大域変数に対してのアクセス制限を読み出し許可に設定する命令を前記ソースプログラムに追加する
    追加部と、
    を備え、
    前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記(A)および前記(B)で追加された前記命令の実行によって操作されるプログラム生成装置
  2. 前記上位ドメインは最上位ドメインであり、前記下位ドメインは、前記最上位ドメイン以外のドメインであることを特徴とする請求項1に記載のプログラム生成装置
  3. 前記分割部は、前記大域変数を利用するドメインが1つの場合は当該ドメインを前記上位ドメインとして扱うことを特徴とする請求項1に記載のプログラム生成装置
  4. 前記追加部は、前記読み書き許可に設定する命令および前記読み出し許可に設定する命令を、前記ソースプログラムで最初に実行される関数に追加することを特徴とする請求項1ないし3のいずれかに記載のプログラム生成装置
  5. メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
    ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
    前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
    (A)前記関数が他の関数によって呼び出された場合に前記関数がスタック領域にアクセスできるようにするため、前記関数が属するドメインに対応するアクセス制御表においてスタックポインタからベースポインタによって指定される範囲までのメモリ領域に対するアクセス制限を読み書き可能に設定する命令を前記関数に追加し、
    (B)前記関数が属するドメインに対応する前記アクセス制御表において前記メモリ領域に対するアクセス制限をアクセス禁止に設定する命令を、前記関数におけるリターン命令の前に追加する
    追加部と、
    を備え、
    前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記(A)および前記(B)で追加された命令の実行によって操作されることを特徴とするプログラム生成装置
  6. メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
    ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
    前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
    (A)前記関数が、前記関数と異なるドメインに属する他の関数によって呼び出された場合に、前記関数が前記関数の引数にアクセスできるようにするため、前記関数が属するドメインに対応するアクセス制御表において前記引数へのアクセス制限を読み書き許可または読み出し許可に設定する第1命令を前記ソースプログラムに追加し、
    (B)前記関数の実行後に前記関数の属するドメインから前記引数へアクセスできないようにするため、前記関数が属するドメインに対応する前記アクセス制御表において前記引数へのアクセス制限をアクセス禁止に設定する第2命令を前記ソースプログラムに追加する
    追加部と
    前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記(A)および前記(B)で追加された前記第1命令および前記第2命令の実行よって操作されることを特徴とするプログラム生成装置
  7. 前記引数は参照アドレスを示し、
    前記メモリ保護ポリシーは、アクセス制限を設定すべき前記参照アドレスからのメモリ範囲と、前記アクセス制限の内容とに関する情報を含み、
    前記追加部は、
    前記関数が属するドメインに対応する前記アクセス制御表において前記メモリ範囲に対するアクセス制限を前記アクセス制限の内容に設定する命令を前記第1命令として前記ソースプログラムに追加し、
    前記関数が属するドメインに対応する前記アクセス制御表において前記メモリ範囲に対するアクセス制限をアクセス禁止に設定する命令を前記第2命令として前記ソースプログラムに追加する、
    ことを特徴とする請求項6に記載のプログラム生成装置
  8. 前記追加部は、
    前記第1命令を、前記関数、または前記他の関数における前記関数の呼び出し命令の前に追加し、
    前記第2命令を、前記関数において前記第1命令よりも後かつ前記関数におけるリターン命令の前、または、前記他の関数における前記呼び出し命令の後に追加する、
    ことを特徴とする請求項7に記載のプログラム生成装置
  9. メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
    ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
    前記ソースプログラムから動的メモリ確保命令およびメモリ解放命令を検出する検出部と
    前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
    (A)検出された前記動的メモリ確保命令が属するドメインとこのドメインの上位ドメインとのそれぞれに対応するアクセス制御表において、前記動的メモリ確保命令によって確保されたメモリ領域に対するアクセス制限を読み書き許可に設定する命令を前記ソースプログラムに追加し、
    (B)前記検出された前記動的メモリ確保命令が属するドメインの下位ドメインに対応するアクセス制御表において、前記動的メモリ確保命令によって確保されたメモリ領域に対するアクセス制限を読み出し許可に設定する命令を前記ソースプログラムに追加
    (C)前記検出された前記動的メモリ確保命令が属するドメインと前記上位ドメインと前記下位ドメインとのそれぞれに対応するアクセス制御表において、前記メモリ解放命令によって開放されたメモリ領域に対するアクセス制限をアクセス禁止に設定する命令を前記ソースプログラムに追加する、
    追加部と、
    前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記(A)、前記(B)および前記(C)で追加された前記命令の実行によって操作されることを特徴とするプログラム生成装置
  10. 前記追加部は、前記読み書き許可に設定する命令および前記読み出し許可に設定する命令を前記動的確保命令の直前または直後に追加し、前記アクセス禁止に設定する命令を前記メモリ解放命令の直前または直後に追加することを特徴とする請求項9に記載のプログラム生成装置
  11. メモリアドレス毎のアクセス制限を定めたアクセス制御表を利用してCPUからメモリ装置へのアクセスを制御するシステム環境において実行するプログラムを生成するプログラム生成装置であって、
    ソースプログラムを入力し、また、前記ソースプログラム内の関数をドメイン毎に分類した情報とドメイン間の上位下位関係とを記述したメモリ保護ポリシーを入力する入力部と、
    前記メモリ保護ポリシーの前記ドメイン毎にそれぞれ前記アクセス制御表が予め割り当てられており、
    前記プログラムの実行時に前記関数が配置されるメモリ領域にアクセスできるようにするため、前記関数が属するドメインに対応するアクセス制御表において、前記メモリ領域に対するアクセス制限を実行可能に設定する命令を前記ソースプログラムに追加する、追加部と、
    前記ドメイン毎の前記アクセス制御表は、前記CPUによる前記プログラムの実行時に、前記追加された命令の実行によって操作されることを特徴とするプログラム生成装置
  12. 前記ソースプログラムをコンパイルおよびリンク処理することにより前記メモリ領域の終端アドレスを計算するコンパイラ&リンカと、
    前記ソースプログラムに追加された前記実行可能に設定する命令に、前記終端アドレスを挿入する装置と
    をさらに備えたことを特徴とする請求項11に記載のプログラム生成装置
  13. 前記追加部は、前記実行可能に設定する命令を前記ソースプログラムで最初に実行される関数に追加することを特徴とする請求項11または12に記載のプログラム生成装置
JP2005253463A 2005-09-01 2005-09-01 プログラム生成装置 Expired - Fee Related JP4559937B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005253463A JP4559937B2 (ja) 2005-09-01 2005-09-01 プログラム生成装置
US11/514,224 US20070079283A1 (en) 2005-09-01 2006-09-01 Program generation method and program product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005253463A JP4559937B2 (ja) 2005-09-01 2005-09-01 プログラム生成装置

Publications (2)

Publication Number Publication Date
JP2007066163A JP2007066163A (ja) 2007-03-15
JP4559937B2 true JP4559937B2 (ja) 2010-10-13

Family

ID=37903347

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005253463A Expired - Fee Related JP4559937B2 (ja) 2005-09-01 2005-09-01 プログラム生成装置

Country Status (2)

Country Link
US (1) US20070079283A1 (ja)
JP (1) JP4559937B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7979685B1 (en) 2007-11-27 2011-07-12 Oracle America, Inc. Multiple instruction execution mode resource-constrained device
US8392895B2 (en) * 2009-01-13 2013-03-05 Mediatek Inc. Firmware extension method and firmware builder
JP5582971B2 (ja) * 2009-12-15 2014-09-03 キヤノン株式会社 メモリ保護方法および情報処理装置
US8880697B1 (en) 2012-04-09 2014-11-04 Google Inc. Using rules to determine user lists
US9690709B2 (en) * 2014-07-14 2017-06-27 Oracle International Corporation Variable handles
CN113852975B (zh) * 2021-08-19 2024-02-02 浙江三维利普维网络有限公司 基站的协议栈程序的性能确定方法及装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10289158A (ja) * 1997-04-11 1998-10-27 Hitachi Ltd タスク管理装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2749039B2 (ja) * 1987-11-06 1998-05-13 株式会社日立製作所 オブジェクト生成方法
US5396627A (en) * 1987-11-06 1995-03-07 Hitachi, Ltd. Method of producing object program based on interprocedural dataflow analysis of a source program
US5418919A (en) * 1989-01-10 1995-05-23 Canon Kabushiki Kaisha Apparatus and method for concurrently executing plural tasks in which identifiers specify steps in tasks
WO1992016905A1 (en) * 1991-03-18 1992-10-01 Echelon Corporation Programming language structures for use in a network for communicating, sensing and controlling information
CA2077273C (en) * 1991-12-12 1996-12-03 Mike H. Conner Language neutral objects
CA2166252C (en) * 1995-12-28 1999-08-24 Robert James Blainey Global variable coalescing
US6546546B1 (en) * 1999-05-19 2003-04-08 International Business Machines Corporation Integrating operating systems and run-time systems
US7272832B2 (en) * 2001-10-25 2007-09-18 Hewlett-Packard Development Company, L.P. Method of protecting user process data in a secure platform inaccessible to the operating system and other tasks on top of the secure platform
US7278137B1 (en) * 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
US7287140B1 (en) * 2003-07-28 2007-10-23 Massachusetts Institute Of Technology System and technique for fine-grained computer memory protection

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10289158A (ja) * 1997-04-11 1998-10-27 Hitachi Ltd タスク管理装置

Also Published As

Publication number Publication date
JP2007066163A (ja) 2007-03-15
US20070079283A1 (en) 2007-04-05

Similar Documents

Publication Publication Date Title
US11061833B2 (en) Apparatus and method for handling page protection faults in a computing system
Necula et al. CCured: Type-safe retrofitting of legacy software
US8813049B2 (en) Type inference of partially-specified parameterized types
Jang et al. SafeDispatch: Securing C++ Virtual Calls from Memory Corruption Attacks.
Garcia et al. Foundations of typestate-oriented programming
US5956479A (en) Demand based generation of symbolic information
US8266604B2 (en) Transactional memory compatibility management
JP4559937B2 (ja) プログラム生成装置
US6836884B1 (en) Method and system for editing software programs
CN106233251A (zh) 元数据驱动的动态具体化
US20050034109A1 (en) Method and system for program editing
JPH09506722A (ja) モデリング・システム
Vanderperren et al. Adaptive programming in jasco
US8881123B2 (en) Enabling symbol resolution of private symbols in legacy programs and optimizing access to the private symbols
Kragl et al. Layered concurrent programs
US9317710B2 (en) System and method for specification and enforcement of a privacy policy in online services
CN101208690B (zh) 计算环境中翻译表达式
El-Korashy et al. CapablePtrs: Securely compiling partial programs using the pointers-as-capabilities principle
US20090249021A1 (en) Method And Systems For Invoking An Advice Operation Associated With A Joinpoint
Lee et al. An SMT encoding of LLVM’s memory model for bounded translation validation
Nagarakatte Practical low-overhead enforcement of memory safety for C programs
Inostroza et al. Modular interpreters for the masses: Implicit context propagation using object algebras
El Boustani et al. Corrective hints for type incorrect Generic Java programs
Giunta et al. Using aspects and annotations to separate application code from design patterns
Findler Behavioral software contracts

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061215

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100413

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100611

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100629

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100723

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130730

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees