JP2006113935A - Dynamic link library calling code generation method, program, and apparatus - Google Patents
Dynamic link library calling code generation method, program, and apparatus Download PDFInfo
- Publication number
- JP2006113935A JP2006113935A JP2004302542A JP2004302542A JP2006113935A JP 2006113935 A JP2006113935 A JP 2006113935A JP 2004302542 A JP2004302542 A JP 2004302542A JP 2004302542 A JP2004302542 A JP 2004302542A JP 2006113935 A JP2006113935 A JP 2006113935A
- Authority
- JP
- Japan
- Prior art keywords
- dynamic link
- link library
- library
- wrapper
- code
- 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
Links
Images
Abstract
Description
本発明は、ダイナミックリンクライブラリを呼び出す技術に関する。 The present invention relates to a technique for calling a dynamic link library.
Windows(登録商標)などのオペレーティングシステム(以下、「OS」)は、当該OS上で動作するアプリケーションプログラムの実行ごとに、1つのプロセス(ジョブの単位)を割り当てる。そして、アプリケーションプログラムがダイナミックリンクライブラリ(dynamic link library)(以下、「DLL」)の関数を利用する場合、OSは、プロセスにDLLを動的に取り込む。すなわち、OSは、DLLのメモリ領域の確保、初期化、再配置などを行う。そして、アプリケーションプログラムは、再配置後のアドレスを利用して、DLLの関数の呼び出しを行う。なお、DLLは、プログラムの実行時に動的(ダイナミック)にリンクされるライブラリである。非特許文献1には、このようなDLLについて記載されている。
An operating system (hereinafter referred to as “OS”) such as Windows (registered trademark) allocates one process (unit of job) for each execution of an application program running on the OS. When the application program uses a function of a dynamic link library (hereinafter referred to as “DLL”), the OS dynamically loads the DLL into the process. In other words, the OS secures, initializes, and rearranges a DLL memory area. Then, the application program calls a DLL function by using the relocated address. The DLL is a library that is dynamically linked when the program is executed. Non-Patent
また、近年、仮想マシンによるプログラム実行環境の利用が広まっている。その代表的なものに、サンマイクロシステム社によるJava(登録商標)仮想マシン、マイクロソフト社によるCLR(Common Language Runtime)がある。仮想マシンは、OS上で稼動する1つのアプリケーションプログラムとして実装されていることが多い。この場合、OSは、仮想マシンによる実行環境ごとに1つのプロセスを割り当てる。そして、仮想マシンにおいては、1つの仮想マシンの実行環境(1つのプロセス)で、複数のアプリケーションプログラムを実行することができる場合がある。 In recent years, the use of program execution environments by virtual machines has become widespread. Typical examples include Java (registered trademark) virtual machines by Sun Microsystems, and CLR (Common Language Runtime) by Microsoft. A virtual machine is often implemented as one application program that runs on an OS. In this case, the OS allocates one process for each execution environment of the virtual machine. In a virtual machine, a plurality of application programs may be executed in the execution environment (one process) of one virtual machine.
さて、DLLをプロセスに取り込む場合、DLLのロードイメージ(メモリにローディングされたロードモジュール)は、プロセスごとに作成される。そのため、DLLに含まれるグローバル変数の領域もプロセスごとに作成される。1つのプロセスで1つのアプリケーションプログラムが実行される場合、グローバル変数はアプリケーションプログラムごとに作成されるため、あるアプリケーションプログラムがグローバル変数の値を変更した場合であっても、他のアプリケーションプログラムの処理に影響を及ぼさない。 When a DLL is taken into a process, a DLL load image (a load module loaded in a memory) is created for each process. Therefore, a global variable area included in the DLL is also created for each process. When one application program is executed in one process, a global variable is created for each application program. Therefore, even if a certain application program changes the value of the global variable, it can be used for processing other application programs. Has no effect.
一方、仮想マシンのような1つのプロセス内で複数のアプリケーションプログラムが実行される環境においては、プロセス毎に1つのDLLが読み込まれ、1つのグローバル変数領域が作成される。すなわち、グローバル変数領域が、プロセス内で実行される複数のアプリケーションプログラム間で共有されることになる。このような実行環境において、DLLがグローバル変数等に状態情報(ステータス)を保持する場合、あるアプリケーションプログラムによるDLLの状態情報の変更が、同一プロセス内で実行中の他のアプリケーションプログラムの処理に影響を与えてしまう。すなわち、1つのプロセスで1つのアプリケーションプログラムを実行した場合と、1つのプロセスで複数のアプリケーションプログラムを実行した場合とで、処理が異なることになる。 On the other hand, in an environment where a plurality of application programs are executed in one process such as a virtual machine, one DLL is read for each process, and one global variable area is created. That is, the global variable area is shared among a plurality of application programs executed in the process. In such an execution environment, when a DLL holds state information (status) in a global variable or the like, a change in the state information of a DLL by a certain application program affects the processing of another application program being executed in the same process. Will be given. That is, processing differs between when one application program is executed by one process and when a plurality of application programs are executed by one process.
本発明は上記事情を鑑みてなされたものであり、本発明の目的は、1つのプロセス内で複数のアプリケーションプログラムが実行される環境でDLLを呼び出す場合において、所定のアプリケーションプログラムの処理が他のアプリケーションプログラムの処理に影響を及ぼすことを防止することにある。 The present invention has been made in view of the above circumstances, and an object of the present invention is to execute processing of a predetermined application program when calling a DLL in an environment in which a plurality of application programs are executed in one process. It is to prevent the application program processing from being affected.
上記課題を解決するために、本発明では、アプリケーションプログラムごとに異なるダイナミックリンクライブラリのロードイメージを作成するラッパライブラリを生成する。また、アプリケーションプログラムにおけるダイナミックリンクライブラリの呼び出しコードを、ラッパライブラリを呼び出すように変更する。 In order to solve the above-described problem, in the present invention, a wrapper library for creating a load image of a dynamic link library that differs for each application program is generated. Also, the calling code of the dynamic link library in the application program is changed so as to call the wrapper library.
例えば、ダイナミックリンクライブラリを呼び出すためのダイナミックリンクライブラリ呼び出しコード生成方法であって、情報処理装置は、演算処理部と記憶部とを有する。そして、演算処理部は、記憶部に記憶されたダイナミックリンクライブラリを読み出す第1の読み出しステップと、読み出したダイナミックリンクライブラリに記述された関数にもとづいて、アプリケーションプログラム毎にダイナミックリンクライブラリのロードイメージを作成するラッパライブラリを生成する生成ステップと、記憶部に記憶されたアプリケーションプログラムを読み出す第2の読み出しステップと、アプリケーションプログラムにおいて、ダイナミックリンクライブラリを呼び出すコードを特定し、当該ダイナミックリンクライブラリの呼び出しコードを、生成したラッパライブラリを呼び出すコードに変更する変更ステップと、を行う。 For example, in the dynamic link library call code generation method for calling the dynamic link library, the information processing apparatus includes an arithmetic processing unit and a storage unit. Then, the arithmetic processing unit creates a load image of the dynamic link library for each application program based on the first read step of reading the dynamic link library stored in the storage unit and the function described in the read dynamic link library. A generation step for generating a wrapper library to be created, a second reading step for reading an application program stored in the storage unit, and a code for calling the dynamic link library in the application program is specified, and the calling code for the dynamic link library is And a change step for changing the code to call the generated wrapper library.
本発明では、1つのプロセス内で複数のアプリケーションプログラムが実行される環境でDLLを呼び出す場合において、所定のアプリケーションプログラムの処理が他のアプリケーションプログラムの処理に影響を及ぼすことを防止することができる。 In the present invention, when a DLL is called in an environment where a plurality of application programs are executed in one process, it is possible to prevent the processing of a predetermined application program from affecting the processing of other application programs.
以下、本発明の実施の形態を説明する。 Embodiments of the present invention will be described below.
図1は、本発明の一実施形態が適用されたラッパライブラリ生成装置1の概略図である。本実施形態のラッパライブラリ生成装置1は、仮想マシン上で動作するプログラム毎に、DLLの領域確保し、初期化および再配置を行うダミーDLL(すなわち、ラッパライブラリ)を生成する。
FIG. 1 is a schematic diagram of a wrapper
ラッパライブラリ生成装置1は、図示するように、ラッパコード生成部10と、呼び出しコード生成部20と、記憶部30と、を有する。ラッパコード生成部10は、記憶部30に記憶されたDLL31を読み出し、ラッパライブラリ34を生成する。ラッパコード生成部10は、DLL入力部11と、コード生成部12と、出力部13と、を有する。
The wrapper
DLL入力部11は、DLL31を記憶部30から読み出して解析し、外部関数シンボルの一覧を取得する。そして、DLL入力部11は、取得した各外部関数シンボルを、シンボル管理テーブル32に記録する。外部関数シンボルは、呼び出しプログラム35が使用可能(呼び出し可能)なDLL31の関数である。なお、シンボル管理テーブル32については、後述する。
The
コード生成部12は、シンボル管理テーブル33に登録されている外部関数シンボル毎に、ラッパコード(不図示)を作成する。なお、ラッパコードについては後述する。
The
出力部13は、シンボル管理テーブル32と、コード生成部12が生成したラッパコードとにもとづいて、ラッパライブラリ34を生成し、記憶部30に記憶する。また、出力部13は、DLL31の名称と、当該DLL31から生成したラッパライブラリ34の名称とを名称対応テーブル33に記憶する。なお、ラッパライブラリ34および名称対応テーブル33については、後述する。
The
呼び出しコード生成部20は、呼び出しプログラム35を記憶部30から読み出して解析する。そして、呼び出しコード生成部20は、呼び出しプログラム35の中で、DLL31を呼び出しているコード(ソースコード)の部分を特定する。そして、呼び出しコード生成部20は、特定したコード部分を、DLL31ではなくラッパライブラリ34を呼び出すように変更する。そして、呼び出しコード生成部20は、変更後の呼び出しプログラム36を、記憶部30に記憶する。なお、呼び出しコード生成部20は、名称対応テーブル33を参照し、呼び出すラッパライブラリ34の名称を取得する。
The call
記憶部30には、DLL31と、シンボル管理テーブル32と、名称対応テーブル33と、ラッパライブラリ34と、呼び出しプログラム35と、変更後呼び出しプログラム36とが記憶されている。
The
DLL31は、プログラムの実行時に動的(ダイナミック)にリンクされる(呼び出される)ライブラリである。OSは、呼び出しプログラム35の実行時に、当該プログラムのアドレス空間(プロセス)にDLLをローディングする。
The
図2は、DLL31の一例を示した図である。DLL31は、ヘッダセクション21と、テキストセクション22、データセクション23、エクスポートシンボルセクション24とを有する。ヘッダセクション21には、他のセクション22、23、24のサイズと開始アドレスとが設定されている。
FIG. 2 is a diagram illustrating an example of the
テキストセクション22には、少なくとも1つの関数が定義されている。図示するテキストセクション22には、関数「func_A」221と、関数「func_B」222と、関数「func_C」223とが含まれている。データセクション23には、テキストセクション22で定義されている各関数が使用するグローバル変数などのデータ領域が定義されている。エクスポートシンボルセクション24には、少なくとも1つの外部に公開される外部関数シンボルの名称と、当該シンボルの仮想相対アドレスとが設定されている。
In the
シンボル管理テーブル32は、DLL31に定義された外部関数シンボルを管理するためのテーブルである。
The symbol management table 32 is a table for managing external function symbols defined in the
図3は、シンボル管理テーブル32の一例を示した図である。シンボル管理テーブル32は、外部関数シンボル毎に、シンボル番号321と、シンボル名322と、アドレス323と、ラッパコード領域ポインタ324と、を有する。
FIG. 3 is a diagram showing an example of the symbol management table 32. The symbol management table 32 includes a
シンボル番号321は、外部関数シンボルを識別するための識別情報である。シンボル名332は、外部関数シンボルの名称である。図示する例では、図2に示すDLL31のエクスポートシンボルセクション24に設定された外部関数シンボルの名称(「func_A」、「func_B」)が設定されている。なお、DLL入力部11が、シンボル番号321およびシンボル名称322を設定する。
The
アドレス323には、生成されるラッパライブラリ34における外部関数シンボル毎に生成されるラッパコードのテキストセクション中での位置(アドレス)が設定される。
In the
ラッパコード領域ポインタ324には、外部関数シンボル毎に生成されたラッパコードが記憶部30のどの位置に格納されているかを表すポインタ情報(格納場所情報)が設定されている。なお、コード生成部12が、アドレス323およびラッパコード領域ポインタ324を設定する。
In the wrapper
名称対応テーブル33は、DLL31と当該DLLから生成されたラッパライブラリ34とを対応付けたテーブルである。
The name correspondence table 33 is a table in which the
図4は、名称対応テーブル33の一例を示した図である。名称対応テーブル33は、DLL31の名称であるDLL名称331と、当該DLL31に対応するラッパライブラリ34の名称332と、を有する。なお、本実施形態では、ラッパライブラリ名称332は、DLL名称331の先頭に「W」を付加した名称とする。
FIG. 4 is a diagram showing an example of the name correspondence table 33. The name correspondence table 33 includes a
呼び出しプログラム35は、仮想マシン上で動作するアプリケーションプログラムであって、当該プログラムの実行時にDLL31を呼び出すプログラムである。なお、呼び出しプログラムが動作する仮想マシンのソフトウェア構成については後述する。
The calling
変更後呼び出しプログラム36は、呼び出しコード生成部20が呼び出しプログラム35を変更した後のプログラムである。ラッパライブラリ34は、呼び出しプログラム35(変更後の呼び出しプログラム36)毎に、DLL31の領域を確保し、初期化および再配置を行うダミーのDLLである。なお、呼び出しプログラム35、変更後呼び出しプログラム36、および、ラッパライブラリ34については、後述する。
The
以上説明した、ラッパライブラリ生成装置1は、例えば図5に示すようなCPU901と、メモリ902と、HDD等の外部記憶装置903と、キーボードやマウスなどの入力装置904と、モニタやプリンタなどの出力装置905と、ネットワーク接続するための通信制御装置906と、これらの各装置を接続するバス907と、を備えた汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、CPU901がメモリ902上にロードされた所定のプログラムを実行することにより、ラッパライブラリ生成装置1の各機能が実現される。すなわち、ラッパライブラリ生成装置1の各機能は、ラッパライブラリ生成装置1のCPU901が、ラッパライブラリ生成装置1用のプログラムを実行することにより実現される。この場合、ラッパライブラリ生成装置1の記憶部30には、ラッパライブラリ生成装置1のメモリ902または外部記憶装置903が用いられる。
The wrapper
次に、仮想マシンのソフトウェア構成について説明する。仮想マシンは、OSの1つのプロセス(ジョブの単位)である。そして、仮想マシンは、当該プロセス内において、複数のアプリケーションプログラムを実行することができる。なお、アプリケーションプログラムは、本実施形態における呼び出しプログラム35(または、変更後の呼び出しプログラム36)である。 Next, the software configuration of the virtual machine will be described. The virtual machine is one process (unit of job) of the OS. The virtual machine can execute a plurality of application programs in the process. The application program is the calling program 35 (or the changed calling program 36) in the present embodiment.
図13は、仮想マシンのソフトウェア構成の一例を示した図である。図示するように、仮想マシン62は、OS61上で動作する。また、仮想マシン62上では、少なくとも1つの呼び出しプログラム35が実行される。なお、仮想マシン62は、メモリ管理部621と、型管理部622と、実行管理部623とを有する。メモリ管理部621は、仮想マシン上で使用されるメモリを管理する。型管理部622は、オブジェクト指向プログラミングにおけるクラスを管理する。実行管理部623は、仮想マシン上で動作する各プログラムの実行を管理する。
FIG. 13 is a diagram illustrating an example of a software configuration of a virtual machine. As illustrated, the
次に、ラッパライブラリ生成装置1のラッパコード生成部10の処理を説明する。
Next, processing of the wrapper
図6は、ラッパコード生成部10のDLL入力部11およびコード生成部12の処理フローを示したものである。まず、DLL入力部11は、あらかじめ記憶部30に記憶されたDLL31を読み出し、当該DLL31のエクスポートシンボルセクション24(図2参照)に記述された外部関数シンボルの一覧を取得する(S61)。そして、DLL入力部11は、取得した外部関数シンボルの名称を、シンボル管理テーブル32のシンボル名322に順に登録する(S62)。なお、DLL入力部11は、外部関数シンボル名をシンボル名322に設定する際に、各シンボル番号321には「1」から順に連番を設定する。
FIG. 6 shows a processing flow of the
そして、コード生成部12は、シンボル番号321およびシンボル名称322が設定されたシンボル管理テーブル32の各レコードを、シンボル番号321の小さい順に読み出す(S63)。そして、コード生成部12は、読み出したレコード毎(すなわち、外部関数シンボル毎)に、所定のアルゴリズム(または、所定のテンプレート)に従って、ラッパライブラリ34の構成要素であるラッパコードを生成する。以下、ラッパコードの生成処理を説明する。
Then, the
コード生成部12は、DLLのロードイメージ選択コードを作成する(S64)。そして、コード生成部12は、呼び出し関数のアドレス計算コードを作成する(S65)。そして、コード生成部12は、アドレス計算コードにより算出されたアドレスを用いて関数を呼び出す関数呼び出しコードを生成する(S66)。S64からS66により、コード生成部12は、ラッパコードを生成し、記憶部30に記憶する。なお、ラッパコードの処理については、後述する。
The
そして、コード生成部12は、シンボル管理テーブル32の当該レコードのラッパコード領域ポインタ324に、記憶部30に記憶したラッパコードの先頭アドレス(格納場所)を設定する(S67)。
Then, the
そして、コード生成部12は、シンボル管理テーブル32のアドレス323の設定を行なう。すなわち、コード生成部12は、S63で読み出したレコードが最初のレコードか(シンボル番号321が「1」のレコードか)否かを判別する(S68)。最初のレコードの場合(S68:YES)、コード生成部12は、当該最初のレコードのアドレス323に「00000000」を設定する(S69)。
Then, the
一方、最初のレコードでない場合(S68:NO)、コード生成部12は、当該レコードの直前のレコードのアドレス323に設定された値を読み出す。そして、コード生成部12は、直前のレコードのアドレス323の値に、S64からS66において生成した直前のレコードのパッラコードのサイズを加算する。そして、コード生成部12は、加算した値を当該レコードのアドレス323に設定する(S70)。なお、直前のレコードは、本実施形態では、当該レコードのレコード番号321から「1」を引いたレコード番号321のレコードである。
On the other hand, if it is not the first record (S68: NO), the
そして、コード生成部12は、シンボル管理テーブル32を読み出し、未処理のレコード(ラッパコードを生成していないレコード)が存在するか否かを判別する(S71)。未処理のレコードが存在する場合(S71:YES)、コード生成部12は、S63に戻りシンボル管理テーブル32の次のレコードの処理を行う。一方、未処理のレコードが存在しない場合(S71:NO)、後述する出力部13の処理を行う。
Then, the
以上説明した図6の処理を、図2に示すDLL31を例に具体的に説明する。
The processing of FIG. 6 described above will be specifically described by taking the
まず、DLL入力部11は、DLL31の外部関数シンボルの一覧を取得し、図3に示すシンボル管理テーブル32を作成する(S61、S62)。なお、この時点では、アドレス323、ラッパコード領域ポインタ324は空欄である。
First, the
そして、コード生成部12は、シンボル管理テーブル32の最初のレコードの関数func_Aのラッパコードを生成し記憶部30に記憶する(S63〜S66)。そして、コード生成部12は、ラッパコードの格納場所の先頭アドレス)を、関数func_Aのラッパコード領域ポインタ324に設定する(S67)。そして、現在処理中の「関数func_A」は、最初のレコードであるため(S68:YES)、コード生成部12は、シンボル管理テーブル32のアドレス323に「00000000」を設定する(S69)。
Then, the
次に、コード生成部12は、シンボル管理テーブル32を読み出し、未処理のレコードである関数func_Bの処理を行なう(S71:YES)。コード生成部12は、関数func_Aの処理と同様に、ラッパコードを生成し、ラッパコード領域ポインタに格納場所を設定する(S63〜S67)。そして、関数func_Bのレコードは最初のレコードでないため(S68:NO)、コード生成部12は、1つ上のレコード(関数func_A)のアドレス323の値「00000000」に、生成された関数func_Aのラッパコードのサイズ(ここでは、「00000100」(16進数)とする)を加算した値「00000100」を、アドレス323に設定する。そして、コード生成部12は、シンボル管理テーブル32を読み出し、次(未処理)のレコードがないため図6に示す処理を終了する。
Next, the
次に、ラッパコード生成部10の出力部13の処理について説明する。
Next, processing of the
図7は、ラッパコード生成部10の出力部13の処理フローを示したものである。出力部13は、図6の処理の後に、シンボル管理テーブル32にもとづいて、名称対応テーブル33およびラッパライブラリ34を出力する。
FIG. 7 shows a processing flow of the
まず、出力部13は、名称対応テーブル33(図4参照)を出力する(S71)。すなわち、出力部13は、図6のS61において読み出したDLL31の名称と、当該DLL31から生成されるラッパライブラリ名称とを、名称対応テーブル33に設定する。なお、本実施形態では、図4に示すように、DLL31の名称(sub.dll)の先頭に「W」を付加した名称(Wsub.dll)を、ラッパライブラリの名称とする。
First, the
そして、出力部13は、ラッパライブラリの出力に先立って、ラッパライブラリの各セクションのサイズを算出する(S72)。すなわち、出力部13は、テキストセクション、データセクション、および、エクスポートシンボルセクションのサイズを算出する。なお、テキストセクションのサイズは、シンボル管理テーブル32に登録されている全ての外部関数シンボルのラッパコードのサイズの合計である。
Then, the
データセクションのサイズは、各ラッパコードが使用するグローバル変数領域のデータサイズの合計である。なお、本実施形態では、DLL31のロードイメージの管理用に36(16進数で20)バイトが必要であるものとする。なお、ロードイメージは、メモリにローディングされたロードモジュールである。
The size of the data section is the total data size of the global variable area used by each wrapper code. In the present embodiment, it is assumed that 36 (20 in hexadecimal) bytes are required for managing the load image of the
エクスポートシンボルセクションのサイズは、外部関数シンボル名称と、当該外部関数シンボルのアドレスとを書き出すために必要な大きさである。本実施形態では、64(16進数で40)バイトが必要であるものとする。 The size of the export symbol section is a size necessary for writing the external function symbol name and the address of the external function symbol. In this embodiment, it is assumed that 64 (hexadecimal 40) bytes are required.
そして、出力部13は、以下の処理により、例えば、図8に示すようなラッパライブラリ34を出力する。
And the
まず、出力部13は、ヘッダセクション(図8:81)を出力する(S73)。すなわち、出力部13は、S72で算出した各セクションのサイズを記述したヘッダセクションを出力する。
First, the
そして、出力部13は、テキストセクション(図8:82)を出力する(S74)。すなわち、出力部13は、シンボル管理テーブル32のラッパコード領域ポインタ324でポインタされている各ラッパコードを記憶部30から順次読み出し、テキストセクションとして出力する。なお、図示する例では、関数func_Aと、関数func_Bの2つのラッパコード821、822がテキストセクションに記述されている。
Then, the
そして、出力部13は、データセクション(図8:83)を出力する(S75)。データセクションのサイズは、ラッパコード固有の値であり、図示する例では前述した36(16進数で20)バイトとする。
Then, the
そして、出力部13は、エクスポートシンボルセクション(図8:84)を出力する(S76)。すなわち、出力部13は、シンボル管理テーブル32のシンボル名称322およびアドレス323に設定されたデータを順次エクスポートシンボルセクションに出力する。そして、出力部13は、各セクションを出力することにより図8に示すようなラッパライブラリ34を生成し、記憶部30に記憶する(S77)。
Then, the
次に、ラッパライブラリ生成装置1の呼び出しコード生成部20の処理を説明する。
Next, processing of the calling
図9は、呼び出しコード生成部20の処理フローである。まず、呼び出しコード生成部20は、記憶部30に記憶された呼び出しプログラム35を読み出し解析する(S91)。そして、呼び出しコード生成部20は、呼び出しプログラム35の中で、DLLの関数の呼び出しに対する外部宣言を特定し、修正する(S92)。すなわち、呼び出しコード生成部20は、DLL31を呼び出しているコード(記述)を、ラッパライブラリ34を呼び出すように変更する。そして、コード生成部20は、呼び出しプログラム35の識別子である引数を1つ追加する。なお、呼び出しコード生成部20は、名称対応テーブル33を参照して、呼び出し先を変更するラッパライブラリの名称を取得する。
FIG. 9 is a processing flow of the calling
そして、呼び出しコード生成部20は、識別子取得関数の定義を生成し、呼び出しプログラム35の所定の部分に追加する(S93)。識別子取得関数は、呼び出しプログラム35を識別するための識別子(識別情報)を返す関数である。この識別子には、例えば、呼び出しプログラム35が動作する実行環境が識別子を提供している場合、当該識別子を利用することができる。
Then, the call
また、識別子には、例えば、呼び出しプログラムが異なれば異なるメモリ領域を占め、呼び出しプログラムが同じなら常に同じメモリ領域を示す変数のアドレスを利用することができる。 Further, for example, the identifier can occupy a different memory area if the calling program is different, and an address of a variable indicating the same memory area can be used whenever the calling program is the same.
そして、呼び出しコード生成部20は、呼び出しプログラム35の中から、DLL31の関数の呼び出しコード(例えば、call文)を特定する。そして、呼び出しコード生成部20は、特定した呼び出しコードの直前に、S93で生成した識別子取得関数の呼び出しコード(例えば、call文)を追加する(S94)。そして、呼び出しコード生成部20は、S92からS94で変更した変更後の呼び出しプログラム36を出力し、記憶部30に記憶する(S95)。
Then, the call
次に、呼び出しプログラム35、および、当該呼び出しプログラム35に図9に示す処理を実行した変更後の呼び出しプログラム36を説明する。
Next, the calling
図10は、呼び出しプログラム35の一例を示したものである。図示する呼び出しプログラム35は、DLLに含まれる関数func_Aを呼び出す関数呼出メソッド10aと、関数func_Aに対する外部宣言10bとを有する。
FIG. 10 shows an example of the calling
図11は、変更後の呼び出しプログラム36の一例を示したものである。図示する呼び出しプログラム35は、関数func_Aを呼び出す関数呼出メソッド11aと、func_Aに対する外部宣言11bと、識別子取得関数11cと、を有する。
FIG. 11 shows an example of the calling
呼び出しコード生成部20は、関数func_Aの外部宣言(図11:11b)において、ラッパライブラリ111を呼び出すように変更する。また、呼び出しコード生成部20は、関数func_Aの外部宣言において、呼び出しプログラム35の識別子である引数112を1つ追加する。なお、図示する例では、追加する引数は32ビット整数型としている。
The call
また、呼び出しコード生成部20は、識別子取得関数11cを生成する。また、呼び出しコード生成部20は、関数呼出メソッド11aにおいて、関数 func_Aの呼び出しコードの直前に、識別子取得関数11cを呼び出すCall文113を追加する。これにより、変更後の呼び出しプログラム36は、識別子取得関数11cを呼び出すことにより取得したプログラムの識別子を、関数func_Aの追加した引数の値とする。
In addition, the call
以上説明したラッパコード生成部10、および、呼び出しコード生成部20の処理によりラッパライブラリ34および変更後の呼び出しプログラム36が生成される。変更後の呼び出しプログラム36は、図13に示すような仮想マシン上で実行され、生成されたラッパライブラリ34を呼び出す。以下に変更後の呼び出しプログラム36の実行時に呼び出されたラッパライブラリ34の処理を説明する。
The
図12は、ロードイメージ選択コードの処理フローである。なお、ロードイメージ選択コードは、外部関数シンボル毎に作成されるラッパコードの中の、図6のS64で生成されるコードである。また、ラッパコードは、ラップ対象の外部関数シンボルに対して、変更後の読み出しプログラム36を識別するための識別子を引数として追加したインタフェースを有する。
FIG. 12 is a processing flow of the load image selection code. The load image selection code is a code generated in S64 of FIG. 6 in the wrapper code created for each external function symbol. The wrapper code has an interface in which an identifier for identifying the
まず、ロードイメージ選択コードは、呼び出された変更後の読み出しプログラム36の識別子を取得し、当該識別子に対するDLL31のロードイメージがプロセスに作成済みか否かを判別する(S121)。なお、DLL31のロードイメージを作成した識別子については、後述するS124の処理により登録されているものとする。
First, the load image selection code acquires the identifier of the
DLL31のロードイメージが作成されていない場合(S121:NO)、ロードイメージ選択コードは、DLL31をメモリに展開し(S122)、再配置する(S123)ことにより、ロードイメージを作成する。そして、ロードイメージ選択コードは、作成したロードイメージと、当該識別子とを対応付けて登録(記憶)する(S124)。
When the load image of the
一方、DLL31のロードイメージが既に作成済みの場合(121:YES)、ロードイメージ選択コードは、当該ロードイメージを取得する(S125)。なお、DLL31のメモリへの展開(S122)および再配置(S123)については、非特許文献1に詳しく述べられている。
On the other hand, when the load image of the
次に、図6のS65において生成される呼び出し関数のアドレス計算コードは、DLL31のエクスポートシンボルセクション(図2参照)を参照し、当該ラッパコードの外部関数シンボルのの仮想相対アドレスを取得する。そして、取得した仮想相対アドレスとロードイメージの先頭アドレスとから、実際の関数アドレスを算出する。
Next, the address calculation code of the calling function generated in S65 of FIG. 6 refers to the export symbol section (see FIG. 2) of
そして、図6のS66において生成される関数呼び出しコードは、アドレス計算コードが算出した実際の関数アドレスを用いて、DLL31のロードイメージ中の関数の呼び出しを行なう。
The function call code generated in S66 of FIG. 6 calls a function in the load image of the
以上、本発明の一実施形態について説明した。 The embodiment of the present invention has been described above.
本実施形態では、ラッパライブラリ生成装置1は既存のDLL31を解析し、当該DLL31のラッパライブラリ34を生成する。また、ラッパライブラリ生成装置1は既存の呼び出しプログラム35から、ラッパライブラリ34を呼び出す変更後の呼び出しプログラム36を生成する。この変更後の呼び出しプログラム36を実行することにより、ラッパライブラリ34が呼び出され、変更後の呼び出しプログラム36毎にDLL31のロードイメージを作成することができる。
In the present embodiment, the wrapper
また、ラッパライブラリ34は、アプリケーションプログラム(呼び出しプログラム)毎にDLL31のロードイメージを作成する。これにより、1つのプロセス内で複数のアプロケーションプログラムが動作する実行環境であっても、所定のアプリケーションプログラムの処理が他のアプリケーションプログラムの処理に影響を及ぼすことを防止することができる。
The
また、ラッパライブラリ生成装置1がラッパライブラリ34および変更後の呼び出しプログラム36を自動生成することにより、1つのプロセス内で複数のアプリケーションプログラムが動作する実行環境においても、既存のシステムのリソース(DLL31、呼出プログラム35)を有効活用することができる。
In addition, the wrapper
なお、本発明は上記の実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。 In addition, this invention is not limited to said embodiment, Many deformation | transformation are possible within the range of the summary.
例えば、上記実施形態では、ラッパライブラリ生成装置1が、あらかじめラッパライブラリ34および変更後の呼び出しプログラム36を生成する。しかしながら、本発明は、呼び出しプログラム35の実行時に、動的にラッパライブラリ34および変更後の呼び出しプログラム36を生成してもよい。この場合、図1に示すラッパライブラリ生成装置1の各機能は、図13に示す仮想マシンの実行管理部623において実装される。以下に、実行管理部623の処理について説明する。
For example, in the above embodiment, the wrapper
図14は、実行管理部623の処理フローを示したものである。まず、実行管理部623は、現在の処理対象の命令がDLL31で定義される関数の呼び出しか否かを判定する(S141)。DLL31の呼び出しでない場合(S141:NO)、実行管理部623は、一般的なコード生成処理を実行する(S145)。
FIG. 14 shows a processing flow of the
一方、DLL31の呼び出しの場合(S141:YES)、実行管理部623は、入力手段904や、実行時オプションや、ファイルなどの手段により入力されたユーザの指示を受け付け、ラッパコードを生成するか否かを判別する(S142)。ラッパコード生成指示を受け付けた場合(S142:YES)、実行管理部623は、識別子取得関数呼び出しコードを生成する(S143)。なお、S143の処理は、呼び出しコード生成部20が図9のS93において識別子取得関数コードを生成する処理と同様である。そして、実行管理部623は、ラッパコードを生成する(S144)。なお、S144の処理は、コード生成部12が、図6のS64からS66においてラッパコードを生成する処理と同様である。一方、ラッパコード生成指示を受け付けない場合(S142:NO)、実行管理部623は、一般的なコード生成処理を行う(S145)。
On the other hand, when the
なお、S142のラッパコードを生成する否かの処理を省略して、全てのDLL31をラップの対象にすることもできる。また、呼び出しプログラム35の実行前に、ラッパコード生成部10があらかじめラッパライブラリ34を作成し、S144のラッパコード生成処理を省略することもできる。
Note that it is possible to omit all of the
また、上記実施形態では、DLLを呼び出すプログラム毎に、DLL全体のロードイメージを作成する。しかしながら、本発明は、DLLを呼び出すプログラム毎に、ロードイメージの一部を作成することとしてもよい。 In the above embodiment, a load image of the entire DLL is created for each program that calls the DLL. However, the present invention may create a part of the load image for each program that calls the DLL.
すなわち、DLLの一部の領域が1つのプロセス内で動作する複数のプログラム間で共有可能な構成の場合、ラッパライブラリは、プログラム間で共有不可能な領域のみのロードイメージをプログラム毎に作成することとしてもよい。 That is, when a part of the DLL area is configured to be sharable among a plurality of programs operating in one process, the wrapper library creates a load image of only the area that cannot be shared between programs for each program. It is good as well.
図15は、ロードイメージ選択コードの処理フローである。なお、上記実施形態におけるロードイメージ選択コードの処理フロー(図12参照)に相当する処理である。なお、ここでは、DLL31のテキストセクション22はプログラム間で共有可能な領域(以下、「共有部分」)であって、データセクション23はプログラム間で共有不可能な領域(以下、「非共有部分」)とする。
FIG. 15 is a processing flow of the load image selection code. This process corresponds to the process flow (see FIG. 12) of the load image selection code in the above embodiment. Here, the
まず、ロードイメージ選択コードは、テキストセクション22(共有部分)のロードイメージが作成済みか否かを判定する(S151)。テキストセクション22のロードイメージが作成済みの場合(S151:YES)、ロードイメージ選択コードは、当該ロードイメージを取得する(S152)。一方、テキストセクション22のロードイメージが未作成の場合(S151:NO)、ロードイメージ選択コードは、テキストセクションをメモリに展開してロードイメージを作成し、当該ロードイメージを記録する(S153)。
First, the load image selection code determines whether or not a load image of the text section 22 (shared part) has been created (S151). When the load image of the
そして、ロードイメージ選択コードは、変更後の読み出しプログラム36の識別子を取得し、当該識別子に対する非共有部分のロードイメージがプロセスに作成済みか否かを判別する(S154)。作成済みの場合(S154:YES)、ロードイメージ選択コードは、当該ロードイメージを取得する(S155)。一方、非共有部分のロードイメージが未作成の場合(S154:NO)、ロードイメージ選択コードは、非共有部分をメモリへ展開し(S156)、再配置を行う(S157)。そして、ロードイメージ選択コードは、作成したロードイメージと、当該識別子とを対応付けて登録(記憶)する(S158)。そして、ロードイメージ選択コードは、アドレステーブルの先頭テーブルを、間接参照用のベースレジスタにロードする(S159)。
Then, the load image selection code obtains the identifier of the
次に、DLL31のテキストセクション22が非共有部分の場合のロードイメージ選択コードの処理を説明する。
Next, the processing of the load image selection code when the
図16は、テキストセクションが非共有部分の場合の、ロードイメージ選択コードの処理フローである。図16に示す処理フローは、以下の点において図15に示す処理フローと異なる。すなわち、データのアドレステーブルの作成(S163)が追加されている点が、図15に示す処理フローと異なる。また、図15のS153に相当するS164の処理において、テキストセクションをメモリに展開するだけでなく、テキストセクションのデータの参照部分をデータのアドレステーブルを用いた間接参照に修正する点が異なる。これにより、テキストセクションを位置独立コードに修正することができ、プロセス内で動作する複数のプログラム間で共有可能なコードとなる。また、S163で作成したアドレステーブルは、非共有部分となる。そのため、S168において、データのアドレステーブルをメモリに展開し、アドレステーブルの再配置を行う点が異なる。 FIG. 16 is a processing flow of the load image selection code when the text section is a non-shared part. The processing flow shown in FIG. 16 differs from the processing flow shown in FIG. 15 in the following points. That is, the point that the creation of the data address table (S163) is added is different from the processing flow shown in FIG. Further, in the process of S164 corresponding to S153 in FIG. 15, not only the text section is expanded in the memory, but also the reference portion of the data in the text section is modified to indirect reference using the data address table. As a result, the text section can be corrected to position independent code, and the code can be shared among a plurality of programs operating in the process. The address table created in S163 is a non-shared part. Therefore, in S168, the data address table is expanded in the memory, and the address table is rearranged.
1:ラッパライブラリ生成装置、10:ラッパコード生成部、11:DLL入力部、12:コード生成部、13:出力部、20:呼び出しコード生成部、30:記憶部、31:ダイナミックリンクライブラリ、32:シンボル管理テーブル、33:名称対応テーブル、34:ラッパライブラリ、35:呼び出しプログラム、36:変更後呼び出しプログラム 1: wrapper library generation device, 10: wrapper code generation unit, 11: DLL input unit, 12: code generation unit, 13: output unit, 20: call code generation unit, 30: storage unit, 31: dynamic link library, 32 : Symbol management table, 33: Name correspondence table, 34: Wrapper library, 35: Call program, 36: Call program after change
Claims (8)
情報処理装置は、演算処理部と記憶部とを有し、
前記演算処理部は、
前記記憶部に記憶された前記ダイナミックリンクライブラリを読み出す第1の読み出しステップと、
前記読み出したダイナミックリンクライブラリに記述された関数にもとづいて、アプリケーションプログラム毎に前記ダイナミックリンクライブラリのロードイメージを作成するラッパライブラリを生成する生成ステップと、
前記記憶部に記憶された前記アプリケーションプログラムを読み出す第2の読み出しステップと、
前記アプリケーションプログラムにおいて、前記ダイナミックリンクライブラリを呼び出すコードを特定し、当該ダイナミックリンクライブラリの呼び出しコードを、前記生成したラッパライブラリを呼び出すコードに変更する変更ステップと、を行うこと
を特徴とするダイナミックリンクライブラリ呼び出しコード生成方法。 A dynamic link library call code generation method for calling a dynamic link library,
The information processing apparatus includes an arithmetic processing unit and a storage unit,
The arithmetic processing unit includes:
A first reading step of reading the dynamic link library stored in the storage unit;
A generation step of generating a wrapper library for creating a load image of the dynamic link library for each application program based on the function described in the read dynamic link library;
A second reading step of reading the application program stored in the storage unit;
In the application program, the dynamic link library is characterized in that: a code for calling the dynamic link library is specified, and a change step for changing the call code of the dynamic link library to a code for calling the generated wrapper library is performed. Call code generation method.
前記生成ステップにおいて生成されるラッパライブラリは、
前記ダイナミックリンクライブラリの各領域の中から前記アプリケーションプログラム間で共有不可能な領域を特定し、当該共有不可能な領域のみのロードイメージを前記アプリケーションプログラム毎に作成すること
を特徴とするダイナミックリンクライブラリ呼び出しコード生成方法。 The dynamic link library call code generation method according to claim 1,
The wrapper library generated in the generating step is
A dynamic link library that identifies an area that cannot be shared among the application programs from each area of the dynamic link library and creates a load image of only the non-shareable area for each application program Call code generation method.
前記生成ステップにおいて生成されるラッパライブラリは、
前記ダイナミックリンクライブラリのテキスト記述部が、前記アプリケーション間で共有不可能な場合、前記テキスト記述部のコードを前記アプリケーション間で共有可能なコードに修正し、前記テキスト記述部以外の前記アプリケーション間で共有不可能な領域のみのロードイメージを、前記アプリケーションプログラム毎に作成すること
を特徴とするダイナミックリンクライブラリ呼び出しコード生成方法。 The dynamic link library call code generation method according to claim 1,
The wrapper library generated in the generating step is
If the text description part of the dynamic link library is not sharable between the applications, the code of the text description part is modified to a code that can be shared between the applications, and is shared between the applications other than the text description part. A dynamic link library call code generation method, wherein a load image of only an impossible area is created for each application program.
前記生成ステップにおいて生成されるラッパライブラリは、
前記アプリケーションプログラムが使用するメモリ領域のアドレス毎に、前記ロードイメージを作成すること
を特徴とするダイナミックリンクライブラリ呼び出しコード生成方法。 The dynamic link library call code generation method according to claim 1,
The wrapper library generated in the generating step is
A dynamic link library call code generation method, wherein the load image is created for each address of a memory area used by the application program.
前記演算処理部は、
前記アプリケーションプログラムを前記記憶部から読み出し、実行する実行ステップを、さらに行い、
前記実行ステップの実行時に、前記第1の読出しステップ、前記生成ステップ、および、前記変更ステップを行うこと
を特徴とするダイナミックリンクライブラリ呼び出しコード生成方法。 The dynamic link library call code generation method according to claim 1,
The arithmetic processing unit includes:
The execution step of reading and executing the application program from the storage unit is further performed,
A dynamic link library call code generation method comprising: performing the first read step, the generation step, and the change step when executing the execution step.
前記演算処理部は、
前記生成ステップの実行指示を受け付ける受け付けステップを、さらに行い、
前記実行ステップにおいて、前記実行指示を受け付けた場合に、前記生成ステップを行うこと、
を特徴とするダイナミックリンクライブラリ呼び出しコード生成方法。 The dynamic link library call code generation method according to claim 5,
The arithmetic processing unit includes:
Further performing a receiving step of receiving an instruction to execute the generating step;
Performing the generation step when the execution instruction is received in the execution step;
A dynamic link library call code generation method characterized by the above.
前記情報処理装置は、演算処理部と記憶部とを有し、
前記演算処理部に、
前記記憶部に記憶された前記ダイナミックリンクライブラリを読み出す第1の読み出しステップ、
前記読み出したダイナミックリンクライブラリに記述された関数にもとづいて、アプリケーションプログラム毎に前記ダイナミックリンクライブラリのロードイメージを作成するラッパライブラリを生成する生成ステップ、
前記記憶部に記憶された前記アプリケーションプログラムを読み出す第2の読み出しステップ、および、
前記アプリケーションプログラムにおいて、前記ダイナミックリンクライブラリを呼び出すコードを特定し、当該ダイナミックリンクライブラリの呼び出しコードを、前記生成したラッパライブラリを呼び出すコードに変更する変更ステップ、を実行させること
を特徴とする呼び出しコード生成プログラム。 An information processing device is a call code generation program for generating a call code of a dynamic link library,
The information processing apparatus includes an arithmetic processing unit and a storage unit,
In the arithmetic processing unit,
A first reading step of reading the dynamic link library stored in the storage unit;
A generation step of generating a wrapper library for creating a load image of the dynamic link library for each application program based on the function described in the read dynamic link library;
A second reading step of reading the application program stored in the storage unit; and
In the application program, a code for calling the dynamic link library is specified, and a change step for changing the call code of the dynamic link library to a code for calling the generated wrapper library is executed. program.
前記ダイナミックリンクライブラリと、前記ダイナミックリンクライブラリを呼び出すアプロケーションプログラムと、を記憶する記憶手段と、
前記ダイナミックリンクライブラリに記述された関数にもとづいて、前記アプリケーションプログラム毎に前記ダイナミックリンクライブラリのロードイメージを作成するラッパライブラリを生成する生成ステップと、
前記アプリケーションプログラムを前記記憶手段から読み出し、当該アプリケーションプログラムにおいて、前記ダイナミックリンクライブラリを呼び出すコードを特定し、特定したダイナミックリンクライブラリの呼び出しコードを、前記生成したラッパライブラリを呼び出すコードに変更する変更手段と、を有すること
を特徴とするダイナミックリンクライブラリ呼び出しコード生成装置。 A dynamic link library call code generation device for calling a dynamic link library,
Storage means for storing the dynamic link library and an allocation program for calling the dynamic link library;
A generation step of generating a wrapper library for creating a load image of the dynamic link library for each application program based on a function described in the dynamic link library;
A change unit that reads the application program from the storage unit, identifies a code that calls the dynamic link library in the application program, and changes the call code of the identified dynamic link library to a code that calls the generated wrapper library; And a dynamic link library call code generation device.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004302542A JP2006113935A (en) | 2004-10-18 | 2004-10-18 | Dynamic link library calling code generation method, program, and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004302542A JP2006113935A (en) | 2004-10-18 | 2004-10-18 | Dynamic link library calling code generation method, program, and apparatus |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006113935A true JP2006113935A (en) | 2006-04-27 |
Family
ID=36382392
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004302542A Pending JP2006113935A (en) | 2004-10-18 | 2004-10-18 | Dynamic link library calling code generation method, program, and apparatus |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2006113935A (en) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008113291A1 (en) * | 2007-03-20 | 2008-09-25 | Huawei Technologies Co., Ltd. | Method and system for calling functions |
JP2010009149A (en) * | 2008-06-24 | 2010-01-14 | Fujitsu Ltd | Dynamic library loading method and device |
CN102402455A (en) * | 2010-09-14 | 2012-04-04 | 北大方正集团有限公司 | Method and device for calling dynamic link library (DLL) |
CN112905378A (en) * | 2021-03-03 | 2021-06-04 | 广州虎牙科技有限公司 | Crash information analysis method and device, electronic equipment and readable storage medium |
-
2004
- 2004-10-18 JP JP2004302542A patent/JP2006113935A/en active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008113291A1 (en) * | 2007-03-20 | 2008-09-25 | Huawei Technologies Co., Ltd. | Method and system for calling functions |
JP2010009149A (en) * | 2008-06-24 | 2010-01-14 | Fujitsu Ltd | Dynamic library loading method and device |
CN102402455A (en) * | 2010-09-14 | 2012-04-04 | 北大方正集团有限公司 | Method and device for calling dynamic link library (DLL) |
CN112905378A (en) * | 2021-03-03 | 2021-06-04 | 广州虎牙科技有限公司 | Crash information analysis method and device, electronic equipment and readable storage medium |
CN112905378B (en) * | 2021-03-03 | 2024-03-08 | 广州虎牙科技有限公司 | Crash information analysis method, device, electronic equipment and readable storage medium |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5167589B2 (en) | Application server device and virtual machine program | |
JP6198939B2 (en) | Method for loading driver and embedded device | |
US6944846B2 (en) | Algorithm for localization of a JAVA application using reflection API and a custom class loader | |
US20050160415A1 (en) | Method and system for improving performance of Java virtual machine | |
US8984497B2 (en) | Source code converting, method program, and systems for first programming language to a code in a second programming language | |
TWI291098B (en) | Method and system for data optimization and protection in DSP firmware | |
JP2010086410A (en) | Memory protection method, information processing apparatus, memory protection program and recording medium with memory protection program recorded thereon | |
JP5496792B2 (en) | Code conversion program, method and system | |
JP5489884B2 (en) | Instruction execution device, instruction execution method, and instruction execution program | |
JP2006113935A (en) | Dynamic link library calling code generation method, program, and apparatus | |
US7636914B1 (en) | System and method for providing context to operator overloading | |
CN113849245B (en) | Application program running method, computing device and storage medium | |
CN115576560A (en) | Hot reloading method, device, equipment and medium for dynamic loader | |
KR101670916B1 (en) | Method for storing function and system device using the same | |
US8694975B2 (en) | Programming system in multi-core environment, and method and program of the same | |
KR101140522B1 (en) | System and Method for Managing Object | |
JP2003241967A (en) | Program execution device, its method and program executed therein | |
JPWO2020158347A1 (en) | Information processing equipment, methods and programs | |
JP2000122876A (en) | Information processor | |
JP2006048186A (en) | Language processing system protecting generated code of dynamic compiler | |
KR101281954B1 (en) | Method of incremental linking for embedded system | |
WO2015083234A1 (en) | Function call table generating device, program execution device, and execution program | |
JP2011118830A (en) | Multitasking system and program | |
JP6103972B2 (en) | Program generation method, program execution method, program execution device, and program execution program | |
JP2016081097A (en) | Programmable controller system, support device thereof and programmable controller |