JP6081144B2 - ソースコード解析装置 - Google Patents

ソースコード解析装置 Download PDF

Info

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
Application number
JP2012238838A
Other languages
English (en)
Other versions
JP2014089568A (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 JP2012238838A priority Critical patent/JP6081144B2/ja
Publication of JP2014089568A publication Critical patent/JP2014089568A/ja
Application granted granted Critical
Publication of JP6081144B2 publication Critical patent/JP6081144B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明の実施形態は、ソフトウェアのソースコード解析装置に関する。
膨大なソフトウェアには、ソースコード解析技術が応用される。特に、組込み機器あるいは組込みシステムの制御に用いられる組込みソフトウェアソースコードでは、ハードウェアのアクセス(以下、I/Oアクセスという。)を直接扱う。
一般に、歴史の長い組込みソフトウェアにおいては、取り扱われるハードウェアの仕様書が揃っていないケースも多い。そのため、組込みソフトウェアで取り扱われるハードウェアのアクセスと仕様を知りたいとの強いニーズがある。
しかしながら、従来、用いられているソースコード解析技術である「抽象構文木」を組込みソフトウェアに適用しても、ハードウェアアクセスは、ソフトウェア言語の概念として表わされない、という問題がある。
また、MMIO(memory mapped I/O)は、ソースコード上、通常のメモリアクセスとI/Oアクセスの区別がなく、I/Oアクセスの識別を行わないので、ハードウェアのアクセスが適切に抽出されない、という問題があった。
特開平9−218800号公報 特開2007−183950号公報 特開2007−219586号公報
本発明が解決しようとする課題は、I/Oアクセスのソースコードを発見し、それに基づき、ハードウェアのアクセス構造を抽出することのできるソースコード解析装置を提供することである。
実施形態のソースコード解析装置は、ソースコードを記録・格納する言語ソースコード保存部と、前記ソースコードの構文情報を記録・格納する構文情報保存部と、前記言語ソースコード保存部からソースコードを順次取り出して、前記構文情報を用いて言語構文解析を行って言語構文解析結果を得る言語構文解析部と、変数と定数の対応関係情報を記録・格納する対応関係情報保存部と、前記言語構文解析結果と前記対応関係情報に基づいて、変数の値の伝播関係を解析して得られた変数と定数の対応関係を生成する対応関係生成部と、前記変数と定数の対応関係に基づいて、ハードウェアのアクセス構造を表して読込み・書込み・参照の依存関係を持つHWレジスタ変数の推定を行い、前記HWレジスタ変数とソースコード間の依存関係を生成するHWレジスタ変数推定部と、前記HWレジスタ変数とソースコード間の依存関係に基づいて、HWレジスタ変数の一覧を生成する一覧生成部とを、備える。
本発明の一実施形態に係るソースコード解析装置の概略構成を示すブロック図である。 I/Oアクセスのコードポイントの抽出を説明する図である。 包含関係の処理を説明する図である。 HWレジスタ変数一覧の提示例を示す図である。 第1の実施形態に係るソースコード解析装置におけるソースコード処理の流れを示すフローチャートである。 解析するソースコードの一例を示す図である。 アクセス式内の即値アドレスに対する参照式として、ベース式及びアクセス式が求められることを示す図である。 アクセス式がI/Oアクセス式として認識されることを示す図である。 1つのHWレジスタ変数の生成を説明する図である。 HWレジスタ変数の依存関係の生成を説明する図である。 HWレジスタ変数の一覧の一例を示す図である。 図4に示すHWレジスタ変数一覧を編集した例を示す図である。 第2の実施形態に係るソースコード解析装置の概略構成を示すブロック図である。 第2の実施形態に係るソースコード解析装置におけるソースコード処理の流れを示すフローチャートである。 HWレジスタ変数の一覧表の編集を説明する図である。 編集後のHWレジスタ変数の一覧表を示す図である。
以下、本発明の一実施の形態について、図面を参照して説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
まず、本実施形態で用いる主要な用語について説明する。
「ソースコード」とは、テキストで表現されたソフトウェアプログラム表現のことである。
「ソースコード解析技術」とは、ソフトウェアのテキスト構文の分解から、構文要素に対する意味付けの解析までを行う技術である。ソースコードの構造を分析する場合に必須の技術である。情報の可視化技術とこれを合わせて、ソースコードの構造可視化が可能となる。
「組込みソフトウェア」とは、組込み機器あるいは組込みシステムの制御に用いられるソフトウェアをいう。ハードウェア制御を抽象度が低いレベル(レジスタの読み書きのレベル)で記述することが多いことに特徴がある。
「外部設定ファイル」とは、ソースコードのコンパイルに必要なソースコード以外の各種設定ファイルのことを指す。一例として、リンカスクリプトがある。リンカスクリプトは、コンパイルの最終工程のリンク処理を行うプログラムリンカの動作指示ファイルであり、その中で、ソースコードやデータのアドレスを直接指定(後述の即値アドレス)することができる場合が多い。
「アクセス式」とは、記憶領域やハードウェアレジスタ(以下、HWレジスタという)に対する読書きを表す式である。コンパイラで読み書きを意味する表現である。
「ベース式」とは、アクセス式の最外側から、配列要素アクセス・メンバアクセスを取り除いた式である。アクセス式の領域のベースを表す。
「I/Oアクセス式」とは、記憶領域のアクセス以外のアクセス式をいう。CPU( Central Processing Unit)の外部に接続されたさまざまなハードウェアの要素へのアクセスを表す。
「MMIO(memory mapped I/O)」とは、I/Oアクセスが、CPUのデータアドレスにマップされており、メモリアクセスと同じ命令語でアクセスする。RISC (Reduced Instruction Set Computer)は基本的にはこのアーキテクチャである。
「即値」とは、具体的な数値のことをいう。これがアドレスに用いられる「即値アドレス」は、具体的なアドレスが具体的な数値で表されたものである。
「HWレジスタ変数」とは、ハードウェアのアクセス構造を表す概念上の変数で、通常の変数と同様に読込み・書込み・参照の依存関係を持つ。MMIOの場合は、特殊なアドレスに対する読書きでそのアクセスが表現される。本実施形態においては、HWアクセス部を変数概念化し、HWレジスタ変数と称する。
(第1の実施形態)
本実施形態においては、C言語で記述されたソースコードを例にとって説明する。本実施形態では、(1) I/Oアクセスのコードポイントを即値アドレスに基づいて抽出し、(2) I/Oアクセスコードのベース式から、HWレジスタ変数を抽出することにより、HWレジスタ変数の推定を行うものである。
図1は、本発明の第1の実施形態に係るソースコード解析装置の概略構成を示すブロック図である。この装置は汎用のコンピュータ(例えばパーソナルコンピュータ(PC)等)と、同コンピュータ上で動作するソフトウェアとを用いて実現される。コンピュータとしては、CAD(Computer Aided Design)やCAE(Computer Aided Engineering)に好適なエンジニアリングワークステーション(EWS)等も含む。本実施形態はこのようなコンピュータに、ソフトウェアソースコード解析に係る一連の手続きを実行させるプログラムとして実施することもできる。
図1に示すように、第1の実施形態に係るソースコード解析装置100は、主として、言語ソースコード保存部11、構文情報保存部12、言語構文解析部13、対応関係情報保存部14、対応関係生成部15、HWレジスタ変数推定部16、一覧生成部17、表示部18より構成されている。
言語ソースコード保存部11は、外部記憶装置であって、C言語で記述されたソースコードを記録・格納するものである。例えば、ハードディスク装置や、半導体メモリであるフラッシュメモリを使用したソリッドステートドライブ(SSD)装置が好適である。
構文情報保存部12は、外部記憶装置であって、ソースコードの構文情報を記録・格納するものである。例えば、ハードディスク装置や、半導体メモリであるフラッシュメモリを使用したソリッドステートドライブ(SSD)装置が好適である。
言語構文解析部13は、言語ソースコード保存部11からソースコードを順次取り出して、構文情報保存部12に記録・格納されているソースコードの構文情報を用いて言語構文解析を行って言語構文解析結果を得るものである。言語構文解析結果は、対応関係生成部15に送られる。言語構文解析の詳細については、後述する。
対応関係情報保存部14は、外部記憶装置であって、変数と定数の対応関係情報を記録・格納するものである。例えば、ハードディスク装置や、半導体メモリであるフラッシュメモリを使用したソリッドステートドライブ(SSD)装置が好適である。
対応関係生成部15は、言語構文解析部13から言語構文解析結果を入力し、対応関係情報保存部14から対応関係情報を入力し、変数の値の伝播関係を解析して得られた変数と定数の対応関係を生成する。変数と定数の対応関係は、変数のアドレス、定数あるいは変数、書き換えられない変数、即値アドレスが割り当てられる変数をもとに作る。周知のプログラムスライシング技術などで、対応情報を拡大することができる。生成した対応結果は、HWレジスタ変数推定部16に送られる。
HWレジスタ変数推定部16は、対応関係生成部15から変数と定数の対応関係を入力し、HWレジスタの変数の推定を行う。推定の結果として、“HWレジスタ変数”と“ソースコード間の依存関係”を生成する。ソースコード間の依存関係には、例えばデータの代入と参照の関係を示すデータ依存関係や、プログラム式が実行されるか否かが他のプログラム式の実行結果に依存する制御依存関係がある。
生成したHWレジスタ変数とソースコード間の依存関係は、一覧生成部17に送られる。
一覧生成部17は、HWレジスタ変数とソースコード間の依存関係に基づいて、HWレジスタ変数の一覧を生成する。
表示部18は、ソースコードの解析結果として、ソースコードと変数間の依存関係をグラフ化して表示するものである。変数とそれをアクセスする部位を持った関数をノードとし、ノード間を読み・書き(の可能性)を矢印として、結んだグラフを表示する。
次に、以上のように構成されたソースコード解析装置100によるソースコード解析処理について説明する。
<言語構文解析>
一般に、ソースコード中のI/Oアクセスの判別は困難である。C言語で記述した次のプログラム式を例にとる。
*a=10;
このプログラム式は、「ポインタ変数aに割り当てられたアドレス値が指し示すメモリにデータの10が格納(代入)される」ことを意味している。このようにポインタ変数の宣言がされ、ポインタを用いてオブジェクトを間接的に参照するプログラム式の場合には、当該式が、メモリアクセスなのか或いはI/Oアクセスなのかの判別は容易にはできない。当該式の前段までのプログラム式に依存しているからである。
本実施形態における言語構文解析では、HWレジスタ変数の推定を行い、HWレジスタ変数の一覧を提示する。
<HWレジスタ変数の推定>
(1) I/Oアクセスのコードポイントを即値アドレスに基づき抽出する。
I/Oアクセスは、MMIOの場合、ソースコード上、通常のメモリアクセス(メモリに対する読み書き)と同じ記述である。そのアドレスは、即値アドレスであり、ソースコードまたは外部設定ファイルに定義が書かれているはずである。メモリアクセスコードのうち、即値アドレスに基づくアドレスのアクセスであるコードポイントを発見して抽出する。これらの処理には、即値アドレスの参照(reference)の参照やその再帰(recursion)も含む。図2は、I/Oアクセスのコードポイントの抽出を説明する図である。図2に示すように、ポインタ変数aに割り当てられたアドレス値が指し示すメモリが、実は前段のプログラム式から判断して文脈上定数であるとき、aの値は即値アドレスであり、当該プログラム式は、I/Oアクセスであると判明する。
尚、即値アドレスと認識するプログラム式をソフトウエアスライシング技術等で拡大することにより、実用性を向上させることができる。
(2) I/Oアクセスコードのベース式から、HWレジスタ変数を抽出する。
I/Oアクセスコードの、構文木を根元の方向に辿りながら、アクセスコードのベース型(構造体のメンバアクセスである場合には、構造体そのもの)を求める。ベースアドレス情報とともに、このサイズ及び構造をHWレジスタ変数の候補とする。
尚、あるHWレジスタ変数がサイズ及び構造に関して、他のHWレジスタ変数に包含関係で完全に含まれるものがある場合は、含む方だけを残し、HWレジスタ変数のアクセスコードは、上記I/Oアクセスコードであり、読み書きの判断は、メモリアクセスと同様に判断する。図3は、包含関係の処理を説明する図である。図3では、メンバ間接参照演算子->によって、ポインタ名b1という構造体のメンバ名mへの間接参照の式から、HWレジ変数候補をIOアクセス式のベース型に基づき抽出した。さらに、*b2=2;というプログラム式からb2を抽出した。HWレジスタ変数の領域は、データ型のサイズに基づくことから、包含されるものは包含するものに吸収する。図3に示す例では、HWレジスタ変数b2は、b1に含まれる。
上述した即値アドレスから推定されるアクセスは、狭い意味のI/Oアクセスに限らない。ここで、狭い意味のI/Oアクセスとは、そのアクセスで主メモリ以外のデータアクセスを表わすものとする。また、主メモリ上のアクセスの場合も、即値アドレスを用いる場合がある。例えば、CPUの割り込みベクタのアドレスは、即値アドレスで表わされる。
本実施形態では、このようなCPUアーキテクチャ等によって決められる即値アドレスも、“広義のI/Oアクセス”、“広義のHWレジスタ変数”と見なすことができる。
<HWレジスタ変数一覧の提示>
HWレジスタ変数の一覧をメモリマップとして提示する。HWレジスタ変数の推定は、ソースコードからの結果であり、実際の仕様を理解するに際し、例えば1バイトずつ提示するのは適切でない。そこで、アドレスマップの候補を提示するものである。図4は、HWレジスタ変数一覧の提示例を示す図である。図4に示す例では、ソースファイルの内容を指示された内容に従って書き換える前処理指令として、#defineなるマクロ置き換え(マクロの定義)を内容とする制御文で記述されたプログラム式が示されている。マクロ名Aは関数形式マクロ(引数付きマクロ)であって、ポインタによる参照を受ける文字型定数charの指し示す16進数の1200番地のメモリアドレスの内容に書き換えるプログラム式である。同様に、マクロ名Bは関数形式マクロ(引数付きマクロ)であって、ポインタによる参照を受ける文字型定数charの指し示す16進数の1201番地のメモリアドレスの内容に書き換えるプログラム式である。マクロ名C、マクロ名Dについても同様である。
さらに、ポインタ変数Aに割り当てられたアドレス値が指し示すメモリにデータの2が格納(代入)され、ポインタ変数Bに割り当てられたアドレス値が指し示すメモリにデータの3が格納(代入)されているプログラム式が提示されている。ポインタ変数C、ポインタ変数Dについても同様である。
図4に示すように、これらのプログラム式を受けて、抽出結果は例えば、アドレス、サイズ、ハードウェア毎にまとめられる。
図5は、第1の実施形態に係るソースコード解析装置におけるソースコード処理の流れを示すフローチャートである。
まず、ソースコード上のすべての式ノードについて、末端優先のループを特定する(ステップS51)。
例えば、図6に示すソースコードを解析する。図6では、4つのプログラム式が示されている。まず第1のプログラム式として、タグ名Aのstruct構造体型の宣言がされ、型指定子メンバが文字(char型)の定数で指定されたプログラム式が示されている。第2のプログラム式として、関数func4内に、ユーザ定義されたプログラム式が示されている。当該プログラム式は、メンバ名がタグ名Aのstruct構造体が予約語volatileによって変更を受けやすいオブジェクトであることが示され、Aはポインタ参照される。
第3のプログラム式として、関数func2内に、ユーザ定義されたプログラム式が示されている。当該プログラム式は、メンバ名が、ポインタ参照される文字定数の指し示すメモリを参照して得られた値を整数(int型)の定数vに代入するものであることを示している。
第4のプログラム式として、関数func1内に、ユーザ定義されたプログラム式が示されている。当該プログラム式は、1をポインタvolatile char*が指示するメモリへ参照することを示している。ここでは、ポインタを用いてオブジェクトを間接的に参照している。
次に、対象となるアクセス式のベース式を求める(ステップS52)。アクセス式のベース式の求め方は、下記のようなルールの再帰適用で抽象構文木構造の探索を実行する。
A.m → A
A->m → *A
A[x] → *A (xは定数以外)
*(A + x) → *A (Aはポインタ型、xは定数以外)
*(A - x) → *A (Aはポインタ型、xは定数以外)
例えば、探索例は次のようになる。
A[x].m[y] → A[x].m → A[x] → *A
(B+x)->c[y] → (B+x)->c → *(B+x) → *B
図7は、アクセス式内の即値アドレスに対する参照式として、ベース式及びアクセス式が求められることを示す図である。図7に示す各プログラム式において、ベース式は矩形で囲まれ、アクセス式が楕円で囲まれている。第3のプログラム式及び第4のプログラム式では、アクセス式とベース式が同じ領域となっているが、第2のプログラム式では、アクセス式の最外側から、メンバ参照演算子->と構造体メンバmを取り除いた式がベース式となっていることがわかる。
図8は、ベースアクセス式がI/Oアクセスであることから、アクセス式がI/Oアクセス式として認識されることを示す図である。第2、第3、第4の各プログラム式において、楕円で囲まれているアクセス式が、I/Oアクセス式である。
次に、求めたベース式が、アドレス参照式であり、そのアドレス参照式が“即値アドレス”であるかを判定する(ステップS53)。
ステップS53でNoであれば、ベース式がHWレジスタ変数の整数加減式であるかを判定する(ステップS54)。
ステップS53でYesあるいはステップS54でYesであれば、当該ベース式をHWレジスタ変数の候補とする(ステップS55)。尚、ステップS54でNoであれば、ステップS51に戻る。
次いで、既存のHWレジスタ変数に包含されるかを判定する(ステップS56)。図9は、1つのHWレジスタ変数の生成を説明する図である。図9に示すように、生成されたHWレジスタ変数は、開始アドレスが16進数で“10”、第1のプログラム式からHWレジスタ変数のサイズがデータ型のサイズである“16”となる。また、第3、第4のプログラム式のベース式は、サイズ的に、第2のプログラム式のベース式に包含されることがわかる。
ステップS56でNoであれば、候補を正式とし、それと依存関係を追加する(ステップS57)。
ステップS56でYesであれば、候補を包含先の一部として、依存関係を追加する(ステップS58)。図10は、HWレジスタ変数の依存関係の生成を説明する図である。図10に示すように、第2のプログラム式のアクセス式は、書込み処理においてHWレジスタ変数を参照し、第3のプログラム式のアクセス式は、読込み処理においてHWレジスタ変数を参照し、第4のプログラム式のアクセス式は、書込み処理においてHWレジスタ変数を参照していることがわかる。
以上のステップS51からステップS58までを繰り返し実行する。すなわち、ステップS59でループの終了を判定し、ループが終了でなければステップS59を経てS51に移行する。この繰り返しにより、HWレジスタ変数の一覧が生成される。図11は、HWレジスタ変数の一覧の一例を示す図である。図11に示すように、一覧表はベースアドレス式毎にまとめられる。
第1の実施形態によれば、膨大なソースコードから、使用されているHWアクセス関連のアドレスマップが、HWレジスタ変数の一覧として得ることができる。
(第2の実施形態)
次に、第2の実施形態について説明する。HWレジスタ変数の一覧が、例えば1バイトずつの表形式で生成された場合には、ハードウェアの仕様が却って理解しにくい。そこで、第2の実施形態は、第1の実施形態で生成したHWレジスタ変数一覧をユーザが編集可能とするものである。図12は、図4に示すHWレジスタ変数一覧を編集した例を示す図である。
図13は、第2の実施形態に係るソースコード解析装置の概略構成を示すブロック図である。図13に示すように、第2の実施形態に係るソースコード解析装置200では、第1の実施形態の構成に加えて、HWレジスタ変数編集部19、ユーザI/F20、合併情報保存部21を有している。
HWレジスタ変数編集部19は、マップとして表示されたHWレジスタ変数の一覧に対して、編集機能を付与するものである。
ユーザI/F20は、HWレジスタ変数の一覧を編集するための情報を入力可能とするものである。ユーザは、例えば、HW仕様書等を参照して、編集情報を入力する。
合併情報保存部21は、HWレジスタ変数をまとめる際の合併情報を保存するものである。
図14は、第2の実施形態に係るソースコード解析装置におけるソースコード処理の流れを示すフローチャートである。図14に示すフローチャートでは、図5に示すフローチャートで生成したHWレジスタ変数一覧をユーザが編集する流れを示している。
まず、HWレジスタ変数の一覧を表示する(ステップS141)。例えば、図11に示す一覧である。
次いで、一覧を補正するか否かのユーザ指令を受け付ける(ステップS142)。
ユーザ指令が一覧を補正する(ステップS142でYes)場合には、ユーザI/F20を介して受け付けたコマンドまたはGUIによるHWレジスタ変数の合併情報を作成する(ステップS143)。
次いで、合併情報保存部21からの合併情報に基づき、HWレジスタ変数と依存関係を修正する(ステップS144)。図15は、HWレジスタ変数の一覧表の編集を説明する図である。例えば、図11に示す一覧表に接したユーザは、図15に示すように4行を選択して、1つに結合を指示したとする。図16は、編集後のHWレジスタ変数の一覧表を示す図である。図16に示すように、図15に示した4行がユーザが名付けた新たな識別子を付されて1行にまとまられているが、ソースコードに対する依存関係は承継されている。必要に応じて、ステップS141からステップS144までは、繰り返される。
第2の実施形態によれば、推定して得られたHWレジスタ変数をユーザが編集することができるので、よりハードウェアの仕様に則した解析を行うことができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
100,200・・・ソースコード解析装置
11・・・言語ソースコード保存部
12・・・構文情報保存部
13・・・言語構文解析部
14・・・対応関係情報保存部
15・・・対応関係生成部
16・・・HWレジスタ変数推定部
17・・・一覧生成部
18・・・表示部
19・・・HWレジスタ変数編集部
20・・・ユーザI/F
21・・・合併情報保存部

Claims (12)

  1. ソースコードを記録・格納する言語ソースコード保存部と、
    前記ソースコードの構文情報を記録・格納する構文情報保存部と、
    前記言語ソースコード保存部からソースコードを順次取り出して、前記構文情報を用いて言語構文解析を行って言語構文解析結果を得る言語構文解析部と、
    変数と定数の対応関係情報を記録・格納する対応関係情報保存部と、
    前記言語構文解析結果と前記対応関係情報に基づいて、変数の値の伝播関係を解析して得られた変数と定数の対応関係を生成する対応関係生成部と、
    前記変数と定数の対応関係に基づいて、ハードウェアのアクセス構造を表して読込み・書込み・参照の依存関係を持つHWレジスタ変数の推定を行い、前記HWレジスタ変数とソースコード間の依存関係を生成するHWレジスタ変数推定部と、
    前記HWレジスタ変数とソースコード間の依存関係に基づいて、HWレジスタ変数の一覧を生成する一覧生成部とを、
    備えるソースコード解析装置。
  2. 前記ソースコードと変数間の依存関係をグラフ化して表示する表示部を備える請求項1記載のソースコード解析装置。
  3. 前記HWレジスタ変数の推定は、記憶領域のアクセス以外のI/Oアクセスのコードポイントを即値アドレスに基づき抽出する請求項1記載のソースコード解析装置。
  4. 前記即値アドレスに基づく抽出は、メモリアクセスコードのうち、即値アドレスに基づくアドレスのアクセスであるコードを抽出するもので、即値アドレスの参照の参照やその再帰も含む請求項3記載のソースコード解析装置。
  5. 前記HWレジスタ変数の推定は、I/Oアクセスコードの、アクセス式の最外側から、配列要素アクセスやメンバアクセスを取り除いたベース式から、前記HWレジスタ変数を抽出する請求項1記載のソースコード解析装置。
  6. 前記ベース式に基づく抽出は、前記I/O アクセスコードの、構文木を根元の方向に辿りながら、アクセスコードのベース型を求め、ベースアドレス情報とともに、このサイズ及び構造を前記HWレジスタ変数の候補とする請求項5記載のソースコード解析装置。
  7. 前記対応関係生成部における前記変数と定数の対応関係は、変数のアドレス、定数あるいは変数、書き換えられない変数、即値アドレスが割り当てられる変数をもとに作成する請求項1乃至請求項6のいずれか1項に記載のソースコード解析装置。
  8. 抽出された前記HWレジスタ変数が、既に抽出済みの前記HWレジスタ変数のサイズ及び構造において包含される場合には、包含する方の前記HWレジスタ変数にまとめる請求項1乃至請求項7のいずれか1項に記載のソースコード解析装置。
  9. 前記グラフは、変数とそれをアクセスする部位を持った関数をノードとし、ノード間を読み・書きを矢印として結んだグラフである請求項2に記載のソースコード解析装置。
  10. さらに、
    マップとして表示されたHWレジスタ変数の一覧に対して、編集機能を付与するHWレジスタ変数編集部と、
    HWレジスタ変数の一覧を編集するための情報を入力可能とするユーザI/Fと、
    HWレジスタ変数をまとめる際の合併情報を保存するHWレジスタ変数合併情報保存部を備える、請求項1乃至請求項9のいずれか1項に記載のソースコード解析装置。
  11. 前記編集情報は、ハードウェアの仕様書を参照したものである請求項10記載のソースコード解析装置。
  12. 前記ソースコードはC言語で記述されたものである請求項1乃至請求項11のいずれか1項に記載のソースコード解析装置。
JP2012238838A 2012-10-30 2012-10-30 ソースコード解析装置 Active JP6081144B2 (ja)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016088271A1 (ja) 2014-12-05 2016-06-09 株式会社日立製作所 プログラム依存部可視化装置、方法、およびプログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
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 定数アドレス領域を指示するポインタ解析方法

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