JP6116983B2 - エントリーポイント抽出装置 - Google Patents
エントリーポイント抽出装置 Download PDFInfo
- 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
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Description
第2の記憶手段は、ソースコード中に存在する関数、手続き名、外部公開ラベル、グローバルデータ名を抽出した情報であるシンボル情報を記憶する。
第3の記憶手段は、シンボル情報に含まれるシンボルがどのメモリ番地に配置されるかを示す情報であるロケート情報を記憶する。
生成手段は、シンボル情報について対応するロケート情報を記述した情報である第1のエントリーポイントリストを生成する。
本明細書で使用する用語の定義を述べる。
(1)シンボル(シンボル情報)
「シンボル」とは、デバッガが利用する変数名、関数名などの名前をいう。
「事前変換」とは、ソフトウェアをエミュレータにより安定的に実行するために、エミュレーション対象コードを事前に解析して基本ブロック単位にまとめたコードを作成することをいう。「事前変換」によって、エミュレーション中にコード変換を行わないようにすることで安定的な実行が可能となる。
「基本ブロック」とは、プログラム実行コード中で、内部に分岐を持たず、CPUの状態フラグも変更しない命令セット群を取り出したものをいう。コンパイラの制御フローグラフに用いる「基本ブロック」よりは広い概念であり、他の基本ブロックからの分岐先が当該ブロック内にあっても「基本ブロック」である。
「エントリーポイント」とは、プログラムが開始される場所をいい、モジュールの最初、関数の先頭、ラベル、場合分けのcase文のはじめもエントリーポイントになり得る。
本発明の第1の実施の形態について説明する。
[1.1.装置構成例]
第1の実施の形態に係るエントリーポイント抽出装置の構成例を図1に示す。
エントリーポイント抽出装置1は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読み出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
ソースコード記憶部10は、事前変換の対象となるプログラムのソースコードを記憶する機能を有する。
コンパイラ部11は、プログラミング言語で書かれた、プログラムのソースコード(原始コード)を、機械語、バイトコードなどの中間言語によるオブジェクトコード(目的コード)に変換する機能を有する。また、コンパイラ部11は、前記ソースコードから後述するニーモニックを生成し、出力する機能を有する。
シンボル情報記憶部14は、ソースコード中に存在する関数、手続き名・外部公開ラベル・グローバルデータ名を抽出した情報であるシンボル情報を記憶する機能を有する。
バイナリーコード記憶部18は、リンカ部12によってソースコードから生成されたバイナリーコードを記憶する機能を有する。
エントリーポイントリスト記憶部17は、エントリーポイントリスト生成部16によって生成されたエントリーポイントリストを記憶する機能を有する。
図1に示したエントリーポイント抽出装置の動作例を、図2を参照しながら説明する。図2は、エントリーポイント抽出装置の動作例を示すフローチャートである。
まず、エントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16はソースコード記憶部10に記憶されたソースコードから一行読み出し、ソースコード解析を実行する(S1)。
しかし、この中間データには内部ラベル(jmp先の細かいラベル)は含まれないので、エントリーポイントリスト生成部16は、内部ラベル(jmp先の細かいラベル)をソースコードから検出して中間データに付加し、エントリーポイントリストとして出力する。なお、内部ラベルについても開始アドレスを記述する。図5に、図4に示した中間データに内部ラベルを付加することによって生成されたエントリーポイントリストの例を示す。図5に示した例では、ラベル名が「label1」「label2」である行が内部ラベルとして検出され追加されたデータである。なお、図3から図5ではシンボル属性を含むデータ例を示したが、シンボル情報が無くとも本実施の形態は成立する。
図2に戻りエントリーポイントリスト生成処理の説明を再開する。次に、エントリーポイント抽出装置1、より詳しくはエントリーポイントリスト生成部16は、読み込んだ行(命令)からプロシージャ先頭若しくはラベルを発見したか否かを判定する(S2)。
以上で、エントリーポイントリスト生成処理が終了する。
図8は、図7に示したシンボル情報及びロケート情報に対応する、エントリーポイントリストの例である。この例では、エントリーポイントとなる関数名「PROC1」と、内部ラベル「L1」及び「L2」の開始アドレスのみ含まれている。事前変換部20は、エントリーポイントリストに含まれる開始アドレスに基づいて基本ブロックの開始位置を取得し、基本ブロックのホストコードへの変換を行っていく。
本発明の第2の実施の形態について説明する。第2の実施の形態に係るエントリーポイントリスト抽出装置は、基本的構成は前述の第1の実施の形態に係るエントリーポイントリスト抽出装置と同様であるが、ジャンプテーブルを用いた分岐命令などの複雑な形式のものをソースコード解析時に発見すると、ロケート情報及びニーモニックを利用して、それらをエントリーポイントリストに加えるための例外データベースをさらに有している点で相違している。
第2の実施の形態に係るエントリーポイントリスト抽出装置の構成について説明する。図9は、第2の実施の形態に係るエントリーポイントリスト抽出装置の構成例を示すブロック図である。なお、第1の実施の形態に係るエントリーポイントリスト抽出装置と同様の構成要素については、同一の参照符号を付しそれらの詳細な説明は省略する。
例外パターンデータベース部26は、バイナリーコードからではエントリーポイントとして抽出することが困難な構文(命令文)を記憶する機能を有する。抽出することが困難な構文(命令文)は、例えばジャンプテーブルを用いた分岐命令である。なお、例外パターンデータベース部26への構文(命令文)の入力は手入力などで事前に行っておく。例外パターンデータベース部26は第5の記憶手段に相当する。
また、事前変換部20Aは、事前変換対象エントリーポイントリストを生成し、事前変換対象エントリーポイントリスト記憶部19に記憶させる機能を有する。事前変換対象エントリーポイントリストは、事前変換部20Aによって生成される情報であって、前記バイナリーコードを追跡することによって事前変換部20Aが生成した第2のエントリーポイントリストと、前記エントリーポイントリスト記憶部17に記憶された前記第4のエントリーポイントリストとを結合し、重複しているエントリーポイントを削除して残ったエントリーポイントのリストである。
上記以外の各部は第1の実施の形態と同様なので、これらの機能の詳細な説明は省略する。
図9に示した第2の実施の形態に係るエントリーポイント抽出装置の動作例を、図10、図11を参照しながら説明する。図10は、第2の実施の形態に係るエントリーポイント抽出装置の動作例を示すフローチャートであり、図11は図10に続くフローチャートである。なお、第1の実施形態と同様の処理(ステップ)については、同一の参照符号を付す。
まず、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aはソースコード記憶部10に記憶されたソースコードから一行読み出し、ソースコード解析を実行する(S1)。
例外命令文がプロシージャ内に無いと判定した場合(S12,No)、エントリーポイント抽出装置1A、より詳しくはエントリーポイントリスト生成部16Aは、後述するするステップS6に進む。
以上で、エントリーポイントリスト生成処理は終了する。
バイナリー解析によるエントリーポイントリスト(第1のエントリーポイントリスト)だけでは、抽出が難しいエントリーポイントが存在する場合がある。例外パターンデータベース部26は、このような場合にも適正なエントリーポイントの抽出を行うことを可能とする。
このように、例外パターンデータベース部26に記憶された例外パターン(命令文)に合致する部分から、通常では抽出することが困難なデータもエントリーポイントとして抽出することが可能となる。
従来の仮想化エミュレーションの事前変換アルゴリズムでは、エミュレーション対象のアプリケーションコードのバイナリー解析のみによってエントリーポイントを見つけていたが、多少の漏れが発生していた。本実施の形態によれば、コンパイラやリンカーが出力したシンボル情報を利用することで、より多くのエントリーポイントを確実に抽出し、より多くの基本ブロックを抽出することが可能となる。
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
Claims (2)
- ソースコードの行番号とアセンブラコードの対からなる情報であるニーモニックを記憶する第1の記憶手段と、
前記ソースコード中に存在する関数、手続き名、外部公開ラベル、グローバルデータ名を抽出した情報であるシンボル情報を記憶する第2の記憶手段と、
前記シンボル情報に含まれるシンボルがどのメモリ番地に配置されるかを示す情報であるロケート情報を記憶する第3の記憶手段と、
前記ソースコードから生成されたバイナリーコードを記憶する第4の記憶手段と、
前記シンボル情報について対応するロケート情報を記述した情報である第1のエントリーポイントリストを生成する生成手段と、
前記バイナリーコードから分岐先を抽出したリストである第2のエントリーポイントリストを生成し、前記第1のエントリーポイントリストと前記第2のエントリーポイントリストとを結合し、結合後のエントリーポイントリストから重複しているエントリーポイントを削除して残ったエントリーポイントを第3のエントリーポイントリストとして記憶させ、前記第3のエントリーポイントリストを参照してソースコードの事前変換を行う変換手段と
を有するエントリーポイント抽出装置。 - 前記バイナリーコードからではエントリーポイントとして抽出することが困難である命令文があらかじめ入力されている第5の記憶手段をさらに有しており、
前記生成手段は、前記ソースコードに前記命令文が存在するか検索し、前記命令文が存在する場合、当該命令文についてあらかじめ定められているエントリーポイントを前記第1のエントリーポイントリストに加える、
請求項1に記載のエントリーポイント抽出装置。
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)
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)
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 | ターゲットコード事前変換方法、エミュレーション方法 |
-
2013
- 2013-04-16 JP JP2013085429A patent/JP6116983B2/ja active Active
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 |