JPH11110194A - 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体 - Google Patents

外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体

Info

Publication number
JPH11110194A
JPH11110194A JP9272669A JP27266997A JPH11110194A JP H11110194 A JPH11110194 A JP H11110194A JP 9272669 A JP9272669 A JP 9272669A JP 27266997 A JP27266997 A JP 27266997A JP H11110194 A JPH11110194 A JP H11110194A
Authority
JP
Japan
Prior art keywords
library
function
name
program module
executing
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
JP9272669A
Other languages
English (en)
Inventor
Kuninori Tanaka
邦典 田中
Tetsuya Iinuma
哲也 飯沼
Hideaki Hirayama
秀昭 平山
Toshio Shirokibara
敏雄 白木原
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 JP9272669A priority Critical patent/JPH11110194A/ja
Priority to EP98308039A priority patent/EP0908817A3/en
Priority to US09/166,284 priority patent/US6665735B1/en
Publication of JPH11110194A publication Critical patent/JPH11110194A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Abstract

(57)【要約】 【課題】 本発明は、ダイナミックリンクライブラリ関
数(Y)を含むライブラリを作成する際に、ライブラリ
関数(Y)の変更部分以外は、新たに追加、作成するコ
ード量を極力抑えることにより、ダイナミックリンクラ
イブラリ関数の変更を効率的に行う、外部ライブラリ関
数との結合方法ならびに同方法がプログラムされる記録
媒体の提供を課題とする。 【解決手段】 本発明は、外部関数を動的に結合して実
行するプログラムモジュール11において、プログラム
モジュールのヘッダ部分に記述されている関数名と、プ
ログラムモジュールが参照する関数名を他の名前に置き
換え、置き換えた関数名と同じ名を持つ関数を、本来の
関数の代わりに結合して実行するとともに、前処理もし
くは後処理を実行することにより、関数の変更なしに機
能を拡張することを特徴とする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、外部ライブラリ関
数との結合方法ならびに同方法がプログラムされ記録さ
れる記録媒体に関する。
【0002】
【従来の技術】あらかじめ用意されている外部関数のオ
ブジェクトファィルの集合をライブラリと呼ぶ。ここ
で、オブジェクトファイルとは、外部関数がコンパイル
された結果のオブジェクトプログラムの形式で記憶され
ているファイルのことである。また、C言語のコンパイ
ラが自動的にリンクしてくれるライブラリをCの標準ラ
イブラリと呼んでいる。
【0003】ライブラリ中のプログラムは、ソースプロ
グラムの形式であることも、また、オブジェクトファイ
ルの形式であることもある。ソースプログラム形式のと
きはコンパイル前に、オブジェクトプログラム形式のと
きはコンパイル後に他のプログラム部分と結合される。
コンパイル後に結合する場合、その結合行為をリンケジ
と称し、実行開始以前に連係する静的(スタテック)リ
ンケージと、実行開始後呼び出された時点で連係する動
的(ダイナミック)リンケージとがある。
【0004】ところで、従来、プログラムモジュールに
よって使用されるダイナミックリンクライブラリ関数
(X)の処理を変更するためには、ダイナミックリンク
ライブラリ関数(X)と同等の処理を含むダイナミック
リンクライブラリ関数(Y)を作成し、プログラムモジ
ュールはその関数を呼び出すように変更する必要があっ
た。
【0005】
【発明が解決しようとする課題】しかしながら上記した
従来技術においては、ダイナミックリンクライブラリ関
数(Y)を含むダイナミックリンクライブラリは、ダイ
ナミックリンクライブラリ関数(X)を含むダイナミッ
クリンクライブラリに含まれる全てのダイナミックリン
クライブラリ関数と同等の関数を持たなければならな
い。そのため、ダイナミックリンクライブラリ関数
(X)のソースコードを入手して、それを基に変更を加
えるという手段が利用できない時や、ダイナミックリン
クライブラリに含まれるダイナミックリンクライブラリ
関数の総数が多い場合は、ダイナミックリンクライブラ
リ関数(X)の処理を変更するのに、膨大な開発コスト
が発生する。
【0006】本発明は上記の問題を解決するためになさ
れたものであり、ダイナミックリンクライブラリ関数
(Y)を含むダイナミックリンクライブラリを作成する
際に、ダイナミックリンクライブラリ関数(Y)の変更
部分以外は、新たに追加、作成するコード量を極力抑え
ることにより、ダイナミックリンクライブラリ関数の変
更を効率的に行うことのできる、外部ライブラリ関数と
の結合方法ならびに同方法がプログラムされ記録される
記録媒体を提供することを目的とする。
【0007】
【課題を解決するための手段】本発明の外部ライブラリ
関数との結合方法は、外部関数を動的に結合して実行す
るプログラムモジュールにおいて、プログラムモジュー
ルのヘッダ部分に記述されている関数名と、プログラム
モジュールが参照する関数名を他の名前に置き換え、置
き換えた関数名と同じ名を持つ関数を、本来の関数の代
わりに結合して実行させることを特徴とする。また、置
き換えた関数名と同じ名前の関数で本来の関数を実行す
るとともに、前処理もしくは後処理を実行することによ
り、関数の変更なしに機能を拡張することも特徴とす
る。
【0008】更に、プログラムモジュールの実行時に動
的に結合されるライブラリAにおいて、同関数Aと同じ
名前を持ち、かつ、ライブラリAに含まれる関数と同じ
名前の関数を含むライブラリBを、上記プログラムモジ
ュールの実行時に動的に結合させて実行し、更に本来の
ライブラリAに記述されているライブラリ名と外部から
参照可能な関数名を他の名前に置き換え、上記ライブラ
リB内の関数から、本来のライブラリA内の関数を実行
すると共に、前処理もしくは後処理を実行することによ
り、プログラムモジュールを変更することなく、ライブ
ラリ関数に前処理、後処理を追加することも特徴とす
る。
【0009】本発明の記録媒体は、実行時にライブラリ
関数を動的に結合して実行するプログラムモジュールに
おいて、プログラムモジュールのヘッダ部分に記述され
ているライブラリ名と上記プログラムモジュールが参照
する関数名を他の名前に置き換えるステップと、置き換
えた関数名と同じ名前の関数を含み、置き換えたライブ
ラリ名と同じ名前を持つライブラリを本来のライブラリ
の代わりに結合して実行させるステップと、上記置き換
えた関数名と同じ名前の関数で、本来のダイナミックリ
ンクライブラリ関数を実行すると共に、前処理もしくは
後処理を実行するステップとがプログラムされ記録され
ることを特徴とする。また、プログラムモジュールの実
行時に動的に結合されるライブラリAにおいて、上記ラ
イブラリAと同じ名前を持ち、かつ上記ライブラリAに
含まれる関数と同じ名前の関数を含むライブラリBを、
上記プログラムモジュールの実行時に動的に結合させて
実行するステップと、本来のライブラリAに記述されて
いるライブラリ名と外部から参照可能な関数名を他の名
前に置き換えるステップと、上記ライブラリB内の関数
から、本来のライブラリA内の関数を実行すると共に、
前処理もしくは後処理を実行するステップとがプログラ
ムされ記録されることも特徴とする。更に、プログラム
モジュールの実行時に動的に結合されるライブラリAに
おいて、上記ライブラリAと同じ名前を持ち、かつ上記
ライブラリAに含まれる関数と同じ名前の関数を含むラ
イブラリBを、上記プログラムモジュールの実行時に動
的に結合して実行させるステップと、上記ライブラリB
内の関数からライブラリAを動的にロードし、そのライ
ブラリに含まれるライブラリ関数の実行アドレスを求め
るための関数を使用することにより、本来のライブラリ
A内の関数を実行すると共に、前処理もしくは後処理を
実行するステップとがプログラムされ、記録されること
も特徴とする。
【0010】このことにより、ダイナミックリンクライ
ブラリ関数(Y)を含むダイナミックリンクライブラリ
を作成する際に、ダイナミックリンクライブラリ関数
(Y)の変更部分以外は、新たに追加、作成するコード
量を極力抑えることができ、ダイナミックリンクライブ
ラリ関数の変更を効率的に行うことができる。
【0011】
【発明の実施の形態】以下、パソコンサーバのオペレー
ティングシステムとして実質標準的に使用されている米
国マイクロソフト社のWindows NT上の開発環
境を例示して説明する。本発明の実施の態様の構成動作
を説明する前に、プログラムとダイナミックリンクライ
ブラリのシンボル参照関係から説明する。プログラムモ
ジュールが、その実行中にダイナミックリンクライブラ
リのシンボルを参照するための手段は、大きく次の2つ
に分けられる。
【0012】図5にシンボルの参照方法1を示す。プロ
グラムやダイナミックリンクライブラリのソースコード
51,52をコンパイルしてリンクするとオブジェクト
モジュール93が作成される。オブジェクトモジュール
53は、ヘッダ531、テキスト532、データ53
3、エキスポートセクション534、インポートセクシ
ョン535から構成される。ここでエキスポートセクシ
ョン534には、そのモジュールから他のモジュールに
対して参照を許可した関数シンボルの情報が含まれる。
またインポートセクション535には、そのモジュール
がライブラリモジュールから関数シンボルを参照するた
めの情報(DLL1,func1;シンボルを参照する
ライブラリモジュール名とシンボル名の組)が含まれ
る。プログラムが、ダイナミックリンクライブラリDL
L1がエキスポートするシンボル(func1)を直接
呼び出す場合、DLL1のソースコードをコンパイル、
リンクした結果生成される、.LIBファイルと呼ばれ
るモジュール54をリンク時に指定する必要がある。
【0013】.LIBファイルには、ライブラリモジュ
ール名(DLL1)及びエキスポートするシンボル名
(func1)の情報が記述されており、プログラム
が.LIBファイルをリンク時に指定することにより、
そのオブジェクトのインポートセクション535に、D
LL1とfunc1の情報が記述されることになる。実
行時にプログラムモジュールがメモリ上にロードされる
と、そのインポートセクション535に記述されている
情報に従ってライブラリモジュール(DLL1)もロー
ドされ、func1のロードアドレスが、プログラムモ
ジュールのインポートセクション535に書き込まれ
る。その結果、プログラムモジュールの実行中にfun
c1が呼び出されると、インポートセクション535に
書き込まれたアドレスに従って、DLL1のfunc1
が実行される。
【0014】図6を用いてシンボル参照方法2を説明す
る。プログラム63がダイナミックリンクライブラリを
動的にロードする関数(LoadLibrary)を実
行してライブラリモジュール(DLL1)をロードし、
更にロードしたライブラリモジュールがエキスポートす
るシンボルのアドレスを得る関数(GetProcAd
dress)を実行してライブラリモジュール内の関数
(func1)のアドレスを求め、func1を実行す
ることができる。この場合、プログラムモジュール61
はDLL1の.LIBファイルをリンク時に指定する必
要はなく、インポートセクション635にも、ライブラ
リモジュール名DLL1及びシンボル名func1の情
報は記述されない。
【0015】図1は、本発明の一実施態様を示す図であ
り、動作をメモリ上に展開して示した動作概念図であ
る。具体的には、プログラムモジュールが図5に示す参
照方法1を用い、ダイナミックリンクライブラリDLL
1がエキスポートする関数func1を呼び出している
場合において、ダイナミックリンクライブラリDLL1
のモジュールを変更せずに、func1に前処理、後処
理を付加する例を示す。
【0016】図において、1は主記憶装置、2はCP
U、3は磁気ディスク等外部記憶装置である。まず、プ
ログラム11(func1)に前処理、後処理を付加し
た関数func2を含むダイナミックリンクライブラリ
12(DLL2)を作成する。以後、このようにオリジ
ナルの関数に前処理、後処理を付加した関数をジャケッ
トルーチン、ジャケットルーチンを含むダイナミックリ
ンクライブラリをジャケットライブラリ12と呼ぶこと
にする。プログラム11やダイナミックリンクライプラ
リ12,13のソースコードをコンパイル、リンクする
と、プログラムモジュール15、ジャケットライブラリ
モジュール16、オリジナルライブラリモジュール17
が作成される。
【0017】ジャケットライブラリ12(DLL2)は
ダイナミックリンクライブラリ13(以降、オリジナル
ライプラリ(DLL1)という)の.LIBファイル1
4をリンク時に指定することにより、DLL1(13)
のエキスポートするfunc1をインポートする。また
ジャケットライブラリ(DLL2)はfunc2をエキ
スポートする。プログラムモジュール15のインポート
セクション155に記述されているモジュール名DLL
1をDLL2に、シンボル名func1をfunc2に
変更することにより、プログラムモジュール15が主記
憶装置1にロードされる時にDLL1の代わりにジャケ
ットライブラリ12(DLL2)がロードされ、fun
c2のアドレスがインポートセクション155に書き込
まれることになる。これにより、プログラムモジュール
実行時にはfunc1の代わりに、func2が呼び出
されることになり、func1の処理に前処理、後処理
を追加することができる。
【0018】図7にプログラムモジュール実行時におけ
る動作フローが示されている。上述した手順にてインポ
ートセクションを変換(ステップS2)し、プログラム
モジュール15、ジャケットライブラリ12、オリジナ
ルライブラリ13を実行(ステップS1,S3,S4)
することにより、ダイナミックリンクライブラリ関数を
動的にリンクしてプログラムモジュールの実行が可能と
なる。
【0019】具体的に、プログラムモジュールのヘッダ
部分に記述されているダイナミックリンクライブラリ名
と同プログラムモジュールが参照する関数名を他の名前
に置き換え、置き換えた関数名と同じ名前の関数を含
み、置き換えたライブラリ名と同じ名前を持つダイナミ
ックリンクライブラリを、本来のダイナミックリンクラ
イブラリの代わりにリンクして実行させ、前記置き換え
た関数名と同じ名前の関数で、本来のダイナミックリン
クライブラリ関数を実行すると共に、前処理・後処理を
実行することにより、ダイナミックリンクライブラリ関
数を変更することなく、ダイナミックリンクライブラリ
関数に前処理・後処理を追加、実行することができるも
のである。
【0020】図2は、プログラムモジュールが図5に示
す参照方法1により、ダイナミックリンクライブラリD
LL1のエキスポートする関数func1を呼び出して
いる場合において、プログラムモジュールを変更せず
に、func1に前処理、後処理を付加する例が示され
ている。まず、オリジナルのダイナミックリンクライブ
ラリDLL1と同じ名前を持つジャケットライブラリD
LL1を作成する。ジャケットライブラリDLL1はオ
リジナルライブラリDLL1のエキスポートする関数f
unc1と同じ名前の関数func1をエキスポートす
る。オリジナルライブラリDLL1はジャケットライブ
ラリDLL1と名前が同一になってしまうため、名前を
DLL2に変更する。ジャケットライブラリDLL1が
エキスポートするfunc1は、オリジナルライブラリ
DLL2がエキスポートするfunc1を内部的に呼び
出し、前処理、後処理を付加する。しかし、同じ名前の
関数を呼び出すことはできないため、オリジナルライブ
ラリDLL2のエキスポートセクションに記述されてい
るシンボル名func1をfunc2に変更する。従っ
て、ジャケットライブラリDLL1がエキスポートする
func1はfunc2を呼び出せばよいことになる。
【0021】しかしfunc2を参照するためには、ラ
イブラリモジュール名DLL2とシンボル名func2
が記述された.LIBファイル26が必要となる。とこ
ろがオリジナルライブラリDLL2の.LIBファイル
にはモジュール名DLL1とシンボル名func1が記
述されているため、この.LIBファイルをリンクして
も意味がない。従って、ライブラリモジュール名DLL
2とシンボル名func2を含む.LIBファイルを作
成する必要がある。そこで、ライブラリモジュール名D
LL2を持つダミーのダイナミックリンクライブラリを
作成する。ダミーライブラリ24(DLL2)はダミー
関数func2を含む。ダミー関数func2は.LI
Bファイル26の中にシンボル名func2を記述する
ためだけに必要であるため、中身は空でもよい。ダミー
DLL2をコンパイルした結果得られる.LIBファイ
ルには、モジュール名DLL2及びシンボル名func
2が記述されているため、ジャケットライブラリ22
(DLL1)のリンク時に指定することができる。これ
により、プログラムモジュール実行時にfunc1を呼
び出した場合、ジャケットライブラリDLL1のfun
c1が呼び出されることになり、func1の処理に前
処理、後処理を追加することができる。
【0022】図8にその動作フローが示されている。プ
ログラムモジュールの27実行を行ない、上述した手順
にてダミーライブラリを作成してジャケットライブラリ
を実行し、次に上述した手順にてエキスポートセクショ
ンを変換してオリジナルライブラリを実行することによ
り、ダイナミックリンクライブラリ関数を動的にリンク
してプログラムの実行が可能となる。
【0023】具体的に、プログラムモジュール27の実
行時に、動的にリンクされるダイナミックリンクライブ
ラリ(A)において、同ダイナミックリンクライブラリ
(A)と同じ名前を持ち、かつ、ダイナミックリンクラ
イブラリ(A)に含まれる関数と同じ名前の関数を含む
ダイナミックリンクライブラリ(B)を、プログラムモ
ジュール27の実行時に動的にリンクさせて実行し、更
に本来のダイナミックリンクライブラリ(A)に記述さ
れているダイナミックリンクライブラリ名と外部から参
照可能な関数名を他の名前に置き換え、ダイナミックリ
ンクライブラリ(B)内の関数から、本来のダイナミッ
クリンクライブラリ(A)内の関数を実行すると共に、
前処理・後処理を実行することにより、プログラムモジ
ュールを変更することなく、ダイナミックリンクライブ
ラリ関数に前処理・後処理を追加、実行することができ
る。
【0024】図3は、プログラムモジュールが図5に示
す参照方法1により、ダイナミックリンクライブラリD
LL1のエキスポートする関数func1を呼び出して
いる場合において、プログラムモジュール及びダイナミ
ックリンクライブラリDLL1のモジュールを共に変更
せずに、func1に前処理、後処理を付加する例が示
されている。
【0025】まず、オリジナルのダイナミックリンクラ
イブラリDLL1と同じ名前を持つジャケットライブラ
リDLL1を作成する。ジャケットライブラリDLL1
はオリジナルライブラリDLL1のエキスポートする関
数func1と同じ名前の関数func1をエキスポー
トする。オリジナルライブラリDLL1はジャケットラ
イブラリDLL1と名前が同一になってしまうため、名
前をDLL2に変更する。ジャケットライブラリDLL
1のエキスポートする関数func1は、ダイナミック
リンクライブラリを動的にロードする関数LoadLi
braryを実行してオリジナルライブラリDLL2を
ロードし、ロードしたダイナミックリンクライブラリの
エキスポートするシンボルのアドレスを得る関数Get
ProcAddressを実行してオリジナルライブラ
リDLL2のエキスポートする関数func1のアドレ
スを得る。これにより、ジャケットライブラリDLL1
のエキスポートするfunc1は、オリジナルライブラ
リDLL1のエキスポートするfunc1を内部的に呼
び出し、前処理、後処理を付加することが可能となる。
【0026】これにより、プログラムオブジェクト実行
時にfunc1を呼び出した場合、ジャケットDLL1
のfunc1が実行されることになり、func1の処
理に前処理、後処理を追加することができる。図9にそ
の動作フローが示されている。プログラムモジュールの
実行(ステップS91)から始まり、ジャケットライブ
ラリの実行(ステップS92)、オリジナルライブラリ
のロード(ステップS93)、実行(ステップS94)
のステップにより、ダイナミックリンクライブラリ関数
を動的にリンク実行することができる。
【0027】具体的には、プログラムモジュールの実行
時に、動的にリンクされるダイナミックリンクライブラ
リ(A)において、同ダイナミックリンクライブラリ
(A)と同じ名前を持ち、かつ、ダイナミックリンクラ
イブラリ(A)に含まれる関数と同じ名前の関数を含む
ダイナミックリンクライブラリ(B)を、プログラムモ
ジュールの実行時に動的にリンクして実行させ、更に前
記ダイナミックライブラリ(B)内の関数から、ダイナ
ミックリンクライブラリ(A)を動的にロード(ステッ
プS93)し、そのダイナミックリンクライブラリに含
まれるダイナミックリンクライブラリ関数の実行アドレ
スを求めるための関数を使用することにより、本来のダ
イナミックリンクライブラリ(A)内の関数を実行する
と共に、前処理・後処理を実行することにより、プログ
ラムモジュール及びダイナミックリンクライブラリモジ
ュールを変更することなく、ダイナミックリンクライブ
ラリ関数に前処理・後処理を追加するものである。
【0028】図4は、プログラムモジュールが図6に示
す参照方法2により、ダイナミックリンクライブラリD
LL1のエキスポートする関数func1を呼び出して
いる場合において、ダイナミックリンクライブラリDL
L1のモジュールを変更せずに、func1に前処理、
後処理を付加する例が示されている。そのためには、ダ
イナミックリンクライブラリを動的にロードする関数L
oadLibraryと、ロードされたダイナミックリ
ンクライブラリのエキスポートするシンボルのアドレス
を得る関数GetProAddressに対し、図1ま
たは図2の実施態様に示した方法を適用し、各々、指定
されたダイナミックリンクライブラリ名をジャケットラ
イブラリ名に変換する処理、指定されたシンボル名をジ
ャケットライブラリがエキスポートするシンボル名に変
換する処理を付加する。
【0029】先ず、関数LoadLibrary及びG
etProAddressを含むダイナミックリンクラ
イブラリであるKernel32のジャケットライブラ
リKernel32Xを作成する。ジャケットライブラ
リKernel32Xは、関数LoadLibrary
を内部的に呼び出し、引き渡されたダイナミックリンク
ライブラリ名をジャケット名に変換する処理を加えた関
数LoadlLibraryX、及び関数GetPro
cAddressを内部的に呼び出し、引き渡されたシ
ンボル名をジャケットルーチン名に変換する処理を加え
た関数GetProcAddressXを含む。
【0030】次に、プログラムモジュールのインポート
セクションに記述されているモジュール名Kernel
32をジャケットライブラリ名Kernel32Xに、
シンボル名LoadLibrary及びGetProc
Addressを各々LoadLibraryX及びG
etProcAddressXに書き直すことにより、
プログラムモジュール実行中に関数LoadLibra
ry及びGetProcAddressが呼び出される
と、各々ジャケットルーチンLoadLibraryX
及びGETProcAddressXが実行される。そ
こで、例えば図5に示すところのダイナミックリンクラ
イブラリ名DLL1やシンボル名func1が、関数L
oadLibraryXやGetprocAddres
sXに引き渡された時に、ジャケット名DLL2やジャ
ケットルーチン名func2に置き換えることにって、
プログラムモジュールの実行中にダイナミックリンクラ
イブラリDLL1のエキスポートする関数func1が
呼び出された場合は、ジャケットライブラリDLL2の
エキスポートする関数func2が実行されることにな
り、そこでfunc1の処理に前処理、後処理を追加す
ることができる。
【0031】図10にその動作フローが示されている。
具体的には、上述した手順に従いインポートセクション
の変換(ステップS100)を行なってプログラムモジ
ュールを実行(ステップS101)し、ジャケットライ
ブラリのロード(ステップS102)、実行(ステップ
S103)、オリジナルライブラリを実行(ステップS
104)することによってダイナミックライブラリ関数
を動的にリンクし、前処理後処理の実行が可能となる。
【0032】具体的には、実行時に、ダイナミックリン
クライブラリを動的にロードするための関数(a)を使
用することにより、ダイナミックリンクライブラリ関数
を動的にリンクして実行するプログラムモジュールにお
いて、図1または図2に示す方法により、ロード要求さ
れたダイナミックリンクライブラリの名前を他の名前に
置き換える処理を関数(a)に付加することにより、ダ
イナミックリンクライブラリを変更することなく、もし
くはプログラムモジュールを変更することなく、ロード
要求されたダイナミックリンクライブラリを、他のダイ
ナミックリンクライブラリに置き換えるものである。
【0033】更に、プログラムモジュールが動的にロー
ドしたダイナミックリンクライブラリに含まれる関数の
実行アドレスを求めるための関数(b)を図1または図
2に示す方法により、実行アドレスを要求された関数の
名前を他の名前に置き換える処理を関数(b)に付加す
ることにより、ダイナミックリンクライブラリを変更す
ることなく、もしくはプログラムモジュールを変更する
ことなく、実行アドレスを要求された関数を他の関数に
置き換えるものである。
【0034】
【発明の効果】以上説明のように本発明は、外部関数を
動的に結合して実行するプログラムモジュールにおい
て、プログラムモジュールのヘッダ部分に記述されてい
る関数名と、プログラムモジュールが参照する関数名を
他の名前に置き換え、置き換えた関数名と同じ名を持つ
関数を、本来の関数の代わりに結合して実行すると共
に、前処理もしくは後処理を実行することにより、関数
の変更なしに機能を拡張することを特徴とするものであ
り、このことにより、ダイナミックリンクライブラリ関
数(Y)を含むダイナミックリンクライブラリを作成す
る際に、ダイナミックリンクライブラリ関数(Y)の変
更部分以外は、新たに追加、作成するコード量を極力抑
えることができ、従ってダイナミックリンクライブラリ
関数の変更を効率的に行うことができ、開発コストの低
減がはかれる。
【図面の簡単な説明】
【図1】本発明の一実施形態をメモリ上に展開して示し
た動作概念図
【図2】本発明の他の実施形態をメモリ上に展開して示
した動作概念図
【図3】本発明の更に他の実施形態をメモリ上に展開し
て示した動作概念図
【図4】本発明の他の実施形態につき、メモリ上に展開
して示した動作概念図
【図5】シンボル参照方法1につきメモリ上に展開して
示した図
【図6】シンボル参照方法2につき、メモリ上に展開し
て示した図
【図7】本発明の一実施形態の動作を示すフローチャー
【図8】本発明の他の実施形態の動作を示すフローチャ
ート
【図9】本発明の更に他の実施形態の動作を示すフロー
チャート
【図10】本発明の更に他の実施形態の動作を示すフロ
ーチャート
【符号の説明】
1…主記憶装置、2…CPU、3…外部記憶装置、11
(21,31,41,51)…ソースプログラム、12
(22,32,42,52)…ダイナミックリンクライ
ブラリ(ジャケットライブラリ)、13…ダイナミック
リンクライブラリ(オリジナルライブラリ)、14(2
6,34,44)….LIBファイル、15(27,3
5,45)…オブジェクトプログラム、16(28,3
6,46)…ジャケットライブラリ(オブジェクト)、
17(29,37,47)…オリジナルライブラリ(オ
ブジェクト)、24…ダイナミックライブラリ(ダミー
ライブラリ)、30…ダミーライブラリ(オブジェク
ト)。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 白木原 敏雄 神奈川県川崎市幸区小向東芝町1番地 株 式会社東芝研究開発センター内

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 外部関数を動的に結合して実行するプロ
    グラムモジュールにおいて、プログラムモジュールのヘ
    ッダ部分に記述されている関数名と、プログラムモジュ
    ールが参照する関数名を他の名前に置き換え、置き換え
    た関数名と同じ名を持つ関数を、本来の関数の代わりに
    結合して実行させることを特徴とする外部関数との結合
    方法。
  2. 【請求項2】 置き換えた関数名と同じ名前の関数で本
    来の関数を実行するとともに、前処理もしくは後処理を
    実行することにより、関数の変更なしに機能を拡張する
    ことを特徴とする請求項1記載の外部ライブラリ関数と
    の結合方法。
  3. 【請求項3】 プログラムモジュールの実行時に動的に
    結合されるライブラリ関数Aにおいて、同関数Aと同じ
    名前を持ち、かつ、ライブラリAに含まれる関数と同じ
    名前の関数を含むライブラリBを、上記プログラムモジ
    ュールの実行時に動的に結合させて実行し、更に本来の
    ライブラリAに記述されているライブラリ名と外部から
    参照可能な関数名を他の名前に置き換え、上記ライブラ
    リB内の関数から、本来のライブラリA内の関数を実行
    することを特徴とする外部ライブラリ関数との結合方
    法。
  4. 【請求項4】 本来のライブラリAに記述されているラ
    イブラリ名と外部から参照可能な関数名を他の名前に置
    き換え、上記ライブラリB内の関数から、本来のライブ
    ラリA内の関数を実行すると共に、前処理もしくは後処
    理を実行することにより、プログラムモジュールを変更
    することなく、ライブラリ関数に前処理、後処理を追加
    することを特徴とした請求項3記載の外部ライブラリ関
    数との結合方法。
  5. 【請求項5】 プログラムモジュールの実行時に動的に
    結合されるライブラリAにおいて、上記ライブラリAと
    同じ名前を持ち、かつ上記ライブラリAに含まれる関数
    と同じ名前の関数を含むライブラリBを、上記プログラ
    ムモジュールの実行時に動的に結合して実行させ、更に
    上記ライブラリB内の関数から、ライブラリAを動的に
    ロードし、そのライブラリに含まれるライブラリ関数の
    実行アドレスを求めるための関数を使用することによ
    り、本来のライブラリA内の関数を実行することを特徴
    とする外部ライブラリ関数との接続方法。
  6. 【請求項6】 ライブラリB内の関数から、ライブラリ
    Aを動的にロードし、そのライブラリに含まれるライブ
    ラリ関数の実行アドレスを求めるための関数を使用する
    ことにより、本来のライブラリA内の関数を実行すると
    共に、前処理もしくは後処理を実行することにより、プ
    ログラムモジュール及びライブラリモジュールを変更す
    ることなく、ライブラリ関数に、前処理、後処理を追加
    することを特徴とした請求項5記載の外部ライブラリ関
    数との結合方法。
  7. 【請求項7】 実行時にライブラリを動的にロードする
    ための関数Aを使用することによりライブラリ関数を動
    的にリンクして実行するプログラムモジュールにおい
    て、ロード要求されたライブラリの名前を他の名前に置
    き換える処理を関数Aに付加することにより、ダイナミ
    ックリンクライブラリを変更することなく、もしくはプ
    ログラムモジュールを変更することなく、ロード要求さ
    れたライブラリを、他のライブラリに置き換えることを
    特徴とした請求項1もしくは請求項3記載の外部ライブ
    ラリ関数への結合方法。
  8. 【請求項8】 プログラムモジュールが動的にロードし
    たライブラリに含まれる関数の実行アドレスを求めるた
    めの関数Bに、実行アドレスを要求された関数の名前を
    他の名前に置き換える処理を関数Bに付加することによ
    り、ライブラリを変更することなく、もしくはプログラ
    ムモジュールを変更することなく、実行アドレスを要求
    された関数を他の関数に置き換えることを特徴とした請
    求項7記載の外部ライブラリ関数への結合方法。
  9. 【請求項9】 実行時にライブラリ関数を動的に結合し
    て実行するプログラムモジュールにおいて、プログラム
    モジュールのヘッダ部分に記述されているライブラリ名
    と上記プログラムモジュールが参照する関数名を他の名
    前に置き換えるステップと、置き換えた関数名と同じ名
    前の関数を含み、置き換えたライブラリ名と同じ名前を
    持つライブラリを本来のライブラリの代わりに結合して
    実行させるステップと、上記置き換えた関数名と同じ名
    前の関数で、本来のダイナミックリンクライブラリ関数
    を実行すると共に、前処理もしくは後処理を実行するス
    テップとがプログラムされ記録されるコンピュータ読み
    取り可能な記録媒体。
  10. 【請求項10】 プログラムモジュールの実行時に動的
    に結合されるライブラリAにおいて、上記ライブラリA
    と同じ名前を持ち、かつ上記ライブラリAに含まれる関
    数と同じ名前の関数を含むライブラリBを、上記プログ
    ラムモジュールの実行時に動的に結合させて実行するス
    テップと、本来のライブラリAに記述されているライブ
    ラリ名と外部から参照可能な関数名を他の名前に置き換
    えるステップと、上記ライブラリB内の関数から、本来
    のライブラリA内の関数を実行すると共に、前処理もし
    くは後処理を実行するステップとがプログラムされ記録
    される記録媒体。
  11. 【請求項11】 プログラムモジュールの実行時に動的
    に結合されるライブラリAにおいて、上記ライブラリA
    と同じ名前を持ち、かつ上記ライブラリAに含まれる関
    数と同じ名前の関数を含むライブラリBを、上記プログ
    ラムモジュールの実行時に動的に結合して実行させるス
    テップと、上記ライブラリB内の関数からライブラリA
    を動的にロードし、そのライブラリに含まれるライブラ
    リ関数の実行アドレスを求めるための関数を使用するこ
    とにより、本来のライブラリA内の関数を実行すると共
    に、前処理もしくは後処理を実行するステップとがプロ
    グラムされ、記録される記録媒体。
  12. 【請求項12】 実行時に、ダイナミックリンクライブ
    ラリを動的にロードする関数Aを使用することにより、
    ライブラリ関数を動的に結合して実行するプログラムモ
    ジュールにおいて、ロード要求されたライブラリの名前
    を他の名前に置き換える処理を関数Aに付加するステッ
    プを更に備えることにより、ライブラリもしくはプログ
    ラムモジュールを変更することなく、ロード要求された
    ライブラリを、他のダイナミックリンクライブラリに置
    き換えることを特徴とした請求項9もしくは請求項10
    記載の記録媒体。
  13. 【請求項13】 プログラムモジュールが動的にロード
    したライブラリに含まれる関数の実行アドレスを求める
    ための関数Bに、実行アドレスを要求された関数の名前
    を他の名前に置き換える処理を付加するステップを更に
    備えプログラムとして記録することにより、ライブラリ
    もしくはプログラムモジュールを変更することなく、実
    行アドレスを要求された関数を他の関数に置き換えるこ
    とを特徴とする請求項12記載の記録媒体。
JP9272669A 1997-10-06 1997-10-06 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体 Pending JPH11110194A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP9272669A JPH11110194A (ja) 1997-10-06 1997-10-06 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体
EP98308039A EP0908817A3 (en) 1997-10-06 1998-10-02 Method of changing a dynamic link library function efficiently and a computer system for executing the same
US09/166,284 US6665735B1 (en) 1997-10-06 1998-10-05 Method of changing a dynamic link library function efficiently and a computer system for executing the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9272669A JPH11110194A (ja) 1997-10-06 1997-10-06 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体

Publications (1)

Publication Number Publication Date
JPH11110194A true JPH11110194A (ja) 1999-04-23

Family

ID=17517147

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9272669A Pending JPH11110194A (ja) 1997-10-06 1997-10-06 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体

Country Status (3)

Country Link
US (1) US6665735B1 (ja)
EP (1) EP0908817A3 (ja)
JP (1) JPH11110194A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006503372A (ja) * 2002-10-14 2006-01-26 マキシマム アヴェイラビリティ リミテッド システムオブジェクトをジャーナリングする方法、システム及びソフトウェア
US7519951B2 (en) 2003-09-30 2009-04-14 International Business Machines Corporation Multi-attribute dynamic link library packaging
JP2011123842A (ja) * 2009-12-14 2011-06-23 Ricoh Co Ltd 画像形成装置、機能追加方法、及びプログラム

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7089242B1 (en) * 2000-02-29 2006-08-08 International Business Machines Corporation Method, system, program, and data structure for controlling access to sensitive functions
US6931626B2 (en) * 2001-01-17 2005-08-16 Hewlett-Packard Development Company, L.P. Method and apparatus for versioning statically bound files
FR2820221B1 (fr) 2001-02-01 2004-08-20 Cimai Technology Procede et systeme pour gerer des executables a bibliotheques partagees
US7757225B2 (en) * 2001-06-29 2010-07-13 Microsoft Corporation Linktime recognition of alternative implementations of programmed functionality
EP1398694B1 (en) * 2002-07-26 2013-09-11 Canon Kabushiki Kaisha Information processing method
US20050039196A1 (en) * 2003-08-13 2005-02-17 Sasidharan Prasanth Nalini Method and system for using a library
GB2407655B (en) * 2003-10-28 2009-08-05 Symbian Ltd Mapping of dynamic link libraries in a computing device
GB2407656B (en) * 2003-10-28 2008-12-17 Symbian Ltd Mapping of dynamic link libraries in computing devices
US20060026584A1 (en) * 2004-07-27 2006-02-02 Muratori Richard D Explicit linking of dynamic link libraries
US7653684B2 (en) * 2004-12-03 2010-01-26 Microsoft Corporation Enabling inter-subsystem resource sharing
US7624405B1 (en) * 2005-06-17 2009-11-24 Unisys Corporation Maintaining availability during change of resource dynamic link library in a clustered system
US8997074B1 (en) * 2006-09-29 2015-03-31 Trend Micro Incorporated Dynamic linking library (DLL) replacement in an embedded operating system environment
US8844032B2 (en) 2012-03-02 2014-09-23 Sri International Method and system for application-based policy monitoring and enforcement on a mobile device
GB2509079A (en) * 2012-12-19 2014-06-25 Control Tech Ltd Method Of Configuring A Modular System
CN103970553B (zh) * 2013-01-30 2017-10-31 广东美的制冷设备有限公司 一种家电产品功能升级的控制方法
US9767004B2 (en) * 2014-06-16 2017-09-19 Symantec Corporation Dynamic call tracking method based on CPU interrupt instructions to improve disassembly quality of indirect calls
CN105630557B (zh) * 2015-12-24 2018-12-28 迈普通信技术股份有限公司 热补丁方法和装置
CN110471837A (zh) * 2019-07-05 2019-11-19 平安证券股份有限公司 程序检测方法、装置及计算机可读存储介质
CN111596970B (zh) * 2020-05-12 2023-04-28 广州市百果园信息技术有限公司 动态库延迟加载方法、装置、设备和存储介质
US11347523B2 (en) 2020-11-05 2022-05-31 International Business Machines Corporation Updated shared library reloading without stopping the execution of an application
CN112363780A (zh) * 2020-11-29 2021-02-12 王志平 一种软件动态链接的实现方法
US11681520B2 (en) 2021-04-20 2023-06-20 International Business Machines Corporation Software upgrading using dynamic link library injection
US11675593B2 (en) 2021-08-31 2023-06-13 International Business Machines Corporation Dynamically updating a dynamic library
CN114860351A (zh) * 2022-07-08 2022-08-05 浙江口碑网络技术有限公司 异常识别方法及装置、存储介质、计算机设备

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175828A (en) * 1989-02-13 1992-12-29 Hewlett-Packard Company Method and apparatus for dynamically linking subprogram to main program using tabled procedure name comparison
GB2242293A (en) * 1990-01-05 1991-09-25 Apple Computer Apparatus and method for dynamic linking of computer software components
US5297285A (en) * 1991-07-23 1994-03-22 Telefonaktiebolaget L M Ericsson System for dynamically linking modular portions of computer software
DE69330691T2 (de) * 1992-06-03 2002-07-04 Sun Microsystems Inc Dynamisch konfigurierbares Kernsystem
US5339430A (en) * 1992-07-01 1994-08-16 Telefonaktiebolaget L M Ericsson System for dynamic run-time binding of software modules in a computer system
US5386568A (en) * 1992-12-01 1995-01-31 Yamaha Corporation Apparatus and method for linking software modules
CN1110064A (zh) * 1993-07-19 1995-10-11 塔里根特公司 动态连接系统
JPH07230380A (ja) * 1994-02-15 1995-08-29 Internatl Business Mach Corp <Ibm> 適用業務プログラムの利用管理方法およびシステム
CA2143488C (en) * 1995-02-27 2000-01-11 Robert Paul Duncan Dynamic link libraries without linker or loader support
JPH09134282A (ja) * 1995-11-08 1997-05-20 Hitachi Ltd プログラム作成方法
US6041363A (en) * 1996-03-29 2000-03-21 Sun Microsystems, Inc, Imbedding virtual device driver (VxD) calls in a dynamic link library (DLL)
US6003095A (en) * 1996-10-31 1999-12-14 International Business Machines Corporation Apparatus and method for demand loading a dynamic link library
US5903758A (en) * 1997-02-24 1999-05-11 Sun Microsystems, Inc. Method and apparatus for auditing dynamically linked procedure calls

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006503372A (ja) * 2002-10-14 2006-01-26 マキシマム アヴェイラビリティ リミテッド システムオブジェクトをジャーナリングする方法、システム及びソフトウェア
US7519951B2 (en) 2003-09-30 2009-04-14 International Business Machines Corporation Multi-attribute dynamic link library packaging
US8136092B2 (en) 2003-09-30 2012-03-13 International Business Machines Corporation Multi-attribute dynamic link library packaging
JP2011123842A (ja) * 2009-12-14 2011-06-23 Ricoh Co Ltd 画像形成装置、機能追加方法、及びプログラム
US8635633B2 (en) 2009-12-14 2014-01-21 Ricoh Company, Ltd. Image forming apparatus, function adding method, and computer-readable recording medium

Also Published As

Publication number Publication date
EP0908817A3 (en) 2003-01-29
EP0908817A2 (en) 1999-04-14
US6665735B1 (en) 2003-12-16

Similar Documents

Publication Publication Date Title
JPH11110194A (ja) 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体
US8028268B2 (en) System and method for building software package for embedded system
US6003095A (en) Apparatus and method for demand loading a dynamic link library
US6298481B1 (en) System for modifying the functionality of compiled computer code at run-time
JP4372348B2 (ja) マルチプル・クラスファイルのランタイムイメージへの結合
US8621419B2 (en) Automating the life cycle of a distributed computing application
US8037461B2 (en) Program code conversion
US6931627B2 (en) System and method for combinatorial test generation in a compatibility testing environment
JP4146590B2 (ja) タスク指向アプリケーションのための装置、方法及び記録媒体
JPS63201834A (ja) オブジエクト・モジユール生成方法
JPH02238527A (ja) 目標コンピュータ・システム、異なるコンピュータ・システム間でプログラムを実行する方法
JPH02238528A (ja) コンピュータ・プログラムの第一バージョン処理方法
JPH08339304A (ja) 機械独立コードを含むプラットフォーム標準オブジェクト・ファイルを生成する方法および装置
US20040268301A1 (en) Adding new compiler methods to an integrated development environment
US20050028151A1 (en) Module symbol export
US8200938B2 (en) Computer system and method providing a memory buffer for use with native and platform-independent software code
US20040083467A1 (en) System and method for executing intermediate code
JP2004503866A (ja) モジュラーコンピュータシステムおよび関連方法
US7219341B2 (en) Code analysis for selective runtime data processing
JPWO2011158478A1 (ja) データ処理システム及びデータ処理方法
JP4806158B2 (ja) マークアップ内でサブクラスを宣言的に定義し、使用するためのシステムおよび方法
JPH07230386A (ja) データ処理装置及び制御ルーチン呼出し方法
US5970250A (en) System, method, and computer program product for scoping operating system semanticis in a computing environment supporting multi-enclave processes
KR0125605B1 (ko) 프로그램의 아키덱쳐 변환방법 및 장치와 그 방법 및 장치를 사용하여 프로그램의 동작을 검증하는 방법 및 장치
US20020073133A1 (en) Register allocation method and software development method for various execution environments and LSI for executing developed software