JP5550578B2 - エントリ書換装置及びエントリ書換プログラム - Google Patents
エントリ書換装置及びエントリ書換プログラム Download PDFInfo
- Publication number
- JP5550578B2 JP5550578B2 JP2011023430A JP2011023430A JP5550578B2 JP 5550578 B2 JP5550578 B2 JP 5550578B2 JP 2011023430 A JP2011023430 A JP 2011023430A JP 2011023430 A JP2011023430 A JP 2011023430A JP 5550578 B2 JP5550578 B2 JP 5550578B2
- Authority
- JP
- Japan
- Prior art keywords
- shared library
- jump
- entry
- api
- unit
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Description
(1)各種ライブラリAPI(Application Programming Interface)群のエラーを模擬するには、対象プログラムを改変する必要があり、組合せ試験、システム試験での利用が困難であるし、改変が行えない第三者プログラムには適用できない。
(2)システムコールをフックする手法は、エラー注入などの任意のコードを実行する論理空間がカーネル空間30に限られ、一方、各種ライブラリ群が動作する論理空間はプロセス空間(ユーザ空間)である。よって、各種ライブラリAPIを同様にフックする手法が利用できない。敢えてフックしようとすると、予め任意コード実行用のコードを対象プログラムに埋め込む必要があり、これは、ラッパ関数を用いる場合と同様に対象プログラムを改変する必要がある。又は、カーネル空間30で実行しようとすると、カーネル空間30に飛び込む為に、フックしたい共有ライブラリAPIの1つ1つに個別に対応する疑似システムコールをOSカーネル内に用意する必要があり、OSカーネルの改変が必要になる。
指定された共有ライブラリAPI(Application Programming Interface)の属する共有ライブラリを示す所属共有ライブラリをメモリのプロセス空間にマップし、マップされた前記所属共有ライブラリの先頭アドレスを保持し、マップされた前記所属共有ライブラリに属する前記指定に係る前記共有ライブラリAPIに対応するジャンプ命令のジャンプ先アドレスを記録すると共に、記録した前記ジャンプ先アドレスを持つ前記ジャンプ命令をカーネル飛び込み用システムコールへジャンプする割込命令に書き換えるライブラリAPIエントリ書換部と、
前記ライブラリAPIエントリ書換部が書き換えた割込命令に対応する前記カーネル飛び込み用システムコールのエントリのジャンプ命令のジャンプ先アドレスを記録すると共に、前記ライブラリAPIエントリ書換部が書き換えた割込命令に対応する前記カーネル飛び込み用システムコールの前記エントリに設定されている前記ジャンプ命令を、所定のジャンプ命令によって呼ばれることで所定の処理を実行する任意コード実行部への前記所定のジャンプ命令に書き換えるシステムコールエントリ書換部と
を備えたことを特徴とする。
図1は、対象計算機101(エントリ書換装置、任意コード実行方式)の動作原理を示す構成図である。図1において、対象計算機101は、試験・検証の対象となる情報システムを構成するプログラム群が動作する計算機である。
(1)条件設定コマンド部10は、対象計算機101を利用する為のマン・マシン・インターフェース手段を提供する。
(2)システムコールエントリ書換部11は、カーネル飛び込み用システムコールエントリ31−1にあるカーネル飛び込み用システムコール実体31−2へのジャンプ命令を任意コード実行部32−1へジャンプ命令へ書き換える。
(3)ライブラリAPIエントリ書換部12は、エラー注入やトレース情報取得などの任意のコードを実行したい任意の共有ライブラリAPIエントリ22−1にある共有ライブラリAPI実体22−2へのジャンプ命令を、カーネル飛び込み用システムコールエントリ31−1へとジャンプする為の割込命令に書き換える。
(4)条件設定部13は、任意コードを実行する為の条件、例えば、呼出プロセスが指定のプログラムであった時のみ実行するなど、を実行条件テーブル32−3に設定する。
(5)シンボルテーブル生成部14は、フックしたい共有ライブラリAPIが属する共有ライブラリの共有ライブラリシンボルテーブル32−4を生成し、共有ライブラリシンボルテーブル32−4に保存する。
(6)任意コード実行部32−1は、実行条件テーブル32−3の条件に合致する場合に任意のコードを実行する。
次に動作について説明する。
なお、実施の形態1では、任意のコードとしてエラー模擬を行うコードを実行する場合を例に説明するが、トレース情報を取得する場合や、他の任意のコードを実行する場合も同様である。
図3は、各構成要素がどこにアクセスしているかを示す図である。
まず、シンボルテーブル生成部14は、図4に示すような共有ライブラリシンボルテーブル32−4に、操作者(ユーザ)によって指定された共有ライブラリAPIに関する情報を登録し、既に登録済みの場合はなにも行わない(S11)。図4では、共有ライブラリ名、APIシンボル名及びAPIエントリアドレスが登録されている。
次に,条件設定部13は、図5に示すような実行条件テーブル32−3に、操作者(ユーザ)による指定に従って、対象となる共有ライブラリAPIシンボル名、返値設定条件、呼出プログラム名などの情報を実行条件として登録する(S12)。なお、実行条件としては、操作者は、他にプロセスID、呼出元プログラム内の関数名などを指定可能である。
次に、ライブラリAPIエントリ書換部12は、操作者によって指定された共有ライブラリAPIが属する共有ライブラリを、条件設定コマンド部10が動作しているAppプロセス空間20にマップし、マップした先頭アドレスを保持する(S13)。この先頭アドレスを「0xVWXY」とする。この先頭アドレスは、後述する図8のS28の処理で使用される。
次に、ライブラリAPIエントリ書換部12は、図6の(a)に示すような、マップされた共有ライブラリの一部である共有ライブラリAPIエントリ22−1のうち、対象となる共有ライブラリAPIに対応するエントリのジャンプ命令(例えば図6の(a)のBL0x2A00)を読み取る。そして、ライブラリAPIエントリ書換部12は、この読み取った共有ライブラリAPI実体への本来のジャンプ先であるアドレス(BL0x2A00)を、図7(図7のAPIエントリの部分)に示すようなエントリ保存テーブル32−2(fwriteのBL0x2A00)に記録し(S14)、さらに、図6の(a)の対象ライブラリAPIエントリにあるジャンプ命令(BL0x2A00)を、カーネル飛び込み用システムコールに使用するrebootシステムコールへジャンプする割込命令(INT 0x〜)に書き換える(S15)。
なお、この例では、カーネル飛び込み用システムコールとしてrebootシステムコールを使用する場合を説明したが一例であり、rebootシステムコールを必ず使用する必要があるということではない。「実際にシステムコールが呼ばれたのか、書き換えられたエントリから飛び込んできたのか、が簡易に判別できるシステムコール」であれば良く、この条件に合致するシステムコールの一例として、rebootシステムコール
を使用する場合を説明した。
次に、システムコールエントリ書換部11は、カーネル飛び込み用システムコールに設定したrebootシステムコールのエントリ(図6の(b))にあるカーネル飛び込み用システムコール実体31−2へのジャンプ命令のジャンプ先アドレス(図6の(b)の「0xABCD」)を、エントリ保存テーブル32−2に記録(図7の上側に示すrebootの範囲)し(S16)、カーネル飛び込み用システムコールのエントリにあるジャンプ命令(図6の(b)のBL 0xABCD)を任意コード実行部32−1へのジャンプ命令に書き換える。以上が事前準備段階の動作フローである。
図9は、対象となったプログラムの実行フローの概略図である。
まず、ロードモジュール21内において共有ライブラリAPI(例えばfwriteとする)が呼び出される時には、ロードモジュール共有ライブラリAPI呼出21内から、図6(a)の共有ライブラリAPIエントリ22−1にジャンプし(S21)、事前に書き換えている割込命令(INT 0x〜:カーネル飛び込み用システムコールへジャンプする割込命令)により、OSカーネル31内にジャンプする(S22)。事前に書き換えられたrebootシステムコールエントリ(任意コード実行部32−1へのジャンプ命令に書き換え済み)のジャンプ命令により、ドライバ32内の任意コード実行部32−1にジャンプする(S23)。
次に、任意コード実行部32−1は、まず、図10に示すような、CPUが持つ割込履歴レジスタを読み出して、どの共有ライブラリAPIエントリ22−1で割込をかけてジャンプしてきのか確認し、共有ライブラリAPIエントリアドレスを取得する(S24)。
条件に合致した場合は、任意コード実行部32−1は、返値設定を行い(S31)、カーネルスタック内に保存されたRP(リターンポインタ)が示すAppプロセス空間20のロードモジュール共有ライブラリAPI呼出21内の共有ライブラリAPI呼出の直後にジャンプする(S32)。
次に、図12〜図18を参照して実施の形態2の対象計算機102を説明する。対象計算機102は、実施の形態1の対象計算機101に対して、さらに、バックトレース実行部32−5と、個別プロセスシンボルテーブル32−6(図17)とを備えた構成である。
図13は、バックトレース実行部32−5の動作概念を示している。
図14は、共有ライブラリの呼ばれた経路を示す概念図である。
図15は、共有ライブラリの呼ばれた経路を示す概念図である。
図16は、バックトレース実行部32−5の動作フローである。
図17は、個別プロセスシンボルテーブル32−6を示す図である。
図18は、実施の形態2における実行条件テーブルを示す図である。
次に動作について説明する。
図13は、バックトレース実行部32−5の動作概念を示している。バックトレース実行部32−5は、図8の返値設定条件に合致するかの判断時(図8のS30)に呼ばれる。バックトレース実行部32−5は、指定された経路、例えば、図14において、共有ライブラリAPIslib_2が、sub_02、sub_13を経由して呼ばれた時に合致するかを判断する為にバックトレースを行う。
図19、図20を参照して実施の形態3を説明する。実施の形態3は、コンピュータである対象計算機101、102のハードウェア構成を説明する。
図19は、コンピュータである対象計算機101あるいは対象計算機102の外観の一例を示す図である。
図20は、対象計算機101あるいは対象計算機102のハードウェア資源の一例を示す図である。以下の説明は対象計算機101とする。対象計算機102についても対象計算機101の説明がそのまま当てはまる。
(a)試験実施者と対話的に任意コード実行条件の入力を受け付けて、条件設定部に対して実行条件テーブルへの書き込みを指示すると共に、ライブラリAPIエントリ書換部に対して任意コード実行のトリガーとなるライブラリAPIエントリの書換を指示すると共に、システムコールエントリ書換部に対してカーネル飛び込み用システムコールに指定したシステムコールのエントリの書換を指示すると共に、シンボルテーブル生成部に対して対象となる共有ライブラリのシンボルテーブルの生成を指示する手段(条件設定コマンド);
(b)対象プログラムが動的にリンクする共有ライブラリ内の対象となる共有ライブラリAPIエントリの飛び先をカーネル飛び込み用システムコールエントリのアドレスに書き換え、元のアドレスをエントリ保存テーブルに保持する手段(ライブラリAPIエントリ書換部);
(c)カーネル内のシステムコールエントリの飛び先を任意コード実行部へと書き換える手段(システムコールエントリ書換部);
(d)任意コードを実行する条件として、対象共有ライブラリAPI、指定プログラム、プロセスIDなどの組合わされた条件を実行条件テーブルに書き込む手段(条件設定部);
(e)対象となる共有ライブラリAPIが属する共有ライブラリを検索し、その共有ライブラリのシンボルテーブルを相対アドレス値でソートした状態で共有ライブラリシンボルテーブルに保存する手段(シンボルテーブル生成部);
(f)呼び出されると、どの共有ライブラリAPIから呼び出されたのかを判別した上で実行条件テーブルをチェックし、条件に合致した場合、指定されたコードを実行する手段(任意コード実行部);
(a)共有ライブラリAPIがロードモジュール内のどの関数を経由して呼び出されたかを検索する手段(バックトレース実行部);
(b)バックトレースを実行する為に必要な各アプリケーションプロセスの個別のシンボルテーブルを保持する要素(個別プロセスシンボルテーブル);
Claims (6)
- 指定された共有ライブラリAPI(Application Programming Interface)の属する共有ライブラリを示す所属共有ライブラリをメモリのプロセス空間にマップし、マップされた前記所属共有ライブラリの先頭アドレスを保持し、マップされた前記所属共有ライブラリに属する前記指定に係る前記共有ライブラリAPIに対応するジャンプ命令のジャンプ先アドレスを記録すると共に、記録した前記ジャンプ先アドレスを持つ前記ジャンプ命令をカーネル飛び込み用システムコールへジャンプする割込命令に書き換えるライブラリAPIエントリ書換部と、
前記ライブラリAPIエントリ書換部が書き換えた割込命令に対応する前記カーネル飛び込み用システムコールのエントリのジャンプ命令のジャンプ先アドレスを記録すると共に、前記ライブラリAPIエントリ書換部が書き換えた割込命令に対応する前記カーネル飛び込み用システムコールの前記エントリに設定されている前記ジャンプ命令を、所定のジャンプ命令によって呼ばれることで所定の処理を実行する任意コード実行部への前記所定のジャンプ命令に書き換えるシステムコールエントリ書換部と
を備えたことを特徴とするエントリ書換装置。 - 前記エントリ書換装置は、さらに、
共有ライブラリAPIに対する所定の実行条件を記憶する実行条件記憶部と、
前記任意コード実行部であって、前記所定のジャンプ命令によって呼ばれることで、前記実行条件記憶部が記憶する前記実行条件に基づいて、前記所定の処理を実行する任意コード実行部と
を備えたことを特徴とする請求項1記載のエントリ書換装置。 - 前記エントリ書換装置は、さらに、
所定の共有ライブラリAPIに関する情報を記憶するシンボルテーブル記憶部を備え、
前記任意コード実行部は、
前記所定のジャンプ命令によって呼ばれた場合に、前記シンボルテーブル記憶部に記憶された情報を参照することによりどの前記共有ライブラリAPIから呼び出されたのかを判別し、判別した前記共有ライブラリAPIに対応する実行条件を前記実行条件記憶部から抽出し、抽出した前記共有ライブラリAPIに対応する前記実行条件に基づいて、前記所定の処理を実行することを特徴とする請求項2記載のエントリ書換装置。 - 前記任意コード実行部は、
判別した前記共有ライブラリAPIに対応する実行条件を前記実行条件記憶部から抽出した場合に、抽出した前記共有ライブラリAPIに対応する前記実行条件が呼び出された前記共有ライブラリAPIの状態に合致するかどうかを判別し、合致すると判別した場合に、抽出した前記共有ライブラリAPIに対応する前記実行条件に基づいて前記所定の処理を実行することを特徴とする請求項3記載のエントリ書換装置。 - 前記エントリ書換装置は、さらに、
アプリケーションプロセスごとにシンボル名と前記シンボルの開始アドレスとが記載され、バックトレースの実行に使用される個別シンボルテーブルを記憶する個別シンボルテーブル記憶部と、
前記個別シンボルテーブル記憶部が記憶する前記個別シンボルテーブルを用いることにより、前記共有ライブラリAPIがどの関数を経由して呼び出されたかを特定する処理を示すバックトレースを実行するバックトレース実行部と
を備えたことを特徴とする請求項4記載のエントリ書換装置。 - コンピュータを、
指定された共有ライブラリAPI(Application Programming Interface)の属する共有ライブラリを示す所属共有ライブラリをメモリのプロセス空間にマップし、マップされた前記所属共有ライブラリの先頭アドレスを保持し、マップされた前記所属共有ライブラリに属する前記指定に係る前記共有ライブラリAPIに対応するジャンプ命令のジャンプ先アドレスを記録すると共に、記録した前記ジャンプ先アドレスを持つ前記ジャンプ命令をカーネル飛び込み用システムコールへジャンプする割込命令に書き換えるライブラリAPIエントリ書換部、
前記ライブラリAPIエントリ書換部が書き換えた割込命令に対応する前記カーネル飛び込み用システムコールのエントリのジャンプ命令のジャンプ先アドレスを記録すると共に、前記ライブラリAPIエントリ書換部が書き換えた割込命令に対応する前記カーネル飛び込み用システムコールの前記エントリに設定されている前記ジャンプ命令を、所定のジャンプ命令によって呼ばれることで所定の処理を実行する任意コード実行部への前記所定のジャンプ命令に書き換えるシステムコールエントリ書換部、
として機能させるためのエントリ書換プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011023430A JP5550578B2 (ja) | 2011-02-06 | 2011-02-06 | エントリ書換装置及びエントリ書換プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011023430A JP5550578B2 (ja) | 2011-02-06 | 2011-02-06 | エントリ書換装置及びエントリ書換プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2012164098A JP2012164098A (ja) | 2012-08-30 |
JP5550578B2 true JP5550578B2 (ja) | 2014-07-16 |
Family
ID=46843435
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011023430A Expired - Fee Related JP5550578B2 (ja) | 2011-02-06 | 2011-02-06 | エントリ書換装置及びエントリ書換プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5550578B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6061763B2 (ja) * | 2013-04-09 | 2017-01-18 | 三菱電機株式会社 | 単体試験支援装置及び単体試験支援プログラム |
JP7115552B2 (ja) * | 2018-10-11 | 2022-08-09 | 日本電信電話株式会社 | 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10269105A (ja) * | 1997-01-27 | 1998-10-09 | N T T Data Tsushin Kk | トレースシステム、リソース解放漏れ検出システム及び記録媒体 |
JP2000076095A (ja) * | 1998-08-28 | 2000-03-14 | Fujitsu Ltd | プログラムトレース装置およびプログラムトレース方法およびそのプログラムを記憶した記憶媒体 |
JP4833792B2 (ja) * | 2006-10-23 | 2011-12-07 | ルネサスエレクトロニクス株式会社 | データ解析システム |
JP2009237610A (ja) * | 2008-03-25 | 2009-10-15 | Ntt Docomo Inc | コード変換装置及びコード変換方法 |
-
2011
- 2011-02-06 JP JP2011023430A patent/JP5550578B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2012164098A (ja) | 2012-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230094191A1 (en) | Scalable execution tracing for large program codebases | |
US10409700B2 (en) | Flexible configuration and control of a testing system | |
US8627296B1 (en) | Unified unit and integration test with automatic mock creation | |
US20180024911A1 (en) | Software code debugger for quick detection of error root causes | |
US7530056B1 (en) | Method and system for detecting runtime defects in a program by comparing correct and incorrect runs | |
US20040243882A1 (en) | System and method for fault injection and monitoring | |
US10176077B2 (en) | Generating breakpoints for cross-layer debugging | |
US11042466B2 (en) | Exception prediction before an actual exception during debugging | |
KR20180129623A (ko) | 연관된 다중 파일 정적 분석 장치 | |
JPWO2019077738A1 (ja) | データ検証装置、データ検証方法及びデータ検証プログラム | |
CN111428233A (zh) | 一种嵌入式设备固件的安全性分析方法 | |
JP5550578B2 (ja) | エントリ書換装置及びエントリ書換プログラム | |
US20070150866A1 (en) | Displaying parameters associated with call statements | |
CN111385661B (zh) | 语音控制全屏播放的方法、装置、终端及存储介质 | |
US9058184B2 (en) | Run time generation and functionality validation of device drivers | |
Wu et al. | CydiOS: A Model-Based Testing Framework for iOS Apps | |
US20150026523A1 (en) | Debugging method and computer program product | |
US9632912B1 (en) | Method and system for debugging a program | |
JP2022150518A (ja) | テスト処理プログラム、テスト処理方法および情報処理装置 | |
JP2016126700A (ja) | プログラム検証装置、プログラム検証方法及びプログラム検証プログラム | |
US9697018B2 (en) | Synthesizing inputs to preserve functionality | |
CN111740876B (zh) | 一种应用装置、测试方法、存储介质及电子设备 | |
JP2020038482A (ja) | プログラム検証プログラム、プログラム検証方法およびプログラム検証装置 | |
US20170220450A1 (en) | Analytic method and analyzing apparatus | |
KR101225577B1 (ko) | 어셈블리 언어 코드의 분석 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20131009 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20140410 |
|
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: 20140422 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140520 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5550578 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |