JP7068752B2 - ソースコード解析装置およびソースコード解析プログラム - Google Patents

ソースコード解析装置およびソースコード解析プログラム Download PDF

Info

Publication number
JP7068752B2
JP7068752B2 JP2018053902A JP2018053902A JP7068752B2 JP 7068752 B2 JP7068752 B2 JP 7068752B2 JP 2018053902 A JP2018053902 A JP 2018053902A JP 2018053902 A JP2018053902 A JP 2018053902A JP 7068752 B2 JP7068752 B2 JP 7068752B2
Authority
JP
Japan
Prior art keywords
source code
functions
function
analysis
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.)
Active
Application number
JP2018053902A
Other languages
English (en)
Other versions
JP2019168753A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2018053902A priority Critical patent/JP7068752B2/ja
Publication of JP2019168753A publication Critical patent/JP2019168753A/ja
Application granted granted Critical
Publication of JP7068752B2 publication Critical patent/JP7068752B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Description

本発明は、ソースコードを解析する技術に関するものである。
特許文献1は、次のような変更影響分析技術を開示している。
指定されたソースコードをもとに、プログラム要素間の依存関係が分析される。そして、依存強度が表の交点に示される。これにより、ソースコードの変更における影響範囲が特定される。
特許文献2は、次のようなソフトウェア分析技術を開示している。
ソフトウェアの静的解析結果としてソフトウェアの問題点が出力される。そして、問題点の発生箇所を知らせる警告が表示される。また、ソフトウェアの品質の尺度となるメトリックスが分析される。そして、メトリックスが表示される。これにより、的確な問題点の指摘および効率的な問題点の把握が可能となる。
国際公開2017/141893号公報 特許第4920441号公報
上記の通り、特許文献1には、ソフトウェアに関して、修正すべき依存関係を特定する変更影響範囲を分析する技術が記載されている。また、特許文献2には、ソフトウェアに関して、静的解析により、修正を要する箇所の警告を出力する技術が記載されている。
しかし、ソフトウェアが巨大化または複雑化すると、修正を要する箇所の警告が多数出る可能性がある。例えば、実際には呼び出されないデッドコード等も含めて、数千の警告が出る可能性がある。この場合、限られた時間で、ソフトウェア設計者がすべての箇所を修正することは困難である。
本発明は、対象システムのソースコードから注目すべき関数を絞り込むことができるようにすることを目的とする。
本発明のソースコード解析装置は、
第1ソースコードに含まれる1つ以上の変数のうち第2ソースコードに含まれる関数からアクセスされる変数である注目変数にアクセスする1つ以上のアクセス関数を前記第1ソースコードから見つける第1解析部と、
脆弱条件を満たす1つ以上の脆弱関数を前記第1ソースコードから見つける第2解析部と、
前記1つ以上の脆弱関数から前記1つ以上のアクセス関数に含まれる脆弱関数を注目関数として選択する絞り込み部とを備える。
本発明によれば、対象システムのソースコード(第1ソースコード)から注目すべき関数を絞り込むことができる。
例えば、ソフトウェアの修正箇所を効率よく絞り込むことが可能となる。
実施の形態1におけるソースコード解析装置100の構成図。 実施の形態1におけるソースコード解析方法のフローチャート。 実施の形態1における受付処理(S110)のフローチャート。 実施の形態1における第1解析処理(S120)のフローチャート。 実施の形態1における第2解析処理(S130)のフローチャート。 実施の形態1における第3解析処理(S140)のフローチャート。 実施の形態1における絞り込み処理(S150)のフローチャート。 実施の形態1における順位付け処理(S160)のフローチャート。 実施の形態1における表示処理(S170)のフローチャート。 実施の形態1におけるソースコード解析方法の具体例を示す図。 実施の形態2におけるソースコード解析方法のフローチャート。 実施の形態2における第3解析処理(S240)のフローチャート。 実施の形態2におけるソースコード解析方法の具体例を示す。
実施の形態および図面において、同じ要素および対応する要素には同じ符号を付している。同じ符号が付された要素の説明は適宜に省略または簡略化する。図中の矢印はデータの流れ又は処理の流れを主に示している。
実施の形態1.
ソースコードの中の注目すべき関数を絞り込む形態について、図1から図10に基づいて説明する。
***構成の説明***
図1に基づいて、ソースコード解析装置100の構成を説明する。
ソースコード解析装置100は、プロセッサ101とメモリ102と補助記憶装置103と入出力インタフェース104といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
プロセッサ101は、演算処理を行うIC(Integrated Circuit)であり、他のハードウェアを制御する。例えば、プロセッサ101は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、またはGPU(Graphics Processing Unit)である。
メモリ102は揮発性の記憶装置である。メモリ102は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ102はRAM(Random Access Memory)である。メモリ102に記憶されたデータは必要に応じて補助記憶装置103に保存される。
補助記憶装置103は不揮発性の記憶装置である。例えば、補助記憶装置103は、ROM(Read Only Memory)、HDD(Hard Disk Drive)、またはフラッシュメモリである。補助記憶装置103に記憶されたデータは必要に応じてメモリ102にロードされる。
入出力インタフェース104は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース104はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。USBはUniversal Serial Busの略称である。
ソースコード解析装置100は、受付部111と第1解析部112と第2解析部113と第3解析部114と絞り込み部115と順位付け部116と表示部117といった要素を備える。これらの要素はソフトウェアで実現される。
補助記憶装置103には、受付部111と第1解析部112と第2解析部113と第3解析部114と絞り込み部115と順位付け部116と表示部117としてコンピュータを機能させるためのソースコード解析プログラムが記憶されている。ソースコード解析プログラムは、メモリ102にロードされて、プロセッサ101によって実行される。
さらに、補助記憶装置103にはOS(Operating System)が記憶されている。OSの少なくとも一部は、メモリ102にロードされて、プロセッサ101によって実行される。
つまり、プロセッサ101は、OSを実行しながら、ソースコード解析プログラムを実行する。
ソースコード解析プログラムを実行して得られるデータは、メモリ102、補助記憶装置103、プロセッサ101内のレジスタまたはプロセッサ101内のキャッシュメモリといった記憶装置に記憶される。
補助記憶装置103は記憶部120として機能する。但し、他の記憶装置が、補助記憶装置103の代わりに、又は、補助記憶装置103と共に、記憶部120として機能してもよい。
ソースコード解析装置100は、プロセッサ101を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ101の役割を分担する。
ソースコード解析プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータで読み取り可能に記録(格納)することができる。
***動作の説明***
ソースコード解析装置100の動作はソースコード解析方法に相当する。また、ソースコード解析方法の手順はソースコード解析プログラムの手順に相当する。
図2に基づいて、ソースコード解析方法を説明する。
ステップS110において、受付部111は、第1ソースコードと第2ソースコードとを受け付ける。
第1ソースコードは、1つ以上の変数と1つ以上の関数とを含む。
第2ソースコードは、1つ以上の変数と1つ以上の関数とを含む。
具体的な第1ソースコードは、対象システムで実行されるプログラムのソースコードである。対象システムは、解析対象となるシステムである。
具体的な第2ソースコードは、外部システムで実行されるプログラムのソースコードである。外部システムは、対象システムにアクセスするシステムである。
図3に基づいて、受付処理(S110)の手順を説明する。
ステップS111において、利用者は、第1ソースコードをソースコード解析装置100に入力する。
そして、受付部111は、入出力インタフェース104を介して、第1ソースコードを受け付ける。
ステップS112において、受付部111は、第1ソースコードを記憶部120に記憶する。
ステップS113において、利用者は、第2ソースコードをソースコード解析装置100に入力する。
そして、受付部111は、入出力インタフェース104を介して、第2ソースコードを受け付ける。
ステップS114において、受付部111は、第2ソースコードを記憶部120に記憶する。
以降の説明において、第1ソースコードと第2ソースコードとを総称してシステムソースコードと呼ぶ。
図2に戻り、ステップS120を説明する。
ステップS120において、第1解析部112は、第1ソースコードから1つ以上のアクセス関数を見つける。
アクセス関数は、第1ソースコードに含まれる1つ以上の関数のうち、注目変数にアクセスする関数である。アクセス関数には、注目変数に直接にアクセスする関数の他に、1つ以上の関数を介して注目変数にアクセスする関数が含まれる。例えば、第1関数が注目関数にアクセスする関数であり、第2関数が第1関数を呼び出す関数である場合、第1関数と第2関数とのそれぞれがアクセス関数である。例えば、アクセス関数は注目関数を参照する関数である。
注目変数は、第1ソースコードに含まれる1つ以上の変数のうち、第2ソースコードに含まれる関数からアクセスされる変数である。例えば、注目変数は第2ソースコードに含まれる関数によって更新される変数である。
具体的には、第1解析部112は、システムソースコードに対する構造解析を行うことによって、ソフトウェア要素の階層構造を生成する。
ソフトウェア要素の階層構造は、ソフトウェア要素間の依存関係を示す。主なソフトウェア要素は、変数および関数である。主な依存関係は、変数へのアクセスおよび関数の呼び出しである。
ソフトウェア要素の階層構造には、注目変数と1つ以上のアクセス関数とが含まれる。
例えば、第1解析部112は、特許文献1に開示された変更影響分析を行うことによって、ソフトウェア要素の階層構造を生成する。
図4に基づいて、第1解析処理(S120)の手順を説明する。
ステップS121において、第1解析部112は、システムソースコードを記憶部120からメモリ102に読み出す。
つまり、第1解析部112は、第1ソースコードと第2ソースコードとを記憶部120からメモリ102に読み出す。
システムソースコードがメモリ102に記憶されている場合、ステップS121は不要である。
ステップS122において、第1解析部112は、システムコードに対する構造解析を行う。
これにより、ソフトウェア要素の階層構造が得られる。
ステップS123において、第1解析部112は、ソフトウェア要素の階層構造を記憶部120に記憶する。
図2に戻り、ステップS130を説明する。
ステップS130において、第2解析部113は、第1ソースコードから1つ以上の脆弱関数を見つける。
脆弱関数は、脆弱条件を満たす関数である。
脆弱条件は、ソフトウェアに関する脆弱性を有する関数が満たす条件である。脆弱条件は予め決められる。
注目変数がバッファ変数である場合、脆弱条件は、例えば、バッファオーバーフローが発生する関数が満たす条件である。脆弱関数は、バッファオーバーフローを発生する可能性がある。バッファ変数は、バッファとして使用される変数である。
具体的には、第2解析部113は、システムソースコードに対する静的解析を行うことによって、1つ以上の脆弱関数を見つける。例えば、第2解析部113は、Klocworkと呼ばれるソフトウェアを実行する。このソフトウェアは、静的解析を行うためのソフトウェアである。
第2解析部113は、特許文献2に開示されたソースコード解析を行うことによって、脆弱関数を見つけてもよい。脆弱関数は、特許文献2における警告対象の関数の一種である。
図5に基づいて、第2解析処理(S130)の手順を説明する。
ステップS131において、第2解析部113は、第1ソースコードを記憶部120からメモリ102に読み出す。
第1ソースコードがメモリ102に記憶されている場合、ステップS131は不要である。
ステップS132において、第2解析部113は、第1ソースコードに対する静的解析を行う。
これにより、1つ以上の脆弱関数が見つかる。
ステップS133において、第2解析部113は、1つ以上の脆弱関数を示す脆弱関数一覧を生成し、脆弱関数一覧を記憶部120に記憶する。
図2に戻り、ステップS140を説明する。
ステップS140において、第3解析部114は、1つ以上の脆弱関数のそれぞれのアクセス頻度を算出する。
アクセス頻度は、注目変数に対するアクセスの頻度である。
具体的には、第3解析部114は、第1ソースコードに対する動的解析を行うことによって、1つ以上の脆弱関数のそれぞれのアクセス頻度を算出する。例えば、第3解析部114は、DT10と呼ばれるソフトウェアを実行する。このソフトウェアは、動的解析を行うためのソフトウェアである。
図6に基づいて、第3解析処理(S140)の手順を説明する。
ステップS141において、第3解析部114は、システムソースコードを記憶部120からメモリ102に読み出す。
つまり、第3解析部114は、第1ソースコードと第2ソースコードとを記憶部120からメモリ102に読み出す。
システムソースコードがメモリ102に記憶されている場合、ステップS141は不要である。
ステップS142において、第3解析部114は、第1ソースコードに対する動的解析を行う。
これにより、第1ソースコードに含まれる1つ以上の関数のそれぞれのアクセス頻度が算出される。第1ソースコードに含まれる1つ以上の関数には、1つ以上の脆弱関数が含まれる。
ステップS143において、第3解析部114は、第1ソースコードに含まれる1つ以上の関数のそれぞれのアクセス頻度を示すアクセス頻度一覧を生成し、アクセス頻度一覧を記憶部120に記憶する。
図2に戻り、ステップS150を説明する。
ステップS150において、絞り込み部115は、1つ以上の脆弱関数から1つ以上の注目関数を選択する。
注目関数は、1つ以上のアクセス関数に含まれる脆弱関数である。つまり、注目関数は、アクセス関数と脆弱関数とのいずれにも該当する関数である。
図7に基づいて、絞り込み処理(S150)の手順を説明する。
ステップS151において、絞り込み部115は、ソフトウェア要素の階層構造と脆弱関数一覧とを記憶部120からメモリ102に読み出す。
ソフトウェア要素の階層構造と脆弱関数一覧とがメモリ102に記憶されている場合、ステップS151は不要である。
ステップS152において、絞り込み部115は、ソフトウェア要素の階層構造から、未選択のアクセス関数を1つ選択する。
ステップS153およびステップS154は、ステップS152で選択されたアクセス関数のために実行される。
ステップS153において、絞り込み部115は、アクセス関数が脆弱関数であるか判定する。
具体的には、絞り込み部115は、アクセス関数と同じ名称の関数が脆弱関数一覧に含まれるか判定する。アクセス関数と同じ名称の関数が脆弱関数一覧に含まれる場合、アクセス関数は脆弱関数である。
アクセス関数が脆弱関数である場合、処理はステップS154に進む。
アクセス関数が脆弱関数でない場合、処理はステップS155に進む。
ステップS154において、絞り込み部115は、アクセス関数を注目関数として注目関数一覧に登録する。
注目関数一覧は1つ以上の注目関数を示す。
ステップS155において、絞り込み部115は、未選択のアクセス関数が有るか判定する。ステップS155において、未選択のアクセス関数を未選択関数と呼ぶ。
未選択関数が有る場合、処理はステップS156に進む。
未選択関数が無い場合、処理はステップS152に進む。
ステップS156において、絞り込み部115は、注目関数一覧を記憶部120に記憶する。
図2に戻り、ステップS160を説明する。
ステップS160において、順位付け部116は、1つ以上の注目関数のそれぞれのアクセス頻度に基づいて、1つ以上の注目関数に優先順位を付ける。
具体的には、順位付け部116は、アクセス頻度が大きいほど高い優先順位を各注目関数に付ける。
図8に基づいて、順位付け処理(S160)の手順を説明する。
ステップS161において、順位付け部116は、注目関数一覧とアクセス頻度一覧とを記憶部120からメモリ102に読み出す。
注目関数一覧とアクセス頻度一覧とがメモリ102に記憶されている場合、ステップS161は不要である。
ステップS162において、順位付け部116は、注目関数一覧に示される注目関数毎に、注目関数のアクセス頻度をアクセス頻度一覧から取得する。
ステップS163において、順位付け部116は、各注目関数のアクセス頻度に基づいて、各注目関数の優先順位を決定する。
具体的には、順位付け部116は、アクセス頻度が大きいほど高い優先順位を各注目関数に付ける。
ステップS164において、順位付け部116は、注目関数一覧に示される各注目関数を優先順位に従って並べ替える。
これにより、優先順位に従って並んだ1つ以上の注目関数が注目関数一覧に示される。
ステップS165において、順位付け部116は、記憶部120に記憶されている注目関数一覧をステップS164で得られた注目関数一覧に更新する。
図2に戻り、ステップS170を説明する。
ステップS170において、表示部117は、1つ以上の注目関数が優先順位に従って並んだ状態で1つ以上の注目関数を表示する。
図9に基づいて、表示処理(S170)の手順を説明する。
表示処理(S170)における注目関数一覧は、順位付け処理(S160)の後の注目関数一覧を意味する。
ステップS171において、表示部117は、注目関数一覧を記憶部120からメモリ102に読み出す。
注目関数一覧がメモリ102に記憶されている場合、ステップS171は不要である。
ステップS172において、表示部117は、入出力インタフェース104を介して、注目関数一覧をディスプレイに表示する。
図10に基づいて、ソースコード解析方法の具体例を説明する。
受付部111は、第1ソースコード121と第2ソースコード122とを受け付ける。
第1解析部112は、第1ソースコード121と第2ソースコード122とに対する構造解析を行うことによって、階層構造123を生成する。
第1ソースコード121は、バッファ変数buff[x]を有する。
バッファ変数buff[x]は、注目変数であり、第2ソースコード122に含まれる関数からアクセスされる。
階層構造123は、関数f1()と関数f3()とのそれぞれがバッファ変数buff[x]にアクセスすることを示している。さらに、階層構造123は、関数f3()が関数f5()から呼び出されることを示している。関数f1()、関数f3()および関数f5()は、第1ソースコード121に含まれる。
アクセス関数は、関数f1()、関数f3()および関数f5()である。
第2解析部113は、第1ソースコード121に対する静的解析を行うことによって、脆弱関数一覧を生成する。
第3解析部114は、第1ソースコード121に対する動的解析を行うことによって、アクセス頻度一覧を生成する。
解析結果124は、脆弱関数一覧とアクセス頻度一覧とをマージすることによって得られる表である。脆弱性「なし」に対応する関数は、脆弱関数に該当しない。
脆弱関数は、関数f1()、関数f3()、関数f5()および関数f7()である。関数f1()、関数f3()、関数f5()および関数f7()は第1ソースコード121に含まれる。
絞り込み部115は、1つ以上の脆弱関数から1つ以上のアクセス関数に含まれる脆弱関数を選択する。選択される脆弱関数が注目関数である。
解析結果124において、脆弱関数は、関数f1()、関数f3()、関数f5()および関数f7()である。
階層構造123において、アクセス関数は、関数f1()、関数f3()および関数f5()である。
したがって、注目関数は、関数f1()、関数f3()および関数f5()である。
順位付け部116は、1つ以上の注目関数のそれぞれのアクセス頻度に基づいて、1つ以上の注目関数に優先順位を付ける。アクセス頻度が大きいほど優先順位が高い。
注目関数は、関数f1()、関数f3()および関数f5()である。
解析結果124において、関数f1()のアクセス頻度は100であり、関数f3()のアクセス頻度は50であり、関数f5()のアクセス頻度は30である。
したがって、注目関数の優先順位は、関数f1()、関数f3()、関数f5()の順に高い。
注目関数一覧125は、優先順位に従って並んだ3つの注目関数を示している。
表示部117は、注目関数一覧125をディスプレイに表示する。
***実施の形態1の効果***
ソースコードの中の注目すべき関数を絞り込むことができる。さらに、注目すべき関数に優先順位を付けることができる。
例えば、ソフトウェアの修正箇所を効率よく絞り込むことが可能となる。さらに、優先順位に基づいたソフトウェアの修正が可能となる。
このことは、仕様が明確ではない外部システム(つまり、例えば他社の装置のように、対象システムの設計者が挙動を明らかにできないシステム)との間で種々の情報をやり取りする対象システムにおいて、特に外部システムからのアクセスに関わる部分の弱点(つまり、外部システムからのアクセスに対して脆弱な設計部分)を見つけ出すことに繋がる。
***他の構成***
ソースコード解析方法の手順は、図2における手順と異なってもよい。
例えば、ステップS120からステップS140の順番が入れ替わっても構わない。
実施の形態2.
ソフトウェアにおける脆弱性の種類と各注目関数に対する優先順位の付け方とが実施の形態1と異なる形態について、主に実施の形態1と異なる点を図11から図13に基づいて説明する。
***構成の説明***
ソースコード解析装置100の構成は、実施の形態1における構成と同じである(図1参照)。
***動作の説明***
図11に基づいて、ソースコード解析方法を説明する。
ステップS210において、受付部111は、第1ソースコードと第2ソースコードとを受け付ける。つまり、受付部111は、システムソースコードを受け付ける。
ステップS210は、実施の形態1におけるステップS110と同じである。
ステップS220において、第1解析部112は、第1ソースコードから1つ以上のアクセス関数を見つける。
ステップS220は、実施の形態1におけるステップS120と同じである。
ステップS230において、第2解析部113は、第1ソースコードから1つ以上の脆弱性関数を見つける。
脆弱関数は、脆弱条件を満たす関数である。
脆弱条件は、例えば、次のような事象が発生する関数が満たす条件である。脆弱関数は、次のような事象を発生する可能性がある。
・整数オーバーフロー
・配列インデックスの検証不備
・未初期化変数の利用
・ポインタ変数に対するsizeof演算子の使用
具体的には、第2解析部113は、システムソースコードに対する静的解析を行うことによって、1つ以上の脆弱関数を見つける。例えば、第2解析部113は、Klocworkと呼ばれるソフトウェアを実行する。このソフトウェアは、静的解析を行うためのソフトウェアである。
第2解析部113は、特許文献2に開示されたソースコード解析を行うことによって、脆弱関数を見つけてもよい。脆弱関数は、特許文献2における警告対象の関数の一種である。
第2解析処理(S230)の手順は、実施の形態1における第2解析処理(S130)の手順と同じである(図5参照)。
ステップS240において、第3解析部114は、1つ以上の脆弱関数のそれぞれの呼び出しタイミングを特定する。
具体的には、第3解析部114は、第1ソースコードに対する動的解析を行うことによって、1つ以上の脆弱関数のそれぞれの呼び出しタイミングを算出する。例えば、第3解析部114は、DT10と呼ばれるソフトウェアを実行する。このソフトウェアは、動的解析を行うためのソフトウェアである。
図12に基づいて、第3解析処理(S240)の手順を説明する。
ステップS241において、第3解析部114は、システムソースコードを記憶部120からメモリ102に読み出す。
ステップS241は、実施の形態1におけるステップS141と同じである(図6参照)。
ステップS242において、第3解析部114は、第1ソースコードに対する動的解析を行う。
これにより、第1ソースコードに含まれる1つ以上の関数のそれぞれの呼び出しタイミングが特定される。第1ソースコードに含まれる1つ以上の関数には、1つ以上の脆弱関数が含まれる。
ステップS243において、第3解析部114は、第1ソースコードに含まれる1つ以上の関数のそれぞれの呼び出しタイミングを示す呼び出しタイミング一覧を生成し、呼び出しタイミング一覧を記憶部120に記憶する。
図11に戻り、ステップS250から説明を続ける。
ステップS250において、絞り込み部115は、1つ以上の脆弱関数から1つ以上の注目関数を選択する。
ステップS250は、実施の形態1におけるステップS150と同じである(図2参照)。
ステップS260において、順位付け部116は、1つ以上の注目関数のそれぞれの呼び出しタイミングに基づいて、1つ以上の注目関数に優先順位を付ける。
具体的には、順位付け部116は、優先順位規則にしたがって、1つ以上の注目関数に優先順位を付ける。優先順位規則は、予め決められる規則であり、呼び出しタイミングと優先順位との関係を指定する。
順位付け処理(S260)の手順は、実施の形態1におけるステップS160の手順と同じである(図8参照)。
ステップS270において、表示部117は、1つ以上の注目関数が優先順位に従って並んだ状態で1つ以上の注目関数を表示する。
ステップS270は、実施の形態1におけるステップS170と同じである(図2参照)。
図13に、ソースコード解析方法の具体例を示す。
この具体例は、解析結果126を除いて、実施の形態1における具体例と同じである(図10参照)。解析結果126は、実施の形態1における解析結果124に相当する。
受付部111は、第1ソースコード121と第2ソースコード122とを受け付ける。
第1解析部112は、第1ソースコード121と第2ソースコード122とに対する構造解析を行うことによって、階層構造123を生成する。
第2解析部113は、第1ソースコード121に対する静的解析を行うことによって、脆弱関数一覧を生成する。
第3解析部114は、第1ソースコード121に対する動的解析を行うことによって、呼び出しタイミング一覧を生成する。
解析結果126は、脆弱関数一覧と呼び出しタイミング一覧とをマージすることによって得られる表である。
絞り込み部115は、1つ以上の脆弱関数から1つ以上のアクセス関数に含まれる脆弱関数を選択する。選択される脆弱関数が注目関数である。
順位付け部116は、1つ以上の注目関数のそれぞれの呼び出しタイミングに基づいて、1つ以上の注目関数に優先順位を付ける。
注目関数一覧125は、優先順位に従って並んだ3つの注目関数を示している。
表示部117は、注目関数一覧125をディスプレイに表示する。
***実施の形態2の効果***
バッファオーバーフロー以外の脆弱性を有する1つ以上の脆弱関数から1つ以上の注目関数を絞り込むことができる。さらに、各注目関数の呼び出しタイミングに基づいて各注目関数に優先順位を付けることができる。
***実施の形態の補足***
実施の形態は、好ましい形態の例示であり、本発明の技術的範囲を制限することを意図するものではない。実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。フローチャート等を用いて説明した手順は、適宜に変更してもよい。
100 ソースコード解析装置、101 プロセッサ、102 メモリ、103 補助記憶装置、104 入出力インタフェース、111 受付部、112 第1解析部、113 第2解析部、114 第3解析部、115 絞り込み部、116 順位付け部、117 表示部、120 記憶部、121 第1ソースコード、122 第2ソースコード、123 階層構造、124 解析結果、125 注目関数一覧、126 解析結果。

Claims (6)

  1. 対象システムで実行される第1ソースコードに含まれる1つ以上の変数のうち前記対象システムにアクセスする外部システムで実行される第2ソースコードに含まれる関数からアクセスされる変数である注目変数にアクセスする1つ以上のアクセス関数を前記第1ソースコードから見つける第1解析部と、
    脆弱条件を満たす1つ以上の脆弱関数を前記第1ソースコードから見つける第2解析部と、
    前記1つ以上の脆弱関数から前記1つ以上のアクセス関数に含まれる脆弱関数を注目関数として選択する絞り込み部と
    を備えるソースコード解析装置。
  2. 1つ以上の注目関数のそれぞれについて前記注目変数に対するアクセス頻度を算出する第3解析部と、
    前記1つ以上の注目関数のそれぞれのアクセス頻度に基づいて前記1つ以上の注目関数に優先順位を付ける順位付け部と
    を備える請求項1に記載のソースコード解析装置。
  3. 前記1つ以上の注目関数が前記優先順位に従って並んだ状態で前記1つ以上の注目関数を表示する表示部
    を備える請求項2に記載のソースコード解析装置。
  4. 1つ以上の注目関数のそれぞれの呼び出しタイミングを特定する第3解析部と、
    前記1つ以上の注目関数のそれぞれの呼び出しタイミングに基づいて前記1つ以上の注目関数に優先順位を付ける順位付け部と
    を備える請求項1に記載のソースコード解析装置。
  5. 前記1つ以上の注目関数が前記優先順位に従って並んだ状態で前記1つ以上の注目関数を表示する表示部
    を備える請求項4に記載のソースコード解析装置。
  6. 対象システムで実行される第1ソースコードに含まれる1つ以上の変数のうち前記対象システムにアクセスする外部システムで実行される第2ソースコードに含まれる関数からアクセスされる変数である注目変数にアクセスする1つ以上のアクセス関数を前記第1ソースコードから見つける第1解析部と、
    脆弱条件を満たす1つ以上の脆弱関数を前記第1ソースコードから見つける第2解析部と、
    前記1つ以上の脆弱関数から前記1つ以上のアクセス関数に含まれる脆弱関数を注目関数として選択する絞り込み部
    としてコンピュータを機能させるためのソースコード解析プログラム。
JP2018053902A 2018-03-22 2018-03-22 ソースコード解析装置およびソースコード解析プログラム Active JP7068752B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018053902A JP7068752B2 (ja) 2018-03-22 2018-03-22 ソースコード解析装置およびソースコード解析プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018053902A JP7068752B2 (ja) 2018-03-22 2018-03-22 ソースコード解析装置およびソースコード解析プログラム

Publications (2)

Publication Number Publication Date
JP2019168753A JP2019168753A (ja) 2019-10-03
JP7068752B2 true JP7068752B2 (ja) 2022-05-17

Family

ID=68106835

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018053902A Active JP7068752B2 (ja) 2018-03-22 2018-03-22 ソースコード解析装置およびソースコード解析プログラム

Country Status (1)

Country Link
JP (1) JP7068752B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021077264A (ja) * 2019-11-13 2021-05-20 富士通株式会社 解析プログラム、解析方法及び解析装置
JP7469999B2 (ja) 2020-09-10 2024-04-17 株式会社日立製作所 検索装置、検索方法、および検索プログラム
CN116830081A (zh) 2021-02-24 2023-09-29 索尼集团公司 信息处理装置、信息处理方法、计算机程序和信息处理系统
WO2023195307A1 (ja) * 2022-04-08 2023-10-12 三菱電機株式会社 解析支援装置、解析支援プログラム、および、解析支援方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001273169A (ja) 2000-03-24 2001-10-05 Toshiba Corp プログラムテスト仕様書生成装置
WO2006087780A1 (ja) 2005-02-17 2006-08-24 Fujitsu Limited 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法
JP2007052625A (ja) 2005-08-18 2007-03-01 Hitachi Software Eng Co Ltd ソースコード脆弱性検査装置
JP2007179488A (ja) 2005-12-28 2007-07-12 Fujitsu Ltd ソースコード問題予測プログラム
JP2008197731A (ja) 2007-02-08 2008-08-28 Mitsubishi Electric Corp 静的解析結果の分析表示装置
JP2012141741A (ja) 2010-12-28 2012-07-26 Fujitsu Ltd 解析支援プログラム,解析支援装置および解析支援方法
WO2017141893A1 (ja) 2016-02-17 2017-08-24 三菱電機株式会社 ソフトウェア分析装置及びソフトウェア分析方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001273169A (ja) 2000-03-24 2001-10-05 Toshiba Corp プログラムテスト仕様書生成装置
WO2006087780A1 (ja) 2005-02-17 2006-08-24 Fujitsu Limited 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法
JP2007052625A (ja) 2005-08-18 2007-03-01 Hitachi Software Eng Co Ltd ソースコード脆弱性検査装置
JP2007179488A (ja) 2005-12-28 2007-07-12 Fujitsu Ltd ソースコード問題予測プログラム
JP2008197731A (ja) 2007-02-08 2008-08-28 Mitsubishi Electric Corp 静的解析結果の分析表示装置
JP2012141741A (ja) 2010-12-28 2012-07-26 Fujitsu Ltd 解析支援プログラム,解析支援装置および解析支援方法
WO2017141893A1 (ja) 2016-02-17 2017-08-24 三菱電機株式会社 ソフトウェア分析装置及びソフトウェア分析方法

