JP6081144B2 - ソースコード解析装置 - Google Patents
ソースコード解析装置 Download PDFInfo
- Publication number
- JP6081144B2 JP6081144B2 JP2012238838A JP2012238838A JP6081144B2 JP 6081144 B2 JP6081144 B2 JP 6081144B2 JP 2012238838 A JP2012238838 A JP 2012238838A JP 2012238838 A JP2012238838 A JP 2012238838A JP 6081144 B2 JP6081144 B2 JP 6081144B2
- Authority
- JP
- Japan
- Prior art keywords
- source code
- variable
- register
- access
- variables
- 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
- Stored Programmes (AREA)
Description
一般に、歴史の長い組込みソフトウェアにおいては、取り扱われるハードウェアの仕様書が揃っていないケースも多い。そのため、組込みソフトウェアで取り扱われるハードウェアのアクセスと仕様を知りたいとの強いニーズがある。
本実施形態においては、C言語で記述されたソースコードを例にとって説明する。本実施形態では、(1) I/Oアクセスのコードポイントを即値アドレスに基づいて抽出し、(2) I/Oアクセスコードのベース式から、HWレジスタ変数を抽出することにより、HWレジスタ変数の推定を行うものである。
一般に、ソースコード中のI/Oアクセスの判別は困難である。C言語で記述した次のプログラム式を例にとる。
このプログラム式は、「ポインタ変数aに割り当てられたアドレス値が指し示すメモリにデータの10が格納(代入)される」ことを意味している。このようにポインタ変数の宣言がされ、ポインタを用いてオブジェクトを間接的に参照するプログラム式の場合には、当該式が、メモリアクセスなのか或いはI/Oアクセスなのかの判別は容易にはできない。当該式の前段までのプログラム式に依存しているからである。
(1) I/Oアクセスのコードポイントを即値アドレスに基づき抽出する。
I/Oアクセスは、MMIOの場合、ソースコード上、通常のメモリアクセス(メモリに対する読み書き)と同じ記述である。そのアドレスは、即値アドレスであり、ソースコードまたは外部設定ファイルに定義が書かれているはずである。メモリアクセスコードのうち、即値アドレスに基づくアドレスのアクセスであるコードポイントを発見して抽出する。これらの処理には、即値アドレスの参照(reference)の参照やその再帰(recursion)も含む。図2は、I/Oアクセスのコードポイントの抽出を説明する図である。図2に示すように、ポインタ変数aに割り当てられたアドレス値が指し示すメモリが、実は前段のプログラム式から判断して文脈上定数であるとき、aの値は即値アドレスであり、当該プログラム式は、I/Oアクセスであると判明する。
I/Oアクセスコードの、構文木を根元の方向に辿りながら、アクセスコードのベース型(構造体のメンバアクセスである場合には、構造体そのもの)を求める。ベースアドレス情報とともに、このサイズ及び構造をHWレジスタ変数の候補とする。
HWレジスタ変数の一覧をメモリマップとして提示する。HWレジスタ変数の推定は、ソースコードからの結果であり、実際の仕様を理解するに際し、例えば1バイトずつ提示するのは適切でない。そこで、アドレスマップの候補を提示するものである。図4は、HWレジスタ変数一覧の提示例を示す図である。図4に示す例では、ソースファイルの内容を指示された内容に従って書き換える前処理指令として、#defineなるマクロ置き換え(マクロの定義)を内容とする制御文で記述されたプログラム式が示されている。マクロ名Aは関数形式マクロ(引数付きマクロ)であって、ポインタによる参照を受ける文字型定数charの指し示す16進数の1200番地のメモリアドレスの内容に書き換えるプログラム式である。同様に、マクロ名Bは関数形式マクロ(引数付きマクロ)であって、ポインタによる参照を受ける文字型定数charの指し示す16進数の1201番地のメモリアドレスの内容に書き換えるプログラム式である。マクロ名C、マクロ名Dについても同様である。
A->m → *A
A[x] → *A (xは定数以外)
*(A + x) → *A (Aはポインタ型、xは定数以外)
*(A - x) → *A (Aはポインタ型、xは定数以外)
例えば、探索例は次のようになる。
(B+x)->c[y] → (B+x)->c → *(B+x) → *B
図7は、アクセス式内の即値アドレスに対する参照式として、ベース式及びアクセス式が求められることを示す図である。図7に示す各プログラム式において、ベース式は矩形で囲まれ、アクセス式が楕円で囲まれている。第3のプログラム式及び第4のプログラム式では、アクセス式とベース式が同じ領域となっているが、第2のプログラム式では、アクセス式の最外側から、メンバ参照演算子->と構造体メンバmを取り除いた式がベース式となっていることがわかる。
次に、第2の実施形態について説明する。HWレジスタ変数の一覧が、例えば1バイトずつの表形式で生成された場合には、ハードウェアの仕様が却って理解しにくい。そこで、第2の実施形態は、第1の実施形態で生成したHWレジスタ変数一覧をユーザが編集可能とするものである。図12は、図4に示すHWレジスタ変数一覧を編集した例を示す図である。
11・・・言語ソースコード保存部
12・・・構文情報保存部
13・・・言語構文解析部
14・・・対応関係情報保存部
15・・・対応関係生成部
16・・・HWレジスタ変数推定部
17・・・一覧生成部
18・・・表示部
19・・・HWレジスタ変数編集部
20・・・ユーザI/F
21・・・合併情報保存部
Claims (12)
- ソースコードを記録・格納する言語ソースコード保存部と、
前記ソースコードの構文情報を記録・格納する構文情報保存部と、
前記言語ソースコード保存部からソースコードを順次取り出して、前記構文情報を用いて言語構文解析を行って言語構文解析結果を得る言語構文解析部と、
変数と定数の対応関係情報を記録・格納する対応関係情報保存部と、
前記言語構文解析結果と前記対応関係情報に基づいて、変数の値の伝播関係を解析して得られた変数と定数の対応関係を生成する対応関係生成部と、
前記変数と定数の対応関係に基づいて、ハードウェアのアクセス構造を表して読込み・書込み・参照の依存関係を持つHWレジスタ変数の推定を行い、前記HWレジスタ変数とソースコード間の依存関係を生成するHWレジスタ変数推定部と、
前記HWレジスタ変数とソースコード間の依存関係に基づいて、HWレジスタ変数の一覧を生成する一覧生成部とを、
備えるソースコード解析装置。 - 前記ソースコードと変数間の依存関係をグラフ化して表示する表示部を備える請求項1記載のソースコード解析装置。
- 前記HWレジスタ変数の推定は、記憶領域のアクセス以外のI/Oアクセスのコードポイントを即値アドレスに基づき抽出する請求項1記載のソースコード解析装置。
- 前記即値アドレスに基づく抽出は、メモリアクセスコードのうち、即値アドレスに基づくアドレスのアクセスであるコードを抽出するもので、即値アドレスの参照の参照やその再帰も含む請求項3記載のソースコード解析装置。
- 前記HWレジスタ変数の推定は、I/Oアクセスコードの、アクセス式の最外側から、配列要素アクセスやメンバアクセスを取り除いたベース式から、前記HWレジスタ変数を抽出する請求項1記載のソースコード解析装置。
- 前記ベース式に基づく抽出は、前記I/O アクセスコードの、構文木を根元の方向に辿りながら、アクセスコードのベース型を求め、ベースアドレス情報とともに、このサイズ及び構造を前記HWレジスタ変数の候補とする請求項5記載のソースコード解析装置。
- 前記対応関係生成部における前記変数と定数の対応関係は、変数のアドレス、定数あるいは変数、書き換えられない変数、即値アドレスが割り当てられる変数をもとに作成する請求項1乃至請求項6のいずれか1項に記載のソースコード解析装置。
- 抽出された前記HWレジスタ変数が、既に抽出済みの前記HWレジスタ変数のサイズ及び構造において包含される場合には、包含する方の前記HWレジスタ変数にまとめる請求項1乃至請求項7のいずれか1項に記載のソースコード解析装置。
- 前記グラフは、変数とそれをアクセスする部位を持った関数をノードとし、ノード間を読み・書きを矢印として結んだグラフである請求項2に記載のソースコード解析装置。
- さらに、
マップとして表示されたHWレジスタ変数の一覧に対して、編集機能を付与するHWレジスタ変数編集部と、
HWレジスタ変数の一覧を編集するための情報を入力可能とするユーザI/Fと、
HWレジスタ変数をまとめる際の合併情報を保存するHWレジスタ変数合併情報保存部を備える、請求項1乃至請求項9のいずれか1項に記載のソースコード解析装置。 - 前記編集情報は、ハードウェアの仕様書を参照したものである請求項10記載のソースコード解析装置。
- 前記ソースコードはC言語で記述されたものである請求項1乃至請求項11のいずれか1項に記載のソースコード解析装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012238838A JP6081144B2 (ja) | 2012-10-30 | 2012-10-30 | ソースコード解析装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012238838A JP6081144B2 (ja) | 2012-10-30 | 2012-10-30 | ソースコード解析装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014089568A JP2014089568A (ja) | 2014-05-15 |
JP6081144B2 true JP6081144B2 (ja) | 2017-02-15 |
Family
ID=50791433
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012238838A Active JP6081144B2 (ja) | 2012-10-30 | 2012-10-30 | ソースコード解析装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6081144B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016088271A1 (ja) | 2014-12-05 | 2016-06-09 | 株式会社日立製作所 | プログラム依存部可視化装置、方法、およびプログラム |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3305949B2 (ja) * | 1996-02-08 | 2002-07-24 | 富士通株式会社 | プログラム解析装置 |
JP3881103B2 (ja) * | 1998-01-14 | 2007-02-14 | 富士通株式会社 | 変数分類装置およびそのプログラムを格納した記憶媒体 |
JP2004139369A (ja) * | 2002-10-18 | 2004-05-13 | Renesas Technology Corp | 定数アドレス領域を指示するポインタ解析方法 |
-
2012
- 2012-10-30 JP JP2012238838A patent/JP6081144B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2014089568A (ja) | 2014-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4148527B2 (ja) | 機能テスト・スクリプト生成装置 | |
US8732669B2 (en) | Efficient model checking technique for finding software defects | |
US20060143596A1 (en) | Program analyzing apparatus and testing apparatus, and analyzing method and program therefor | |
JP2007528059A (ja) | ソフトウェアのモデル化、抽象、および分析のためのシステムと方法 | |
US20110145799A1 (en) | Path-sensitive dataflow analysis including path refinement | |
Angerer et al. | Configuration-aware change impact analysis (t) | |
JP5450840B2 (ja) | プログラムの実行性能評価のためのテストデータ生成方法 | |
Angerer et al. | Change impact analysis for maintenance and evolution of variable software systems | |
US8898649B2 (en) | Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program | |
US9524366B1 (en) | Annotations to identify objects in design generated by high level synthesis (HLS) | |
JP5900193B2 (ja) | 更新判定プログラムおよび更新判定装置 | |
JP2008276735A (ja) | プログラムコード変換装置及びプログラムコード変換方法 | |
JP6081144B2 (ja) | ソースコード解析装置 | |
JP6878707B2 (ja) | 試験装置、試験方法および試験プログラム | |
Wang et al. | Fast reproducing web application errors | |
Letychevskyi et al. | Fuzz Testing Technique and its Use in Cybersecurity Tasks | |
JP7380851B2 (ja) | テストスクリプト生成装置、テストスクリプト生成方法及びプログラム | |
JP5891976B2 (ja) | コンパイル実行・管理方法、装置、及びプログラム | |
JP5578625B2 (ja) | プログラム分析装置、プログラム分析方法、及びプログラム | |
WO2024232193A1 (ja) | 情報処理装置及び情報処理方法、並びにコンピュータプログラム | |
US20150082443A1 (en) | System to automate compliance with licenses of software third-party content | |
JP2022157976A (ja) | 分析プログラム、分析装置、分析方法 | |
JP2014099108A (ja) | 実行時間算出装置、実行時間算出方法、およびプログラム | |
JPH10293683A (ja) | プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体 | |
JP5682109B2 (ja) | カバレッジ情報生成プログラム、カバレッジ情報生成装置およびカバレッジ情報生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20151016 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160720 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160726 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160829 |
|
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: 20161220 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170118 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 6081144 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |