JP6116983B2 - エントリーポイント抽出装置 - Google Patents

エントリーポイント抽出装置 Download PDF

Info

Publication number
JP6116983B2
JP6116983B2 JP2013085429A JP2013085429A JP6116983B2 JP 6116983 B2 JP6116983 B2 JP 6116983B2 JP 2013085429 A JP2013085429 A JP 2013085429A JP 2013085429 A JP2013085429 A JP 2013085429A JP 6116983 B2 JP6116983 B2 JP 6116983B2
Authority
JP
Japan
Prior art keywords
entry point
point list
storage unit
unit
source 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.)
Active
Application number
JP2013085429A
Other languages
English (en)
Other versions
JP2014206948A (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 JP2013085429A priority Critical patent/JP6116983B2/ja
Publication of JP2014206948A publication Critical patent/JP2014206948A/ja
Application granted granted Critical
Publication of JP6116983B2 publication Critical patent/JP6116983B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本明細書に記載の実施の形態は、エントリーポイント抽出装置に関する。
社会システム事業を中心に、昔から利用しているソフトウェア資産を無修正で使用し続けたい、というニーズがある。ところが、ハードウェアの老朽化・生産終了に伴い、ソフトウェアを動かすハードウェアがなくなりつつある。また、ソフトウェア資産も顧客単位で機能がカスタマイズされる等の多様化のため、移植も難しい。一方、仮想化技術を利用して、多くのアーキテクチャマシンをソフトウェアエミュレーションすることでソフトウェア資産を延命できる可能性がある。オープンソースのプロセッサエミュレータであるQEMUに代表される仮想化エミュレータは、ターゲットコードを実行させながらホストコードへ変換(動的変換)するもので、リアルタイム性に乏しく、応答性能・起動時間の予測が困難であり、組み込み機器には向かない。
そこで、仮想化技術の高速化が求められている。仮想化技術の高速化の一環として行われる静的事前変換・動的事前変換に関しては、いろいろな提案がなされている。例えば、マルチコア環境において、静的解析結果と動的解析結果を組み合わせて利用し、精度よく重要度の高いプログラムブロックの事前コンパイルを行い、プログラムを高速化すること(事前変換)が提案されている。また、ターゲットコードの変換において、静的実行ないしは動的実行の分岐時の速度性能を高める提案がなされている。
応答性能・起動時間を安定させるため、ターゲットコード変換を事前に行う事前変換の場合、以下の問題があった。すなわち、ターゲットコードの動的変換が前提の現状の仮想マシンエミュレータでは、基本ブロックのエントリーポイントが分からなくなることがある。また、間接アドレス指定による分岐・サブルーチンコールやメモリ上に書き込まれた値を用いた分岐・サブルーチンコールでは、分岐発生時のジャンプ先アドレスの同定が困難なことがある。
そのため、基本ブロック抽出のために、バイナリーコードレベルでレジスタ値の依存関係・メモリアクセスの履歴を見て、エントリーポイントとなる可能性のあるところを全て取り出すことが提案された。
特開平9−26884号公報 特許第3964142号公報 特許第4409360号公報
基本ブロックは、エントリーポイントと呼ばれる先頭位置から、分岐命令やCPU状態フラグを変更する命令までの命令列である。このため、基本ブロックを抽出するためには、エントリーポイントを正しく抽出するようにバイナリーコードレベルでレジスタ値の依存関係・メモリアクセスの履歴を見て、エントリーポイントとなる可能性のあるところを全て取り出す必要がある。
しかし、メモリアクセスの履歴を全て追いかけると状態爆発が生じることがあるため,命令によっては探索を打ち切らざるを得ない状態が生じ、バイナリーコードの探索のみでは全てを抽出することが困難になるという問題があった。
本発明は、ソースコードやコンパイラやリンカが出力するシンボル情報やアセンブラコード出力を最大限利用して、エントリーポイントを的確に発見/抽出する技術を提供することを目的とする。
一の実施の形態によれば、エントリーポイント抽出装置が提案される。エントリーポイント抽出装置は、第1の記憶手段と、第2の記憶手段と、第3の記憶手段と、第4の記憶手段と、生成手段と、変換手段とを有する。
第1の記憶手段は、ソースコードの行番号とアセンブラコードの対からなる情報であるニーモニックを記憶する
第2の記憶手段は、ソースコード中に存在する関数、手続き名、外部公開ラベル、グローバルデータ名を抽出した情報であるシンボル情報を記憶する。
第3の記憶手段は、シンボル情報に含まれるシンボルがどのメモリ番地に配置されるかを示す情報であるロケート情報を記憶する。
第4の記憶手段は、ソースコードから生成されたバイナリーコードを記憶する。
生成手段は、シンボル情報について対応するロケート情報を記述した情報である第1のエントリーポイントリストを生成する。
変換手段は、バイナリーコードから分岐先を抽出したリストである第2のエントリーポイントリストを生成し、第1のエントリーポイントリストと第2のエントリーポイントリストとを結合し、結合後のエントリーポイントリストから重複しているエントリーポイントを削除して残ったエントリーポイントを第3のエントリーポイントリストとして記憶させ、第3のエントリーポイントリストを参照してソースコードの事前変換を行う。
第1の実施の形態に係るエントリーポイント抽出装置の構成例を示すブロック図 エントリーポイント抽出装置の動作例を示すフローチャート シンボル情報記憶部に記憶されたシンボル情報の例を示す 図3に示したシンボル情報から関数名とアドレスを抽出した中間データの例を示す図 図4に示した中間データに内部ラベルを付加することによって生成されたエントリーポイントリストの例を示す図 ソースコード記憶部10に記憶されるソースコードの一部の例を示す図 図6に示したソースコードの一部に対応する、シンボル情報及びロケート情報の例を示す図 図7に示したシンボル情報及びロケート情報に対応する、エントリーポイントリストの例を示す図 第2の実施の形態に係るエントリーポイントリスト抽出装置の構成例を示すブロック図 第2の実施の形態に係るエントリーポイント抽出装置の動作例を示すフローチャート 図10に続くフローチャート ジャンプテーブルの例を示す図 図12のジャンプテーブルから変換されたニーモニックの例を示す図 ソースコード記憶部に記憶されているソースコードの一部分であって、例外パターンデータベース部に記憶されている例外パターン(命令文)の一つに合致する部分を示す図 ニーモニック記憶部に記憶されるニーモニックの一部であって、図14に示した例外パターンに合致するソースコードの部分に対応するニーモニックの一部を示す図 シンボル情報記憶部に記憶されるシンボル情報の一部であって、図14に示した例外パターンに合致するシンボル情報の一部を示す図 図14、図15、図16に示すソースコード、ニーモニック、シンボル情報から生成されるエントリーポイントリストの例を示す図
以下、図面を参照して本発明の実施の形態に係るエントリーポイント抽出装置を説明する。
[0.用語の定義]
本明細書で使用する用語の定義を述べる。
(1)シンボル(シンボル情報)
「シンボル」とは、デバッガが利用する変数名、関数名などの名前をいう。
(2)事前変換
「事前変換」とは、ソフトウェアをエミュレータにより安定的に実行するために、エミュレーション対象コードを事前に解析して基本ブロック単位にまとめたコードを作成することをいう。「事前変換」によって、エミュレーション中にコード変換を行わないようにすることで安定的な実行が可能となる。
(3)基本ブロック
「基本ブロック」とは、プログラム実行コード中で、内部に分岐を持たず、CPUの状態フラグも変更しない命令セット群を取り出したものをいう。コンパイラの制御フローグラフに用いる「基本ブロック」よりは広い概念であり、他の基本ブロックからの分岐先が当該ブロック内にあっても「基本ブロック」である。
(4)エントリーポイント
「エントリーポイント」とは、プログラムが開始される場所をいい、モジュールの最初、関数の先頭、ラベル、場合分けのcase文のはじめもエントリーポイントになり得る。
[1.第1の実施の形態]
本発明の第1の実施の形態について説明する。
[1.1.装置構成例]
第1の実施の形態に係るエントリーポイント抽出装置の構成例を図1に示す。
エントリーポイント抽出装置1は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読み出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
エントリーポイント抽出装置1は、ソースコード記憶部10と、ソースコード記憶部10に接続されたコンパイラ部11及びニーモニック記憶部13と、コンパイラ部11に接続されたリンカ部12と、リンカ部12に接続されたシンボル情報記憶部14並びにロケート情報記憶部15と、ソースコード記憶部10、ニーモニック記憶部13、シンボル情報記憶部14並びにロケート情報記憶部15に接続されたエントリーポイントリスト生成部16と、エントリーポイントリスト生成部16に接続されたエントリーポイントリスト記憶部17と、エントリーポイントリスト記憶部17に接続された事前変換部20と、前記リンカ部12に接続されるとともに前記事前変換部20に接続するバイナリーコード記憶部18と、前記事前変換部20に接続された事前変換対象エントリーポイントリスト記憶部19と、前記事前変換部20に接続された事前変換後実行イメージ記憶部21と、前記事前変換後実行イメージ記憶部21に接続されたローダー部22と、ローダー部22に接続されたシステムイメージ記憶部25と、ローダー部22に接続されたホストマシン部23とを有する。また、ホストマシン部23には、周辺デバイス24が接続されている。
ソースコード記憶部10は、ニーモニック記憶部13は第1の記憶手段に相当し、シンボル情報記憶部14は第2の記憶手段に相当し、ロケート情報記憶部15は第3の記憶手段に相当し、バイナリーコード記憶部18は第4の記憶手段に相当し、エントリーポイントリスト生成部16は生成手段に相当し、事前変換部20は変換手段に相当する。
なお、エントリーポイント抽出装置1のこれら構成要素はエントリーポイント抽出装置1の機能を、機能ごとにまとめてブロックとして捉えたものであり、エントリーポイント抽出装置1が各構成要素に対応する基板、装置、回路、部品などの物理的構成要素を備えていなければならないことを意味するわけではない。また、「接続されている」とは、データ、情報、命令などの送受信、受け取り、受け渡しなどが可能な状態になっていることをいい、互いに配線で連結されているような物理的な接続に限られる意味ではない。
[1.2.各部の説明]
ソースコード記憶部10は、事前変換の対象となるプログラムのソースコードを記憶する機能を有する。
コンパイラ部11は、プログラミング言語で書かれた、プログラムのソースコード(原始コード)を、機械語、バイトコードなどの中間言語によるオブジェクトコード(目的コード)に変換する機能を有する。また、コンパイラ部11は、前記ソースコードから後述するニーモニックを生成し、出力する機能を有する。
リンカ部12は、コンパイラによって変換されたオブジェクトコードに、必要なライブラリなどを付け加えて実行可能ファイルを生成する機能を有する。また、リンカ部12は、前記ソースコードから後述するシンボル情報及びロケート情報を生成し、出力する機能を有する。
ニーモニック記憶部13は、基となるソースコード行番号とアセンブラコードの対からなる情報であるニーモニックを記憶する機能を有する。
シンボル情報記憶部14は、ソースコード中に存在する関数、手続き名・外部公開ラベル・グローバルデータ名を抽出した情報であるシンボル情報を記憶する機能を有する。
ロケート情報記憶部15は、シンボル情報に含まれるシンボルがどのメモリ番地に配置されるかを示す情報であるロケート情報を記憶する機能を有する。
バイナリーコード記憶部18は、リンカ部12によってソースコードから生成されたバイナリーコードを記憶する機能を有する。
エントリーポイントリスト生成部16は、アプリケーション層のソースコードを構文解析し、関数・手続き・外部公開ラベルのみをフィルタリング(抽出)し、そのフィルタリングの結果残ったシンボル情報について対応するロケート情報を記述した情報であるエントリーポイントリスト(「第1のエントリーポイントリスト」と呼ぶ)を生成する。
エントリーポイントリスト記憶部17は、エントリーポイントリスト生成部16によって生成されたエントリーポイントリストを記憶する機能を有する。
事前変換部20は、バイナリーコード記憶部18に記憶されているバイナリーコードをパースして、可能性のある分岐先を事前変換対象エントリーポイントリスト(「第3のエントリーポイントリスト」とも呼ぶ)に入力しながらバイナリーコードをホストコードに変換するコード変換を行うとともに、分岐先が多いあるいは分岐が深いなどの理由で、前記バイナリーコードからだけでは追跡できない場合には、先のフィルタリング処理で取得したエントリーポイントリスト(第1のエントリーポイントリスト)を事前変換対象エントリーポイントリストへ入力し、更にコード変換を試す機能を有する。あるいは、第1のエントリーポイントリストと第2のエントリーポイントリストを照合し、合併させて、第3のエントリーポイントを抽出する。可能性のある分岐先を抽出し、これを事前変換対象エントリーポイントリストに入力する方法は、どのような方法でもよいが、例えば本件出願人による日本国特許出願・出願番号2011−17989号に記載された方法を用いてよい。
また、事前変換部20は、事前変換対象エントリーポイントリストを生成し、事前変換対象エントリーポイントリスト記憶部19に記憶させる機能を有する。事前変換対象エントリーポイントリストは、事前変換部20によって生成される情報であって、前記エントリーポイントリスト記憶部17に記憶された第1のエントリーポイントリストと、前記バイナリーコードを追跡することによって事前変換部20が生成した第2のエントリーポイントリストとを結合し、これらの結合後のエントリーポイントリストから重複しているエントリーポイントを削除して残ったエントリーポイントのリストである。
事前変換対象エントリーポイントリスト記憶部19は、事前変換対象エントリーポイントリストを記憶する機能を有する。事前変換対象エントリーポイントリストは第3のエントリーポイントリストに相当する。
事前変換後実行イメージ記憶部21は、基本ブロックに分割されたターゲットコードに対応する中間コードについて、ホストコードに変換されたデータである実行イメージを記憶する機能を有する。
システムイメージ記憶部25は、仮想化(エミュレータ)層の実行イメージとOS層の実行イメージを記憶する機能を有する。
ローダー部22は、事前変換後実行イメージ記憶部21から実行イメージを読み出し、システムイメージ記憶部25の仮想化層の実行イメージとOS層の実行イメージと合併させ、ホストマシン部23に渡す機能を有する。実行イメージはホストマシン部23の実行コード格納用ROMに格納される。
ホストマシン部23は、ローダー部22から渡された実行イメージに基づいて、プロセスを実行する機能を有する。ホストマシン部23は、バスによって相互接続されたCPU、実行用RAM、実行コード格納用ROM、ドライバを有しており、ドライバは周辺デバイス24に接続されている。
周辺デバイス24は、ホストマシン部23によって制御される機器群であって、例えば、プリンタやキーボードを接続するためのUSBポートあるいはCOMポート、インターネットへ接続するためのネットワークアダプタ、またはRAMやROMなどのメモリ、シリアルポートである。
[1.3.動作例]
図1に示したエントリーポイント抽出装置の動作例を、図2を参照しながら説明する。図2は、エントリーポイント抽出装置の動作例を示すフローチャートである。
まず、エントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16はソースコード記憶部10に記憶されたソースコードから一行読み出し、ソースコード解析を実行する(S1)。
なお、ステップS1に先立って、コンパイラ部11はニーモニックを生成して、これをニーモニック記憶部13に記憶させており、リンカ部12は、コンパイラ部11の出力に基づいて、シンボル情報並びにロケート情報を生成し、それぞれシンボル情報記憶部14、ロケート情報記憶部15に記憶させているものとする。
ここで、シンボル情報について説明する。図3にシンボル情報記憶部14に記憶されたシンボル情報の例を示す。シンボル情報は、ソースコードの行(命令)ごとに、行番号とベースアドレスと、オフセットアドレスと、シンボル属性とラベル名との組を有する情報である。コンパイラやリンカーが出力するシンボル情報は、余分な情報が混入している。例えば、シンボル情報は行番号やベースアドレス、オフセットアドレスなどを含んでおり、かつ関数名などのラベルとデータ名が混在している状態である。
そこで、エントリーポイントリスト生成部16は、関数名とデータ名も混在しているシンボル情報から関数名とその開始アドレスを構文解析により抽出する。図3に示したシンボル情報から関数名とアドレスを抽出した中間データの例を図4に示す。図に示すように中間データは、シンボル属性、ラベル名(関数名)、開始アドレスの組で構成されている。
しかし、この中間データには内部ラベル(jmp先の細かいラベル)は含まれないので、エントリーポイントリスト生成部16は、内部ラベル(jmp先の細かいラベル)をソースコードから検出して中間データに付加し、エントリーポイントリストとして出力する。なお、内部ラベルについても開始アドレスを記述する。図5に、図4に示した中間データに内部ラベルを付加することによって生成されたエントリーポイントリストの例を示す。図5に示した例では、ラベル名が「label1」「label2」である行が内部ラベルとして検出され追加されたデータである。なお、図3から図5ではシンボル属性を含むデータ例を示したが、シンボル情報が無くとも本実施の形態は成立する。
エントリーポイントリスト生成部16では、シンボル情報やニーモニックなどを利用して、内部ラベルも抽出する。
図2に戻りエントリーポイントリスト生成処理の説明を再開する。次に、エントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16は、読み込んだ行(命令)からプロシージャ先頭若しくはラベルを発見したか否かを判定する(S2)。
読み込んだ行からプロシージャ先頭若しくはラベルを発見したと判定した場合(S2、Yes)、エントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16はステップS2において発見したプロシージャ(関数)・ラベル名に対応するシンボルをシンボル情報記憶部14に記憶されたシンボル情報から抽出する(S3)。次にエントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16は、ロケート情報記憶部15に記憶されたロケート情報から、ステップS3で抽出したシンボルに対応するロケート情報を抽出する(S4)。
次にエントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16は、ステップS4において抽出したロケート情報に基づいて、エントリーポイント情報を生成し、エントリーポイントリスト記憶部17に記憶されているエントリーポイントリスト(「第1のエントリーポイントリスト」と呼ぶ)にこのエントリーポイント情報を追加する(S5)。
一方、読み込んだ行からプロシージャ先頭若しくはラベルを発見しなかったと判定した場合(S2、No)、エントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16は、ソースコード記憶部10に記憶されたソースコードから全ての行を読み込んだか否かを判定する(S6)。
ステップS6において、ソースコード記憶部10に記憶されたソースコードの全ての行を読み込んでいないと判定した場合(S6、No)、エントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16は、ステップS1に戻り、ソースコード記憶部10に記憶されたソースコードからいまだ読み込んでいない次の行を読み込んで、その行についてステップS1を実行する(S1)。
一方、ステップS6において、ソースコード記憶部10に記憶されたソースコードの全ての行を読み込んだと判定した場合(S6、Yes)、エントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16は、バイナリーコード記憶部18に記憶されたバイナリーコードから別のエントリーポイントリスト(「第2のエントリーポイントリスト」と呼ぶ)を生成し、この第2のエントリーポイントリストとエントリーポイントリスト記憶部17に記憶された第1のエントリーポイントリストとを結合し、結合後のリストから重複するエントリーポイントを削除して、もう一つ別のエントリーポイントリスト(「事前変換対象エントリーポイントリスト」と呼ぶ)を生成し、この事前変換対象エントリーポイントリストを事前変換対象エントリーポイントリスト記憶部19に記憶させる。
以上で、エントリーポイントリスト生成処理が終了する。
なお、事前変換部20は、事前変換対象エントリーポイントリスト記憶部19に記憶された事前変換対象エントリーポイントリストからエントリーポイントを読みだして参照しながら、ソースコード(ターゲットコードともいう)について、分岐命令や特殊レジスタ値の有無を確認し、ソースコードを基本ブロックに分割し、基本ブロックに分割されたターゲットコードに対応するバイナリーコード(中間コードともいう)をホストコードに変換してゆく。
エントリーポイントリスト生成処理で生成されるエントリーポイントリストの例を掲げる。図6は、ソースコード記憶部10に記憶されるソースコードの一部の例である。このソースコードにはエントリーポイントリストとして抽出される対象である関数名「PROC1」と、内部ラベル「L2」及び「L2」が含まれているものとする。
図7は、図6に示したソースコードの一部に対応する、シンボル情報及びロケート情報の例を示す。シンボル情報及びロケート情報には、エントリーポイントとなり得る箇所(関数名、ラベル名など)の開始アドレス、シンボル属性、ラベル名が記述されている。
図8は、図7に示したシンボル情報及びロケート情報に対応する、エントリーポイントリストの例である。この例では、エントリーポイントとなる関数名「PROC1」と、内部ラベル「L1」及び「L2」の開始アドレスのみ含まれている。事前変換部20は、エントリーポイントリストに含まれる開始アドレスに基づいて基本ブロックの開始位置を取得し、基本ブロックのホストコードへの変換を行っていく。
[2.第2の実施の形態]
本発明の第2の実施の形態について説明する。第2の実施の形態に係るエントリーポイントリスト抽出装置は、基本的構成は前述の第1の実施の形態に係るエントリーポイントリスト抽出装置と同様であるが、ジャンプテーブルを用いた分岐命令などの複雑な形式のものをソースコード解析時に発見すると、ロケート情報及びニーモニックを利用して、それらをエントリーポイントリストに加えるための例外データベースをさらに有している点で相違している。
[2.1.エントリーポイントリスト抽出装置の構成例]
第2の実施の形態に係るエントリーポイントリスト抽出装置の構成について説明する。図9は、第2の実施の形態に係るエントリーポイントリスト抽出装置の構成例を示すブロック図である。なお、第1の実施の形態に係るエントリーポイントリスト抽出装置と同様の構成要素については、同一の参照符号を付しそれらの詳細な説明は省略する。
第2の実施の形態に係るエントリーポイントリスト抽出装置1Aは、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読み出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
エントリーポイント抽出装置1Aは、ソースコード記憶部10と、ソースコード記憶部10に接続されたコンパイラ部11及びニーモニック記憶部13と、コンパイラ部11に接続されたリンカ部12と、リンカ部12に接続されたシンボル情報記憶部14並びにロケート情報記憶部15と、ソースコード記憶部10、ニーモニック記憶部13、シンボル情報記憶部14並びにロケート情報記憶部15に接続されたエントリーポイントリスト生成部16Aと、エントリーポイントリスト生成部16Aに接続されたエントリーポイントリスト記憶部17と、エントリーポイントリスト生成部16Aへ接続する例外パターンデータベース部26と、エントリーポイントリスト記憶部17に接続された事前変換部20Aと、前記リンカ部12に接続されるとともに前記事前変換部20Aに接続するバイナリーコード記憶部18と、前記事前変換部20Aに接続された事前変換対象エントリーポイントリスト記憶部19と、前記事前変換部20Aに接続された事前変換後実行イメージ記憶部21と、前記事前変換後実行イメージ記憶部21に接続されたローダー部22と、ローダー部22に接続されたホストマシン部23とを有する。
[2.2.各部の説明]
例外パターンデータベース部26は、バイナリーコードからではエントリーポイントとして抽出することが困難な構文(命令文)を記憶する機能を有する。抽出することが困難な構文(命令文)は、例えばジャンプテーブルを用いた分岐命令である。なお、例外パターンデータベース部26への構文(命令文)の入力は手入力などで事前に行っておく。例外パターンデータベース部26は第5の記憶手段に相当する。
エントリーポイントリスト生成部16Aは、例外パターンデータベース部26に記憶されている構文(ジャンプテーブルを用いた分岐命令など)をソースコード解析時に発見すると、ロケート情報及びニーモニックを利用して、アドレスデータやリンカでの呼称の形で指定されている分岐先などを含む複雑な形式のリストを抽出し、そのままでは使用しにくいので、変形し、それらを前記第1のエントリーポイントリストに追加したエントリーポイントリストを第4のエントリーポイントリストとして出力する機能を有する。第2の実施の形態では、エントリーポイントリスト記憶部17はこの第4のエントリーポイントリストを記憶する。
事前変換部20Aは、バイナリーコード記憶部18に記憶されているバイナリーコードをパースして、可能性のある分岐先を事前変換対象エントリーポイントリストに入力しながらバイナリーコードをホストコードに変換するコード変換を行うとともに、前記バイナリーコードからだけでは追跡できなくなったら、前記第4のエントリーポイントリストを事前変換対象エントリーポイントリストへ入力し、さらにコード変換を試す機能を有する。
また、事前変換部20Aは、事前変換対象エントリーポイントリストを生成し、事前変換対象エントリーポイントリスト記憶部19に記憶させる機能を有する。事前変換対象エントリーポイントリストは、事前変換部20Aによって生成される情報であって、前記バイナリーコードを追跡することによって事前変換部20Aが生成した第2のエントリーポイントリストと、前記エントリーポイントリスト記憶部17に記憶された前記第4のエントリーポイントリストとを結合し、重複しているエントリーポイントを削除して残ったエントリーポイントのリストである。
上記以外の各部は第1の実施の形態と同様なので、これらの機能の詳細な説明は省略する。
[2.3.第2の実施の形態における動作例]
図9に示した第2の実施の形態に係るエントリーポイント抽出装置の動作例を、図10、図11を参照しながら説明する。図10は、第2の実施の形態に係るエントリーポイント抽出装置の動作例を示すフローチャートであり、図11は図10に続くフローチャートである。なお、第1の実施形態と同様の処理(ステップ)については、同一の参照符号を付す。
第2の実施の形態では、複雑な構文(命令文)を解析するための例外パターンデータベース部26を用意しておき、シンボル情報からだけでは抽出できないエントリーポイントを探索する。シンボル情報からだけでは抽出できないエントリーポイントは、関数の先頭ではなくシンボル情報ファイルにも現れないが、内部ラベルやcase文の飛び先などを先頭(エントリーポイント)とした、基本ブロックになる部分である。例外パターンデータベース部26に登録された命令文が見つかったら、当該命令文について例外パターンデータベースにあらかじめ登録されている例外パターンを参照して抽出されたエントリーポインを前述の第1のエントリーポイントリストに加えて、第4のエントリーポイントリストを生成する。このようにして生成された第4のエントリーポイントリストは第1のエントリーポイントリストに比べて、ジャンプテーブルなどの特殊な内部ラベルなどのエントリーポイントがより多く検出されている。
第2の実施の形態におけるエントリーポイントリスト生成処理は以下のとおりである。
まず、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aはソースコード記憶部10に記憶されたソースコードから一行読み出し、ソースコード解析を実行する(S1)。
なお、ステップS1に先立って、コンパイラ部11はニーモニックを生成して、これをニーモニック記憶部13に記憶させており、リンカ部12は、コンパイラ部11の出力に基づいて、シンボル情報並びにロケート情報を生成し、それぞれシンボル情報記憶部14、ロケート情報記憶部15に記憶させているものとする。なお、シンボル情報、ロケート情報については第1の実施の形態と同様である。
次に、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、読み込んだ行(命令)からプロシージャ先頭若しくはラベルを発見したか否かを判定する(S2)。
読み込んだ行からプロシージャ先頭若しくはラベルを発見しないと判定した場合(S2、No)、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは後述するステップS6に進む。
一方、読み込んだ行からプロシージャ先頭若しくはラベルを発見したと判定した場合(S2、Yes)、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16AはステップS2において発見したプロシージャ(関数)・ラベル名に対応するシンボルをシンボル情報記憶部14に記憶されたシンボル情報から抽出する(S3)。次にエントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、ロケート情報記憶部15に記憶されたロケート情報から、ステップS3で抽出したシンボルに対応するロケート情報を抽出する(S4)。次にエントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、ステップS4において抽出したロケート情報に基づいてエントリーポイント情報を生成し、エントリーポイントリスト記憶部17に記憶されているエントリーポイントリスト(第1のエントリーポイントリスト)にこのエントリーポイント情報を追加する(S5)。
次に、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、例外パターンデータベース部26から例外命令文(例外パターン)を読みだす(S11)。
次にエントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、プロシージャ(関数)内に、例外命令文があるか否かを調べる(S12)。
例外命令文がプロシージャ内に無いと判定した場合(S12,No)、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、後述するするステップS6に進む。
一方、例外命令文があると判定した場合(S12,Yes)、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、ニーモニック記憶部13に記憶されたニーモニックファイルから、その例外命令文に対応するアセンブラコードを抽出する(S13)。
次にエントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、ロケート情報記憶部15に記憶されたロケート情報を参照して、ステップS13で抽出したアセンブラコードに対応する分岐先情報を抽出する。分岐先情報には、分岐先の開始アドレスが含まれる。
次にエントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは分岐先情報を出力し、前記第1のエントリーポイントリストにこの分岐先情報を付加する(S15)。
次にエントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、ソースコード記憶部10に記憶されたソースコードから全ての行を読み込み済みか否かを判定する(S6)。
ステップS6において、ソースコード記憶部10に記憶されたソースコードの全ての行を読み込んでいないと判定した場合(S6、No)、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、ステップS1に戻り、ソースコード記憶部10に記憶されたソースコードからいまだ読み込んでいない次の行(命令文)を読み込んで、その行について構文解析を実行する(S1)。
一方、ステップS6において、ソースコード記憶部10に記憶されたソースコードの全ての行を読み込んだと判定した場合(S6、Yes)、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、バイナリーコード記憶部18に記憶されたバイナリーコードから第2のエントリーポイントリストを生成し、この第2のエントリーポイントリストとエントリーポイントリスト記憶部17に記憶された第1のエントリーポイントリストとを結合し、結合後のリストから重複するエントリーポイントを削除して、さらに別のエントリーポイントリスト(「事前変換対象エントリーポイントリスト」と呼ぶ)を生成し、この事前変換対象エントリーポイントリストを事前変換対象エントリーポイントリスト記憶部19に記憶させる(S7)。
以上で、エントリーポイントリスト生成処理は終了する。
[2.4.例外パターンについて]
バイナリー解析によるエントリーポイントリスト(第1のエントリーポイントリスト)だけでは、抽出が難しいエントリーポイントが存在する場合がある。例外パターンデータベース部26は、このような場合にも適正なエントリーポイントの抽出を行うことを可能とする。
抽出が難しいエントリーポイントは、例えば、ジャンプ先が間接アドレスでかつ、その指す先がコード実行によってはじめて定まるケースである。1例として図12にジャンプテーブルの例を示す。このジャンプテーブルの場合、分岐先を同定しようとするとき、どこまでがジャンプテーブルであるのかを決定することが難しい。なぜならINDEX値が別の基本ブロックで操作されるとき、その値の上限を追い切れないケースがあるためである。この場合、エントリーポイントの判定を次のように行う。
下記の例で、オリジナルの高位言語が次のようなジャンプテーブルで記述されているとき、コンパイラ部11やリンカ部12は、ニーモニックへ変換する。図12のジャンプテーブルから変換されたニーモニックの例を図13に示す。このとき、DO-CASE文が出現したことをソースコードの構文解析で検出することをトリガに、エントリーポイントリスト生成部16Aは、ニーモニック記憶部13に記憶されているニーモニックを参照し、label1, label2, label3がジャンプテーブルのデータであると判定する。その結果、エントリーポイントリスト生成部16Aは、これらデータlabel1, label2, label3は、エントリーポイントとなり得るものと判定し、第1のエントリーポイントリストに追加する。
ソースコードに例外パターンが含まれている場合の別の例を示す。図14は、ソースコード記憶部10に記憶されているソースコードの一部分であって、例外パターンデータベース部26に記憶されている例外パターン(命令文)の一つに合致する部分を示す図である。
図15にニーモニック記憶部13に記憶されるニーモニックの一部であって、図14に示した例外パターンに合致するソースコードの部分に対応するニーモニックの一部を示す。エントリーポイントリスト生成部16Aは、ニーモニックにおけるジャンプテーブルに対応する箇所を特定する。
図16にシンボル情報記憶部14に記憶されるシンボル情報の一部であって、図14に示した例外パターンに合致するシンボル情報の一部を示す。エントリーポイントリスト生成部16Aは、このシンボル情報を探索することにより、ジャンプテーブルのデータである「RUN1」、「RUN2」の開始アドレスを取得する。
図17に、図14、図15、図16に示すソースコード、ニーモニック、シンボル情報から生成されるエントリーポイントリストの例を示す。
このように、例外パターンデータベース部26に記憶された例外パターン(命令文)に合致する部分から、通常では抽出することが困難なデータもエントリーポイントとして抽出することが可能となる。
[3.本実施の形態の利点]
従来の仮想化エミュレーションの事前変換アルゴリズムでは、エミュレーション対象のアプリケーションコードのバイナリー解析のみによってエントリーポイントを見つけていたが、多少の漏れが発生していた。本実施の形態によれば、コンパイラやリンカーが出力したシンボル情報を利用することで、より多くのエントリーポイントを確実に抽出し、より多くの基本ブロックを抽出することが可能となる。
[4.まとめ、その他]
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
1、1A・・・エントリーポイント抽出装置; 10・・・ソースコード記憶部; 11・・・コンパイラ部; 12・・・リンカ部; 13・・・ニーモニック記憶部; 14・・・シンボル情報記憶部; 15・・・ロケート情報記憶部; 16,16A・・・エントリーポイントリスト生成部; 17・・・エントリーポイントリスト記憶部; 18・・・バイナリーコード記憶部; 19・・・事前変換対象エントリーポイントリスト記憶部; 20,20A・・・事前変換部; 21・・・前記事前変換後実行イメージ記憶部; 22・・・ローダー部; 23・・・ホストマシン部; 24・・・周辺デバイス; 25・・・システムイメージ記憶部; 26・・・例外パターンデータベース部。

Claims (2)

  1. ソースコードの行番号とアセンブラコードの対からなる情報であるニーモニックを記憶する第1の記憶手段と、
    前記ソースコード中に存在する関数、手続き名、外部公開ラベル、グローバルデータ名を抽出した情報であるシンボル情報を記憶する第2の記憶手段と、
    前記シンボル情報に含まれるシンボルがどのメモリ番地に配置されるかを示す情報であるロケート情報を記憶する第3の記憶手段と、
    前記ソースコードから生成されたバイナリーコードを記憶する第4の記憶手段と、
    前記シンボル情報について対応するロケート情報を記述した情報である第1のエントリーポイントリストを生成する生成手段と、
    前記バイナリーコードから分岐先を抽出したリストである第2のエントリーポイントリストを生成し、前記第1のエントリーポイントリストと前記第2のエントリーポイントリストとを結合し、結合後のエントリーポイントリストから重複しているエントリーポイントを削除して残ったエントリーポイントを第3のエントリーポイントリストとして記憶させ、前記第3のエントリーポイントリストを参照してソースコードの事前変換を行う変換手段と
    を有するエントリーポイント抽出装置。
  2. 前記バイナリーコードからではエントリーポイントとして抽出することが困難である命令文があらかじめ入力されている第5の記憶手段をさらに有しており、
    前記生成手段は、前記ソースコードに前記命令文が存在するか検索し、前記命令文が存在する場合、当該命令文についてあらかじめ定められているエントリーポイントを前記第1のエントリーポイントリストに加える、
    請求項1に記載のエントリーポイント抽出装置。
JP2013085429A 2013-04-16 2013-04-16 エントリーポイント抽出装置 Active JP6116983B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013085429A JP6116983B2 (ja) 2013-04-16 2013-04-16 エントリーポイント抽出装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013085429A JP6116983B2 (ja) 2013-04-16 2013-04-16 エントリーポイント抽出装置

Publications (2)

Publication Number Publication Date
JP2014206948A JP2014206948A (ja) 2014-10-30
JP6116983B2 true JP6116983B2 (ja) 2017-04-19

Family

ID=52120425

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013085429A Active JP6116983B2 (ja) 2013-04-16 2013-04-16 エントリーポイント抽出装置

Country Status (1)

Country Link
JP (1) JP6116983B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101977265B1 (ko) * 2017-11-08 2019-05-13 한양대학교 산학협력단 패킹된 실행파일의 시작지점 탐지 방법 및 장치
CN111726632B (zh) * 2019-03-18 2022-08-26 杭州海康威视数字技术股份有限公司 一种编解码方法、装置及其设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11514119A (ja) * 1996-07-09 1999-11-30 シーメンス ニクスドルフ インフオルマチオーンスジステーメ アクチエンゲゼルシヤフト 転送可能および転送不可能なプログラム部分を有するプログラムを移送するための方法
JP2000207226A (ja) * 1999-01-19 2000-07-28 Toshiba Corp コ―ド最適化装置、言語処理装置及びコ―ド最適化方法
US6817014B2 (en) * 2001-04-11 2004-11-09 Hewlett-Packard Development Company, L.P. Analysis of executable program code using compiler-generated function entry points and endpoints with other sources of function entry points and endpoints
JP2012159936A (ja) * 2011-01-31 2012-08-23 Toshiba Corp ターゲットコード事前変換方法、エミュレーション方法

Also Published As

Publication number Publication date
JP2014206948A (ja) 2014-10-30

Similar Documents

Publication Publication Date Title
Ghezzi et al. Synthesizing intensional behavior models by graph transformation
US8607208B1 (en) System and methods for object code hot updates
CN108139891B (zh) 用于生成建议以纠正未定义标记错误的方法和系统
US8850414B2 (en) Direct access of language metadata
US10248409B1 (en) Limiting the effects of source code patches on corresponding native-code patches
JP6003699B2 (ja) テストデータ生成プログラム、方法及び装置
JP5176478B2 (ja) データフロー解析装置、データフロー解析方法およびデータフロー解析プログラム
JP2013513868A (ja) グラフィカル状態遷移図モデルにおける再利用候補の正規化バージョン
CN115017516A (zh) 一种基于符号执行的模糊测试方法
EP4209895A1 (en) Code translation method and apparatus, and device
JP6116983B2 (ja) エントリーポイント抽出装置
Nacke et al. Learn LLVM 17: A beginner's guide to learning LLVM compiler tools and core libraries with C++
Schröder et al. An empirical investigation of command-line customization
US11349908B2 (en) Generating templates for deployment of system services
JP6651974B2 (ja) 情報処理装置、コンパイル方法及びコンパイラプログラム
Baars et al. Type-safe, self inspecting code
CN108369499B (zh) 一种代码虚拟化系统和方法
JP5578625B2 (ja) プログラム分析装置、プログラム分析方法、及びプログラム
WO2016189721A1 (ja) ソースコード評価装置及びソースコード評価方法及びソースコード評価プログラム
JP2007257397A (ja) 競合状態検出処理追加プログラム、競合状態検出処理追加装置、競合状態検出処理追加方法
JP6447358B2 (ja) ソースコード生成プログラム、ソースコード生成方法およびコンピュータ
JP2018147114A (ja) テストケース生成方法、計算機及びプログラム
JP5630358B2 (ja) 変換プログラム、プログラム変換方法およびプログラム変換装置
Bill et al. Virtual textual model composition for supporting versioning and aspect-orientation
Hai et al. Multi-threaded on-the-fly model generation of malware with hash compaction

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160328

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170131

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: 20170221

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170322

R151 Written notification of patent or utility model registration

Ref document number: 6116983

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151