Also Published As

Publication number Publication date
JP2019168753A (ja) 2019-10-03

Similar Documents

Publication Publication Date Title
JP7068752B2 (ja) ソースコード解析装置およびソースコード解析プログラム
US8572527B1 (en) Generating properties for circuit designs
US20110107345A1 (en) Multiprocessor circuit using run-time task scheduling
US8584095B2 (en) Test support system, method and computer program product, which optimize test scenarios to minimize total test time
WO2018066074A1 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
WO2019159397A1 (ja) ソフトウェア可視化装置、ソフトウェア可視化方法およびソフトウェア可視化プログラム
US10740257B2 (en) Managing accelerators in application-specific integrated circuits
US20200233732A1 (en) Helping a hardware accelerator using software
US20240061664A1 (en) Computer-implemented method for automatically determining a target architecture
US10990073B2 (en) Program editing device, program editing method, and computer readable medium
JP6824053B2 (ja) 関係分析装置および関係分析プログラム
JP6567215B2 (ja) アーキテクチャ選定装置、アーキテクチャ選定方法およびアーキテクチャ選定プログラム
JP7027857B2 (ja) 制御装置
JP6548848B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
KR20160070631A (ko) 프로세서 및 프로세서의 명령어 처리 방법
WO2019171464A1 (ja) 設計支援装置および設計支援プログラム
US20170192485A1 (en) Providing a power optimized design for a device
US20200004503A1 (en) Information processing device, information processing method, and computer readable medium
US12007973B2 (en) Information processing method, non-transitory computer readable medium having recorded thereon program, and information processing device
JP6851210B2 (ja) 分析支援装置、分析支援方法および分析支援プログラム
GB2576457A (en) Queues for inter-pipeline data hazard avoidance
JP6266183B2 (ja) 回路設計支援装置および回路設計支援プログラム
JP2024072010A (ja) プログラム、命令実行制御装置、及び命令実行制御方法
JP6201921B2 (ja) マイクロコンピュータ
JP2022163410A (ja) テストケースの順序決定方法、及びテスト実行装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200914

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210811

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211005

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211116

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220429

R150 Certificate of patent or registration of utility model

Ref document number: 7068752

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150