JP7218793B2 - プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法 - Google Patents

プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法 Download PDF

Info

Publication number
JP7218793B2
JP7218793B2 JP2021506000A JP2021506000A JP7218793B2 JP 7218793 B2 JP7218793 B2 JP 7218793B2 JP 2021506000 A JP2021506000 A JP 2021506000A JP 2021506000 A JP2021506000 A JP 2021506000A JP 7218793 B2 JP7218793 B2 JP 7218793B2
Authority
JP
Japan
Prior art keywords
control flow
source code
program
graph
flow graph
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
JP2021506000A
Other languages
English (en)
Other versions
JP2021533485A (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.)
Denso Corp
Original Assignee
Denso 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 Denso Corp filed Critical Denso Corp
Publication of JP2021533485A publication Critical patent/JP2021533485A/ja
Application granted granted Critical
Publication of JP7218793B2 publication Critical patent/JP7218793B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Description

関連出願の相互参照
この出願は、2018年10月18日に出願された米国特許出願第16/163916号の利益を主張する。上記出願の全開示が、参照によりこの明細書に組み込まれる。
本開示は、一般に、プログラムの制御フローグラフを動的に更新するためのシステムおよび方法に関し、特に、脆弱性の識別および関数の自動計装を通じてプログラムの生成を向上するために、制御フローグラフを動的に提供することに関する。
この欄は、必ずしも公知技術に該当しない、本開示に関連する背景情報を提供する。
ソフトウェアプログラムの開発は複雑な作業になることがある。特に、プログラムが、たとえば、フォーマット、セキュリティ、パフォーマンスなどに関して所望の基準に適合することを保証することは、特にプログラムが比較的堅牢であり、および/または、複雑である場合には、非常に困難であり得る。すなわち、プログラムが長くなり、より複雑なプログラム/データ構造を含むようになると、プログラムの脆弱な態様(たとえば、関数)を識別し、関数がプログラムの他の部分とどのように相互作用するかを識別することが難しくなる。一般に、開発者は、プログラムを最適化するため、および/または、プログラム内の異なる関数/セグメント間の関係をよりよく理解するために、制御フローグラフを参照することがある。しかしながら、制御フローグラフを生成するための既存のアプローチは、プログラムの完了後に機能し、既存のアプローチでは、また、開発者が解釈するには非現実的であり得る大きく複雑なグラフを生成する。したがって、現在のアプローチでは、制御フローグラフをタイムリーに提供することができず、また、プログラムを最初に生成する際に有用であるように解釈することができない。
同様に、プログラムのソースコードに計装を追加すると、開発がさらに複雑になる可能性がある。計装は、コンピュータプログラムの文脈では、一般に、追加機能を提供するためにプログラム内に含まれる追加のコードセグメントを指す。追加機能は、追加の関数フック、セキュリティの確保、トレーサビリティの提供、制御フローの実施などに関連する場合がある。しかしながら、一般にプログラム内に含まれ、その後に検証されなければならない計装の多くの多様なセグメントを考慮すると、計装が正確にコード化されていない場合や、意図せずに省略(消失)されている場合がある。その結果、プログラムフローのような計装制御を行うプログラムの機能が適切に機能せず、脆弱な機能に起因するセキュリティホールのようなさらなる問題が発生する。
この欄は、開示の概要を提供するが、その全範囲またはその全特徴の包括的な開示ではない。
一実施形態では、プログラムの機能を向上することに関する例示的なシステムおよび方法が開示される。前述したように、制御フローグラフを生成する現在のアプローチは、事後にグラフを生成し、また、グラフが複雑で解釈が難しいため、一般に不十分である。その結果、開発者に対する制御フローグラフの有用性は、プログラムの開発時に制限される。さらに、プログラムを手動で計装するプロセスは、プログラムの開発を複雑にし、潜在的に計装が不十分なソースコードや、計装されていても所望の機能を発揮できないコードを生じる虞がある。
したがって、一実施形態では、プログラムの制御フローグラフをリアルタイムで生成する制御フローシステムが開示される。さらに、制御フローシステムは、一実施形態では、制御フローグラフを使用して、プログラムの適切な実行を保証するために、プログラムのソースコードを自動的に計装するなどの追加機能を提供する。たとえば、ひとつのアプローチでは、開示された制御フローシステムは、コードセグメントが、後でプログラムにコンパイルされるソースコードに追加されるときに、コードセグメントの統合開発環境を監視する。制御フローシステムは、コードセグメントの追加の検出に応答して、コードセグメントの制御フロー特性を識別する。
一般に、特性には、たとえば、関数呼び出し、リターンアドレスなど、プログラムの手順内または手順間の制御フローに影響を与える態様が含まれる。制御フロー特性の知識により、システムは、制御フローグラフのセクションを動的に生成/更新できる。たとえば、追加のコードセグメントがソースコードに統合されると、制御フローシステムは、ノード、有向エッジ、および、新たに統合されたコードセグメントに関連する制御フローグラフの他の態様を生成する。一態様では、制御フローシステムは、ソースコードが修正(たとえば、追加、改正など)されるときに、制御フローグラフに新しいセグメントを追加する、および/または、既存のセグメントを修正するように、制御フローグラフをリアルタイムで動的に更新する。
一実施形態では、制御フローシステムは、制御フローグラフを使用して視覚的表現を生成する。すなわち、システムは、ひとつのアプローチでは、プログラムの開発中にプログラムの制御フロー特性を開発者に通知する一態様として、統合開発環境内に制御フローグラフの視覚的表現を電子的に表示する。このように、制御フローグラフをリアルタイムで提供することは、制御フローおよびさらなる態様に関連するプログラムの適切なプログラム構造を確保することを容易にする。このように、制御フローシステムは、プログラムフローのより良い認識を通して、プログラムの機能と開発を向上する。
もちろん、制御フローグラフの視覚的表現が説明されているが、制御フローシステムは、追加機能を容易にするために、制御フローグラフをさらなるモジュール/システムに提供することもできる。たとえば、一実施形態では、制御フローシステムは、ソースコードを自動的に計装するメカニズムとして制御フローグラフを使用する。制御フローシステムは、たとえば、プログラムフローの確保を容易にする計装を含むべき、制御フロー特性をグラフ内で識別する。そのため、計装がソースコードの特定の態様とともに自動的に含まれるように、また、開発者が計装を別個に含むことを忘れずに、プログラムを開発しながら計装を検証できるように、システムは計装をリアルタイムで統合する。このように、制御フローシステムは、ソフトウェアの実行時に適切な制御フローをより確実にすることで、プログラムのセキュリティ、安全な開発、および最終的な機能を向上する。
一実施形態では、プログラムの機能を向上するための制御フローシステムが開示される。制御フローシステムは、ひとつ以上のプロセッサと、ひとつ以上のプロセッサに通信可能に結合されたメモリと、を備える。メモリは、ひとつ以上のプロセッサによって実行されると、ひとつ以上のプロセッサに、プログラムのソースコードに追加されるコードセグメントの検出に応答して、コードセグメントを含むソースコードの制御フロー特性を識別させる命令を含む分析モジュールを格納する。メモリは、ひとつ以上のプロセッサによって実行されると、ひとつ以上のプロセッサに、制御フロー特性にしたがってソースコードの制御フローグラフを更新させる命令を含むグラフモジュールを格納する。制御フローグラフは、ソースコードのブロックを表すノードと、ブロック間の遷移を表すノード間の有向エッジとで構成されるプログラムの実行パスを表す。グラフモジュールは、ソースコードの調整を容易にすることによってプログラムの機能を向上するために、制御フローグラフを提供する命令をさらに含む。
一実施形態では、非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、ひとつ以上のプロセッサによって実行されると、ひとつ以上のプロセッサに、開示された機能を実行させる命令を格納する。命令は、プログラムのソースコードに追加されたコードセグメントの検出に応答して、コードセグメントを含むソースコードの制御フロー特性を識別する命令を含む。命令は、制御フローの特性にしたがってソースコードの制御フローグラフを更新する命令を含む。制御フローグラフは、ソースコードのブロックを表すノードと、ブロック間の遷移を表すノード間の有向エッジとで構成されるプログラムの実行パスを表す。命令は、ソースコードの調整を容易にすることによってプログラムの機能を向上するために、制御フローグラフを提供する命令を含む。
一実施形態では、プログラムの機能を向上する方法が開示される。方法は、プログラムのソースコードに追加されたコードセグメントの検出に応答して、コードセグメントを含むソースコードの制御フロー特性を識別することを含む。方法は、制御フロー特性にしたがってソースコードの制御フローグラフを更新することを含む。制御フローグラフは、ソースコードのブロックを表すノードと、ブロック間の遷移を表すノード間の有向エッジとで構成されるプログラムの実行パスを表す。方法は、ソースコードの調整を容易にすることによってプログラムの機能を向上するために、制御フローグラフを提供することを含む。
この明細書に組み込まれ、その一部を構成する添付図面は、本開示の様々なシステム、方法、および他の実施形態を示している。図中の図示された要素の境界(たとえば、ボックス、ボックスのグループ、または他の形状)は、境界の一実施形態を表すことが理解されるであろう。いくつかの実施形態では、ひとつの要素が複数の要素として設計されてもよく、または複数の要素がひとつの要素として設計されてもよい。いくつかの実施形態では、別の要素の内部コンポーネントとして示される要素は、外部コンポーネントとして実装されてもよく、その逆もあり得る。さらに、要素は縮尺どおりに描かれない場合がある。
プログラムのソースコードに関して制御フローグラフの生成および関連する他の機能の実行に関連する制御フローシステムの一実施形態を示す図である。 プログラムのソースコードの一例を示す図である。 図1のシステムが図2のソースコードから導出する制御フローグラフの一例を示す図である。 制御フローグラフのさらなる一例を示す図である。 制御フローグラフの追加の例を示している。 リアルタイムで制御フローグラフを生成することに関連する方法の一実施形態を示す図である。 ソースコードを自動的に計装することに関連する方法の一実施形態を示す図である。 計装を含むソースコードの一部にタグ付けすることに関連する方法の一実施形態を示す図である。
制御フローグラフの動的生成および計装の自動包含を介してプログラムの機能を向上(改善)することに関連するシステム、方法、および、他の実施形態が開示される。前述したように、制御フローグラフを生成する現在のアプローチは、グラフがいつ利用可能になるかという適時性と、グラフの形式の複雑さに関するグラフの解釈可能性とに関連する問題が発生する。その結果、制御フローグラフは、前述の問題のために、開発時の適用が制限される可能性がある。
さらに、プログラムの開発時には制御フローグラフが一般に利用できないため、制御フローグラフによって容易化(促進)される得る追加機能も、また、遅延または完全に利用できない。たとえば、手動でプログラムを計装するプロセスは、プログラムの開発を複雑にし、潜在的に計装が不十分なソースコードや、計装されていても所望の機能を発揮できないコードを生じる虞がある。
一実施形態では、プログラムの制御フローグラフをリアルタイムで生成する制御フローシステムが開示される。さらに、制御フローシステムは、一実施形態では、制御フローグラフを使用して、制御フローグラフに関連して定義されたポリシーを通じてソースコードを自動的に計装するなどの追加機能を提供する。したがって、プログラムの自動計装を提供することは、プログラムの適切な実行(たとえば、プログラムフロー)を確保することを容易にする。
ひとつのアプローチでは、開示された制御フローシステムは、たとえば、コードセグメントのための統合開発環境内の電子データストリームを監視する。制御フローシステムがコードセグメントまたは既存のコードセグメントへの変更を検出すると、制御フローシステムは、たとえば、コードセグメントを分析し、コードセグメントが存在する場合、コードセグメントが既存のソースコードとどのように統合されているかを分析して、コードセグメントの制御フロー特性(すなわち、コードセグメントがプログラムフローに与える影響)を識別する。
一般に、特性には、たとえば、関数呼び出し、リターンアドレスなど、プログラムの手順内または手順間の制御フローに影響を与える態様が含まれる。制御フロー特性の知識により、システムは、制御フローグラフのセクションを動的に生成/更新できる。たとえば、追加のコードセグメントがソースコードに統合されると、制御フローシステムは、ノード、有向エッジ、および、新たに統合されたコードセグメントに関連する制御フローグラフの他の態様を生成/修正する。一態様では、制御フローシステムは、ソースコードが修正(たとえば、追加、改正など)されるときに、制御フローグラフに新しいセグメントを追加する、および/または、既存のセグメントを修正するように、制御フローグラフをリアルタイムで動的に更新する。
一実施形態では、制御フローシステムは、制御フローグラフを使用して視覚的表現を生成する。ひとつのアプローチでは、制御フローシステムは、プログラムの開発中にプログラムの制御フロー特性を開発者に通知する一態様として、制御フローグラフの視覚的表現を、リアルタイム更新で統合開発環境内に電子的に表示する。このように、制御フローグラフをリアルタイムで提供することは、制御フローおよびさらなる態様に関連するプログラムの適切なプログラム構造を確保することを容易にする。このように、制御フローシステムは、プログラムフローのより良い認識を通してプログラムの開発を容易にし、プログラムの機能(機能性)を向上する。
もちろん、制御フローグラフの視覚的表現が説明されているが、制御フローシステムは、追加機能を容易にするために、制御フローグラフをさらなるモジュール/システムに提供することもできる。たとえば、一実施形態では、制御フローシステムは、ソースコードを自動的に計装するメカニズムとして制御フローグラフを使用する。制御フローシステムは、たとえば、プログラムフローを監視し、確保し、または、他の方法で保証するための計装を含むべき、制御フロー特性をグラフ内で識別する。このように、システムはリアルタイムで計装を統合し、ソースコードの特定の態様とともに自動的に計装が含まれるようにし、開発者がプログラムを開発している間に、明示的に計装を含めることを覚えていなくても、その場で計装を検証できるようにする。このように、制御フローシステムは、適切なプログラムフローをより確実にすることで、プログラムの開発および最終的な機能を向上する。
図1を参照すると、制御フローシステム100の一実施形態が示されている。この明細書では、制御フローシステム100に関する構成について説明するが、実施形態は、図示のような単一システムに限定されない。いくつかの実装形態では、制御フローシステム100は、クラウドコンピューティングシステム、クラスタコンピューティングシステム、分散コンピューティングシステム、サービスとしてのSaaSシステムなどとして具現化することができる。SaaSは、software as a serviceの略称である。制御フローシステム100は、説明の目的で単一の装置として示され、説明されているが、開示された構成要素が構成され得る全体的な可能な構成を制限するものとして解釈されるべきではない。たとえば、別個のモジュール、メモリ、データベースなどは、様々な組み合わせで様々なコンピューティングシステムに分散されてもよい。
制御フローシステム100は、また、様々な要素を含む。様々な実施形態では、制御フローシステム100が、図1に示される要素のすべてを有さなくてもよいことが理解される。制御フローシステム100は、図1に示される様々な要素の任意の組み合わせを有することができる。さらに、制御フローシステム100は、図1に示される様々な要素に対して追加の要素を有することができる。いくつかの構成では、制御フローシステム100は、図1に示されるひとつ以上の要素なしで実施されてもよい。さらに、様々な要素は、図1の制御フローシステム100内に位置するものとして示されているが、これらの要素のうちのひとつ以上が制御フローシステム100の外部に配置できることが理解される。さらに、示された要素は、長い距離で物理的に分離されてもよい。
さらに、図示の単純化および明確化のために、参照番号が適宜、対応するまたは類似する要素を示すために、異なる図面間で繰り返されていることが理解される。さらに、この明細書に記載の実施形態は、記載された要素の様々な組み合わせを使用して実施できると理解される。この明細書に記載の実施形態の完全な理解を提供するために、多数の具体的な内容を説明する。しかしながら、当業であれば、この明細書に記載された実施形態は、これらの要素の様々な組み合わせを用いて実施され得ることを理解できる。
いずれの場合も、制御フローシステム100は、プログラムの実行/プログラムフローの改善に関し、この明細書に開示されているような方法、および、他の機能を実行するために実装される。言及された機能と方法は、図のさらなる説明でより明らかになる。さらに、制御フローシステム100は、プロセッサ110を備えるものとして示されている。様々な実施形態において、プロセッサ110は、制御フローシステム100の一部であってもよく、制御フローシステム100は、データバスまたは別の通信経路を介してプロセッサ110にアクセスしてもよく、プロセッサ110は、制御フローシステム100によってアクセス可能なリモートコンピューティングリソースであってもよい。いずれの場合も、プロセッサ110は、マイクロプロセッサ、ASIC、グラフィックス処理装置(GPU)、または、他の電子デバイスの制御のために使用され得る様々な電子出力をそこから生成するための機械可読命令を実行することが可能な他のコンピューティングコンポーネントのような電子デバイスである。
一実施形態では、制御フローシステム100はメモリ120を備えており、メモリ120は、分析モジュール130、グラフモジュール140、および、計装モジュール150を格納している。分析モジュール130、グラフモジュール140、および、計装モジュール150を、以下では、モジュール130、140、150と示すことがある。メモリ120は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、ハードディスクドライブ、フラッシュメモリ、または、モジュール130、140、150を格納するための他の適切なメモリである。モジュール130、140、150は、たとえば、プロセッサ110によって実行されると、プロセッサ110に、この明細書に開示される様々な機能を実行させるコンピュータ可読命令である。様々な実施形態では、モジュール130、140、150は、ハードウェアロジック、ASIC、グラフィックス処理装置(GPU)、プロセッサ110のコンポーネント、電子メモリ内に埋め込まれた命令などを含むことができるが、これらに限定されない様々な態様で実装され得る。
制御フローシステム100は、一実施形態では、データベース160を備える。データベース160は、一実施形態では、メモリ120、分散メモリ、クラウドベースのメモリ、または、別のデータストアに格納された電子データ構造であり、格納されたデータの分析、格納されたデータの提供、格納されたデータの整理などのためにプロセッサ110によって実行され得るルーチンで構成される。一実施形態では、データベース160は、様々な決定を実行する際にモジュール130、140、150によって使用されるデータを格納する。一実施形態では、データベース160は、グラフ170を格納する。さらなる実施形態では、制御フローシステム100は、グラフ170を、メモリ120、専用のデータ構造、プロセッサ110のキャッシュメモリ、または、別の適切なデータストレージコンポーネントに格納する。
この明細書で使用される場合、「プログラム」という用語は、ソースコードから派生したコンパイルされたマシンコードを指す。したがって、プログラムは、一実施形態では、コンパイルされたプログラムまたはその一部であり、マシンコードである。この明細書で使用される「マシンコード」という語句は、一般に、たとえばプロセッサ110のようなマイクロプロセッサによって実行され得る機械語命令で表されるプログラムを指す。さらに、マシンコードは、一般に、関連するハードウェアによって実装される命令セットによって定義されるオペコードで構成されるプリミティブ言語、または、ハードウェア依存言語であると理解される。マシンコード自体は、データ値、レジスタアドレス、メモリアドレスなどでさらに構成される。もちろん、プログラムはマシンコードであると説明されているが、さらなる実施形態では、プログラムは、アセンブリコード、または、ソースコードの別の中間表現である。
プログラムのコンパイル元のソースコードは、たとえば、関数、データ構造、オブジェクト、ステートメント(文)などで構成される。ソースコードの一部として含まれる計装は、さらに同じ要素(たとえば、オブジェクト、ステートメントなど)で構成される。一般に、プログラムは、関数のセット(集まり)として構成されている。様々な例では、関数は、サブ関数として相互にネスト(入れ子)になっている場合がある。さらに、関数は、一般に、ステートメントのセット(たとえば、ループ、I/Oステートメントなど)で構成され、通常は特定の機能に焦点を当てている。すなわち、個々の関数は、一般に、特定のタスクを実行するために実装される。したがって、サブ関数は、親関数のより広範な機能をサポートするサブルーチンを実装することができる。いずれの場合も、関数は、関数自体を構成するステートメントを定義し、関数に関連付けられた機能を実装するためのソースコードが含まれる。
さらに、この明細書で説明するように、記載されたモジュール130、140、150は、統合開発環境へのプラグインとして機能してもよい。統合開発環境(IDE)は、ソフトウェアの開発のための環境を提供するプログラムまたはプログラムの集合体である。たとえば、IDEは、ソースコードエディタ、ビルドツール、デバッガ、コンパイラ、インタプリタ、グラフィカルユーザインタフェース(GUI)などを含むことができる。一般に、IDEは、プログラムの作成を容易にするツールや他の態様を備えた総合的な環境を提供することにより、開発者(すなわち、プログラマ)の効率を向上するメカニズムである。したがって、前述したように、ひとつ以上の態様において、モジュール130、140、150は、追加の機能を提供するためにIDEと統合するプラグインである。したがって、ひとつのアプローチでは、モジュール130、140、150は、たとえば、IDEに電子的に提供されるコードセグメントを含む電子的な入力および出力ストリームを含むIDEの電子データにアクセスする。モジュール130、140、150は、アクセスを容易にするために、IDEのアプリケーションプログラムインターフェース(API)を活用してもよい。さらに、そのようなアクセスは、モジュール130、140、150の統合を自動化する(たとえば、直接統合アクセスを提供する)アプリケーションフックの形で提供されてもよい。いずれの場合も、システム100、および、モジュール130、140、150は、一般に、IDEと協調的に機能する。したがって、実行中のIDEは、一般に、プログラムのコンパイル元であるソースコードを管理し、また、ソースコードをプログラムに実際にコンパイルするための機能を提供してもよい。
データベース160の要素に続いて、グラフ170は、プログラムの実行パスを表す制御フローグラフである。以下では、グラフ170を制御フローグラフ170と示すことがある。一実施形態では、後でより詳細に説明するように、分析モジュール130およびグラフモジュール140は、ソースコードが動的にIDEに提供されると、ソースコードからグラフ170を導出するように一緒に機能する。グラフモジュール140は、ひとつのアプローチでは、ノード、および、ノード間の有向エッジを用いてグラフを形成する。ノードはソースコードのブロック/セグメントを表し、ノード間の有向エッジはブロック間の遷移を表す。ブロックは、コードの原子セグメント(たとえば、途切れのない)、または、ソースコードの少なくとも一体的に関連するセグメントである。一実施形態では、有向エッジは、ブロック/セグメント間の手順内、および/または、手順間の制御フロー転送を示す。すなわち、エッジは、ハンドオーバ、関数呼び出し、具象関数、および/または、シンボリック関数の引数などを表す。一般に、有向エッジは、個別のブロック間のプログラム実行における転送を示す。別の実施形態では、ノードおよび有向エッジは、この明細書に記載されているものとは異なって定義されてもよいことが理解されたい。たとえば、ひとつのアプローチでは、有向エッジを定義するノード、条件を構成するセグメント/ブロックは、グラフポリシーにしたがって指定される。グラフポリシーは、ノードおよびエッジをそれぞれ形成するブロック/セグメントおよび遷移を識別するための、テンプレート、例示的なセグメント/条件、および/または、指標(メトリクス)を定義する。一般に、グラフモジュール140は、グラフポリシーを利用して、グラフ170を形成するために最適な要素を提供する。したがって、システム100は、別々の実装にしたがってグラフ170の態様を柔軟に定義するように実装することができる。
図2は、プログラムのソースコード200の例示的なセグメントを示している。また、図3は、制御フローグラフ300の一例を示している。制御フローグラフ300は、分析モジュール130を介して提供される入力からグラフモジュール140によって生成され得るグラフの例である。グラフ300は、ソースコード200からのコードのセグメント/ブロックに対応するノード305、310、315、320、325、330、335、340、345を含む。グラフ300は、ソースコード200のセグメント間の関係に対応するノード間の有向エッジをさらに示す。さらに、分離されたノードおよび有向エッジは、たとえば、ソースコードの制御フロー特性にしたがって定義される。すなわち、ソースコードのブロック/セグメントが、ブロック/セグメント自体の間の相互関係と区切りは、ソースコードの制御フロー特性にしたがって定義される。後述するように、グラフモジュール140は、一般に、プログラムのソースコードから制御フロー特性を識別し、システム100内に定義されたグラフポリシーにしたがって識別することができる。
図4および図5は、ソースコードの異なるセグメントに対応する制御フローグラフ400、500のさらなる例を示す。たとえば、図4に示されるように、グラフ400は、対応する有向エッジによって示されるように、if-then-elseステートメント(文)を介して別々のパスと相関するソースコードの別々のセグメントに対応する4つの別々のノード410、420、430、440を含む。図5は、関連するブロック/関数内のコードのセグメントを表すノード510、520、530、540を含むグラフ500を示す。グラフ500は、出口ノード540につながる別個の有向エッジによって示されているように、ふたつの別個の出口条件を含むループを表す。このように、グラフ170は、プログラムの実行フローを表すために、ソースコードの多くの異なる構成を示すことができる。さらに、提供される例は、比較的短いコードセグメントに関するものであり、一般的な傾向として、グラフ170は、複数のノードおよびその間の有向エッジを含むことを理解されたい。一例としてグラフ400、500に示されているような「出口」ノードは、様々な実施形態において、一般に、実際のプログラムの出口(Exit:終了)ではなく、別々のコードセグメントへの遷移を示す。このように、グラフ170は、視覚的な形式で付与されると、開発者によるより良い理解を容易にし、また、様々なモジュールへのプログラムフローの理解を提供することによってさらに自動化された機能を容易にすることを提供する。
図1のデータベース160に引き続き、計装ポリシー180は、後でより詳細に説明するように、計装モジュール150がソースコード内に計装を含むソースコードの様々な条件、および/または、セグメントを定義する。一般に、計装は、特定の実装に応じて異なる目的を果たすことができる。たとえば、計装は、プログラムフローの制御(たとえば、プログラムが間違った方向に進んでいないことを保証する)、デバッグ、データ引数の検証、I/Oの検証などを提供するために、関数内に統合することができる。たとえば、プログラムが、道路上で車両がどのように制御されるかを自動的に調整するために高度運転支援システム(ADAS)を制御する例では、計装は、プログラムが悪意のある攻撃によって誤った方向に導かれた場合に、乗客に事故および負傷をもたらす可能性があるプログラムフローの悪意のある操作を防止するためのセキュリティ計装を含んでもよい。
さらなる態様では、計装ポリシー180は、計装閾値、または、少なくとも計装閾値を生成するための指標(メトリクス)も定義する。ひとつのアプローチでは、計装ポリシー180は、関数の異なるクラスに対して計装閾値を定義する。たとえば、一実施形態では、計装ポリシー180は、開発者によってタグ付けされるか、または、コードセグメントに関連付けられた定義された指標にしたがって導出され得るセキュリティレベルにしたがって、関数のクラスを定義する。計装ポリシー180は、第1のクラスに対する第1の閾値、第2のクラスに対する第2の閾値、第3のクラスに対する第3の閾値などを示すことができる。一般に、セキュリティレベルのための別個のクラスおよび関連する閾値は、特定の関数の脆弱性(たとえば、操作への暴露)または他の態様に関連してもよい。計装ポリシー180は、計装の包含を最適化するために、セグメントが計装されるべきである異なる閾値を示してもよい。このように、実際には、計装モジュール150は、たとえば、コードセグメントを評価し、評価にしたがって計装を自動的に含む。
さらに、コードセグメント内に含まれる実際の計装自体は、一実施形態では、前述したグラフポリシー内のテンプレートとして定義される。たとえば、テンプレートは、プログラムフローの制御、I/Oの検証、追加の関数フックの提供などに関する様々な機能を実行する、標準化された計装のセットを定義する。さらに、ひとつのアプローチでは、テンプレートは、計装が含まれる特定のコードセグメントにしたがって、たとえば、計装モジュール150によりカスタマイズされる変数をさらに示す。すなわち、計装モジュール150は、一例では、関数のリターンアドレスを検証するための計装を含んでもよい。このように、計装モジュール150は、テンプレートをベースとして使用することによって、関連するソースコードに対応するようにテンプレートから関連する計装ステートメントの変数を修正し、関連するソースコードセグメントにセキュリティまたは他の機能を提供する。計装ポリシー180および計装モジュール150のさらなる態様については、後述する。
一実施形態では、分析モジュール130は、プロセッサ110によって実行されると、コードセグメントがソースコードに追加されるときに、プロセッサにコードセグメントを検出させるコンピュータ可読命令を含む。ひとつのアプローチでは、分析モジュール130は、アプリケーションプログラムインターフェース(API)、または、他のプログラムフックを介してIDE内部にアクセスし、IDE内の電子入力ストリームにアクセスする。電子入力ストリームは、一般に、関連するコンピューティングデバイスの他のシステムコンポーネントを介してIDEに提供される任意の電子入力を含む。たとえば、分析モジュール130は、プロセッサ110上で実行される他のプロセスからの電子入力、ネットワーク通信インターフェースを介して受信される電子通信、プロセス内(すなわち、IDE内)通信、コンピューティングデバイス(たとえば、キーボード)に接続されたマシンインターフェースデバイスからのI/O入力、ファイルシステムリソースなどを監視する。
分析モジュール130は、ひとつのアプローチでは、プログラムのソースコードへの追加、および/または、修正のために、言及された電子入力を監視する。すなわち、分析モジュール130は、新しいコードセグメント、既存のコードセグメントを修正する入力などについて、IDEへの入力のストリームを監視する。
さらに、一実施形態では、分析モジュール130は、ソースコードの制御フロー特性を識別(特定)するためにソースコードを分析する命令も含む。すなわち、ソースコード内で変更が行われると、分析モジュール130は、変更が発生しているときにリアルタイムで変更を能動的(アクティブ)に検出し、ソースコード全体に関する変更を分析して、それに関連する制御フロー特性を識別する。一実施形態では、制御フロー特性は、プログラムの手順内、および/または、手順間の制御フロー転送、たとえば、関数呼び出し、シンボリック名に沿ったリターンアドレス、関数引数および及び戻り値、呼び出し規約等を含む。より一般には、制御フロー特性は、グラフ170の形態、および/または、内容に影響を与える任意の態様に関連する。したがって、分析モジュール130は、グラフモジュール140がグラフ170を更新された形式で維持できるように、制御フロー特性を識別するために言及された監視および分析をリアルタイムで行う。
したがって、グラフモジュール140は、一実施形態では、プロセッサ110によって実行されると、プロセッサ110に、制御フロー特性にしたがって制御フローグラフ170を更新させるコンピュータ可読命令を含む。グラフモジュール140は、一般に、グラフ170を、ノードおよび有向エッジを表すためのプログラム要素を含む電子データ構造として生成することに留意されたい。最初に、グラフモジュール140は、ヌル値を含むグラフ170、または、ソースコードが開発されるときにグラフモジュール140が言及された更新を通じて構築するエントリノードのみを生成する。
このように、グラフモジュール140は、グラフ170に対して調整/修正が行われると、グラフ170をリアルタイムで更新する。したがって、グラフモジュール140は、一実施形態では、分析モジュール130が、新しいコードセグメント、修正されたコードセグメント、ソースコードの態様を修正するための命令などを含む入力I/Oからの特性を決定するときに、制御フロー特性を能動的に使用する。したがって、グラフモジュール140は、ソースコードによって定義されたプログラムのリアルタイム評価を提供するために、修正/追加が発生するとグラフ170を区分的(断片的)に作成する。
さらに、グラフモジュール140は、一実施形態では、ソースコードの調整を容易にすることによってプログラムの機能を向上するために、制御フローグラフ170を提供する命令をさらに含む。すなわち、たとえば、グラフモジュール140は、変更/追加が発生するときにリアルタイムで変更/追加を含めることにより、グラフ170を作成する。グラフ170は、プログラムが実行されるときのプログラムの可能な実行パスおよび関連する条件を表す。したがって、グラフ170は、ソースコード内の潜在的なエラー(たとえば、無限ループ、公開関数など)についての洞察を提供し、これは、様々なモジュールおよびシステムを活用してソースコードを改善し、コンパイル後のプログラムの問題(たとえば、セキュリティホール、プログラム障害など)を回避することができる。
このように、グラフモジュール140は、一実施形態では、制御フローグラフ170の視覚的表現を生成し、統合開発環境(IDE)内で視覚的表現を動的に表示することにより、グラフ170を提供する。したがって、コードセグメントが生成され、IDEに提供されると、分析モジュール130は、制御フロー特性を提供するために、ソースコード全体への影響とともにコードセグメントを識別および分析する。制御フロー特性から、グラフモジュール140は、修正の効果が開発者にリアルタイムで視覚的に示されるように、プログラムのリアルタイム表現としてグラフ170および視覚的表現を生成する。ひとつ以上の実施形態では、視覚的表現は、IDE内のウィンドウに電子的に表示され、グラフ170への修正/更新を示す識別子を含む。
したがって、一例として、図2、図3、および図4を参照して、ソースコード200が、if-then-else形式のステートメント(文)を含むように修正されていると考える。分析モジュール130は、ソースコードへの修正を検出し、修正されたコードを分析して、制御フロー特性を生成する。次に、グラフモジュール140は、制御フロー特性にしたがって、新たに追加されたステートメントためのノードおよび有向エッジを生成し、グラフ300を、たとえば、ノード325でグラフ400を含むように修正する。このように、グラフモジュール140は、視覚的表現内でこの調整をさらにレンダリングして、新しく追加されたセグメントに適応するように元のグラフを調整しながら、変化をグラフィカルに示すことができる。
さらに、別の実施形態では、グラフモジュール140は、また、システム100内のさらなるモジュール/コンポーネント、または、他のものに、グラフを提供する。たとえば、一実施形態では、制御フローシステム100は、計装モジュール150を含む。計装モジュール150は、プロセッサによって実行されると、プロセッサ(たとえば、プロセッサ110)に、制御フローグラフ170にしたがってソースコード内に計装を統合させる命令を含む。たとえば、ひとつアプローチでは、計装モジュール150は、グラフ170によって反映されるように、ソースコード内の修正に応答して、リアルタイムで、ソースコードに計装を追加する。したがって、計装モジュール150は、グラフ170の変化、ソースコード内の新しいコードセグメントの包含、既存のコードセグメントへの修正などの特定の状態を監視することができ、これらは、たとえば、IDEのAPIまたは別の適切なメカニズムを介して計装モジュール150への電子的な要求として作用する。電子要求は、一実施形態では、プログラムフローが保証される計装、および/または、計装がソースコードの特定のコードセグメントに関して別個の機能を提供する計装を含むように、計装モジュール150を誘導する。
前述したように、計装ポリシー180は、ソースコードのどの態様(たとえば、計装の場所およびタイプを識別するための指標または他の条件を介して)を計装するかを識別するための様々なメカニズムを示す。様々な態様において、計装モジュール150に含まれる計装は、プログラムの実行が制御フローグラフ170にしたがうことを保証することによって、プログラム内でランタイムチェック(実行時チェック)を実施するためのものである。したがって、計装モジュール150は、一般に、プログラムフローを実施するための計装を含める方法を知るために、グラフ170を介して伝達されるプログラムフローの知識を使用する。さらに、計装モジュール150は、さらなる態様では、データフローおよびプログラム内で計装される他の態様を理解するために、グラフ170を参照する。このようにして、計装モジュール150は、ランタイムチェックを自動的に計装することにより、プログラムのセキュリティを向上する。さらに、計装モジュール150は、一実施形態では、アドレスチェック(たとえば、データおよびプログラムフローのためのメモリアドレス)、変数/関数の戻り値の型チェック、データバインドチェック、オペコードチェック、マッチコール-リターンペア(非単一クラス)など、を実行するための計装を含む。
もちろん、計装モジュール150は、開発者が新しいコードセグメントを提供し、既存のコードセグメントを調整するように、リアルタイムでソースコード内に計装を動的に含むものとして説明されているが、計装モジュール150は、別の構成では、計装を含むように、ソースコードの完成または初期バージョンにわたって実行される。ひとつのアプローチでは、計装モジュール150は、プログラムをコンパイルする要求と並行して開始されると、自動的に計装を追加する。
いずれの構成においても、計装モジュール150は、ソースコードおよび制御フローグラフ170を分析して、ソースコード内に計装を統合する。特に、計装モジュール150は、制御フローグラフ170とソースコードとの間の相関関係にしたがって計装されるべきソースコードのセグメント、たとえば、グラフ170内の有向エッジによって識別されるソースコード内の手続き型遷移(たとえば、ジャンプ、コール、リターンなど)を識別する。さらに、計装モジュール150は、ソースコードにしたがってテンプレートの定義された計装をカスタマイズするために、定義された計装のテンプレートを修正することによって、識別(特定)されたセグメントにしたがって、計装を自動的に追加する。このようにして、定義された計装セットを、たとえば、追加された計装が要求どおりに動作することを保証するために、事前にテストして認定することができる。
さらに別の態様では、計装モジュール150は、ソースコードのタグ付け/ラベル付けされたセクションにしたがった計装を含む。すなわち、たとえば、一実施形態では、計装モジュール150は、IDE内、特に、特定のステートメント内、特定のステートメントを識別するソースコードの関数または別のセグメント、計装されるべきソースコードの一部としての関数またはセグメント、の電子入力を監視する。様々なアプローチにおいて、電子入力は、計装の基本的な必要性を示すためにソースコードの部分にタグを付け、さらに別の態様では、入力は、含まれるべき特定の計装または少なくとも計装の特性を指定する。たとえば、提供されるラベルは、制御フロー計装で計装されるべき高感度/高価値の関数を示すことができ、さらなる態様では、提供されるラベル/タグは、計装の特性を指定するものではなく、コードの一部が自動的に計装されるように計装モジュール150によって分析されるべきであることを単に示すものであってもよい。
いずれの場合でも、計装モジュール150は、電子入力にしたがってソースコードの部分にラベル/タグを付けして、後続の世代の計装にさらに知らせることができる。電子入力の元の形式は、実装に応じて変化し得るが、一般に、ソースコードの一部にタグを提供するものとして、後続の入力の特性を指定するIDEのGUI内の要素の選択を含む。たとえば、ひとつ以上の属性選択がGUI内でアクティブ化され、その後、選択されたソースコードの一部分がモジュール150によって自動的に属性でタグ付けされる。
制御フローグラフを生成し、そこからさらなる機能を提供する追加の態様が、図6に関連して説明される。図6は、リアルタイムで制御フローグラフを生成することに関する方法600を示す。方法600は、図1の制御フローシステム100の観点から説明される。方法600は、制御フローシステム100と組み合わせて説明されるが、方法600は、制御フローシステム100内で実施されることに限定されず、代わりに、方法600を実施することができるシステムの一例であることを理解されたい。
610で、分析モジュール130は、プログラムのソースコードに追加されるコードセグメントを監視し、定期的に検出する。すなわち、610で、コードセグメントを検出したか否か判断し、検出した場合に620に進む。この明細書で使用されるように、610におけるコードセグメントの追加は、一般に、新しいコードセグメントの追加、および、プログラムのソースコード内の既存のコードセグメントの修正を指すことに留意されたい。より一般には、分析モジュール130は、ソースコードへの変更をともなう入力(たとえば、コード、コマンドなど)について、コンピューティングデバイス内の統合開発環境(IDE)への電子入力ストリームを監視する。したがって、分析モジュール130は、一実施形態では、ソースコードがいつ修正(すなわち、追加または変更)されるかを識別するために、たとえば、APIを介してIDEへの入力ストリームを継続的に監視する。その結果、言及された修正を検出すると、分析モジュール130は、ブロック620で制御フロー特性を識別することに進む。
620で、分析モジュール130は、グラフ170の制御フロー特性を識別(特定)する。一実施形態では、分析モジュール130は、ソースコード内のステートメントをトラバース(走査)するために深さ優先探索を使用してソースコードを分析する。さらなる態様では、分析モジュール130は、ソースコードをトラバースし、理解され得るような特性を識別するための他の適切なアプローチを実装する。分析モジュール130がソースコードをトラバースしているとき、モジュール130は、少なくとも関数呼び出し、関数リターンアドレス、関数引数、関数戻り値、およびステートメント間の関係を制御フロー特性として識別するために、ソースコード内のステートメントを解析する。
様々な実施形態において、分析モジュール130は、610で検出されたコードセグメント/変更に関連するソースコードの影響を受けた部分を分析し、さらなる態様では、分析モジュール130は、変更に応答して制御フロー特性を識別するために、ソースコード全体を再分析する。一般に、実行されるアプローチは、ソースコードの全体的なサイズ、修正のサイズ、および分析を実行するために利用可能なリソースに関連する。したがって、一実施形態では、分析モジュール130は、示された選好にしたがって制御フロー特性を決定するために、部分的または完全なレビューを選択的に行う。分析モジュール130によって実行されるいずれのアプローチであっても、制御フロー特性は、グラフ170に表されるプログラムの手順内、および/または、手順間の制御フロー転送に関する情報を提供する。
さらに、分析モジュール130は、一実施形態では、制御フロー特性をグラフポリシーと比較することにより、ソースコードのどのステートメントが脆弱性を含むかをさらに識別する。一実施形態では、グラフポリシーは、セキュリティの脆弱性およびパフォーマンスのボトルネックを示す条件を定義する。したがって、脆弱性およびボトルネックに関する追加情報は、また、ソースコードの異なる部分の特性についてのさらなる指標を提供するために、情報がその後グラフ170と統合されるように、制御フロー特性内に含めることができる。さらに、様々なアプローチにおいて、分析モジュール130は、脆弱性およびボトルネックを識別するために、グラフポリシーによって指定されたさらなる情報を使用する。このように、グラフポリシーは、脆弱性と相関する、データフロー、データ引数、データ消失、およびプログラムフロー、に関連するプログラム内の条件をさらに指定してもよい。いずれの場合も、分析モジュール130は、グラフ170に含めるために、制御フロー特性内のプログラムフローに直接的および間接的に関連する態様を含むことができる。
630で、グラフモジュール140は、制御フローグラフ170を更新する。一実施形態では、グラフモジュール140は、グラフ170のノードおよび有向エッジを形成するために、620で識別された制御フロー特性を使用する。制御フローグラフは、一般にプログラムの実行パスを表すことを考慮し、したがって、グラフモジュール140は、制御フロー特性を使用して、グラフ170が形成される異なるコードセグメント(たとえば、ノード)間のパス(たとえば、有向エッジ)を識別する。したがって、グラフモジュール140は、コードセグメントに対応するように制御フローグラフの既存のノードおよびエッジを修正しつつ、検出されたコードセグメントに対応する制御フロー特性を追加することにより、制御フローグラフ170を更新する。すなわち、たとえば、既存の有向エッジは、追加ノードを追加しながら再ルーティングされてもよく、既存のノードは修正されてもよく、指示された条件は修正されてもよく、または新たな条件が追加されてもよい。
さらに、前述したように、グラフモジュール140は、グラフ170を更新するためにコードセグメントがソースコードに追加されるときに、リアルタイムで機能する。このように、グラフモジュール140は、プログラムの開発を容易にするためにグラフ170を直接参照することができるように、グラフ170を更新された形式で維持する。
さらに、グラフモジュール140は、また、グラフ170を先に説明したような追加の特性で更新する。すなわち、グラフモジュール140は、ノードに関連付けられたコードセグメントの脆弱性、様々なノードに関連付けられボトルネック、および他の注目すべき特性について、グラフ170にタグを付けるかまたは別の方法で、コメント(アノテーション)を提供する。したがって、グラフモジュール140は、ソースコードが書き込まれているときにグラフ170を能動的に作成するだけでなく、グラフモジュール140は、たとえば、特定の特性を強調することによって脆弱性およびボトルネックの緩和を容易にするために、対応するノードのデータ構造内のコードセグメントに関する追加情報も提供する。
640で、グラフモジュール140は、ソースコードの調整を容易にすることによってプログラムの機能を向上するために、制御フローグラフ170を提供する。前述したように、制御フローグラフ170は、プログラムの実行がどのように進行するかの表現を提供し、したがって、一般に他の方法では識別できないソースコードについての洞察を提供する。このように、様々なシステムは、ソースコードを操作するために、および/または、開発者にさらなる機能を提供するために、グラフ170を活用することができる。
640で制御フローグラフ170を提供する一態様として、グラフモジュール140は、制御フローグラフの視覚的表現を生成し、プログラムのリアルタイム表現を提供するために、コードセグメントが生成されると統合開発環境(IDE)内に視覚的表現を動的に表示する。視覚的表現は、たとえば、図3~図5のグラフと同様の方法で、ノード、有向エッジ、およびソースコードの他の記号表現を含むグラフィックとして提供される。さらに、グラフ170は、また、言及された脆弱性およびパフォーマンスのボトルネックのような、グラフ170および基礎となるソースコードの異なる属性を強調することができる様々な色で表示するように視覚的に表現することができる。このようにして、システム100は、プログラムがソースコードの開発をよりよく通知することによって、プログラムがパフォーマンスのボトルネックおよびセキュリティの脆弱性を回避することを保証することにより、最終的なプログラムの機能を向上する。前述したように、グラフ170は、また、図7に関連して次に説明するように、追加の機能を提供するためにさらなるシステム/モジュールによって利用することもできる。
図7は、プログラムのソースコードを自動的に計装することに関する方法700を示している。図6同様、方法700は、図1の制御フローシステム100の観点から説明される。方法700は、制御フローシステム100と組み合わせて説明されるが、方法700は、制御フローシステム100内で実施されることに限定されず、代わりに、方法700を実施することができるシステムの一例であることを理解されたい。
手始めに、方法700は、図6の方法600から、ブロック610、620、630を含むように示されている。したがって、上記したブロックについての説明は省略する。さらに、グラフ170は、一般に、ブロック630の電子出力として、ブロック710で方法700に提供されることを理解されたい。
710で、計装モジュール150は、ソースコードを計装する要求を監視し、検出する。すなわち、710で計装要求を取得(受信)したか否かを判断し、取得した場合に720に進む。様々な実施形態では、要求は、異なる形式をとることができる。たとえば、ひとつのアプローチでは、要求は、グラフ170が修正されるソースコードに対する修正と一致する。すなわち、ソースコードの修正に応じてグラフ170が更新されると、計装モジュール150は、また、追加されたコードセグメントまたは既存のコードセグメントに対する変更のために計装が含まれる場合、修正のためにリアルタイムでソースコードを計装するように機能する。
あるいは、計装要求は、ソースコードが完了したとき、または、さらなる態様では、ソースコードがプログラムにコンパイルされるときに、システム100によって生成される。したがって、ソースコードを計装する要求は、一実施形態では、IDE内で生成されたソースコードをコンパイルする要求に応答してシステム100によって生成され、コンパイルの前に実行される。このように、計装モジュール150は、ソースコードが修正されたとき、または、ソースコードがコンパイルされる準備ができたときに、リアルタイムでソースコードを計装するように機能する。
720で、計装モジュール150は、計装されるべきソースコードのコードセグメントを識別(特定)する。一実施形態では、計装モジュール150は、ソースコード内のセグメントに配置された既存のタグ、コードセグメントに関連付けられたグラフ170内のラベル付けされた特性、グラフ170内で表される識別された制御フロー、および/または、計装ポリシー180によって定義されたさらなる指標/特性にしたがって、コードセグメントを識別する。一般に、計装モジュール150は、実行中のプログラムの流れを確実にし、たとえば、悪意のあるリダイレクトを防ぐために、ソースコードを計装する。このように、計装モジュール150は、関数間の制御の転送、プログラムフローアドレスの調整、および他のそのようなコードセグメントに、直接的または間接的に関与しているコードセグメントを識別する。一般に、言及されたコードセグメントは、グラフ170内の有向エッジ、または、有向エッジによって具現化される転送に関連する条件に関連付けられる。
したがって、さらなる態様では、計装モジュール150は、制御フローグラフ170にしたがってソースコードを分析する。計装モジュール150は、また、ひとつ以上の実施形態では、コードセグメントが計装を含むために実装された計装ポリシー180を満たすか否かを決定するために、個々のコードセグメントを分析することができる。すなわち、重要度レベル、セキュリティレベルなどに応じた閾値等の様々な条件を識別して、関数内に計装を含めるタイミングを決定することができる。このようにして、プログラムのパフォーマンスとセキュリティを考慮し、不要な場合に計装を不必要に含めることを避けるために、計装をインテリジェントな方法で含めることができる。
いずれの場合も、ソースコード内のすべてのコードセグメント/関数が計装されるわけではないため、720でのチェックは、コードセグメントが計装されるべきか否かを評価することを含み得る。すなわち、たとえば、計装モジュール150は、コードセグメントが計装を含むか否かを判断するために、新たに追加/調整されたコードセグメントの特性を評価する。計装モジュール150が、コードセグメントが計装されるべきであると決定した場合、計装モジュール150は、ブロック730で説明されるように、計装を統合し続ける。そうでなければ、計装モジュール150は、修正されたセグメントのみが考慮されている場合、または、他のセグメント全体が考慮されていない場合に、終了してもよい。
730で、計装モジュール150は、ソースコード内に計装を統合する。前述したように、一実施形態では、計装モジュール150は、プログラムの実行が制御フローグラフ170にしたがうことを保証することによってプログラムのセキュリティを向上させるプログラム内のランタイムチェックを実行するために、制御フローグラフ170にしたがった計装を含む。すなわち、ソースコードに追加される計装は、プログラムがグラフ170によって表されるパスの外に向けられないことを保証する。
さらに、計装を統合するプロセスは、一実施形態では、計装モジュール150が、ソースコードにしたがって定義された計装のテンプレートを修正することによって、識別されたセグメントにしたがって計装を自動的に追加することを含む。前述したように、計装モジュール150は、計装が統合されているコードセグメントに適合するように、テンプレートの可変アスペクトを調整する。したがって、計装モジュール150は、特定の機能を達成するために、含まれる計装をカスタマイズする一方で、たとえば、事前に承認されており、正しく機能することが一般的に知られている計装を使用する。このようにして、計装モジュール150は、グラフ170を使用して、安全なプログラムフローを保証することにより、最終的に得られるプログラムを改善する追加機能を提供する。
図8は、計装を含むコードセグメントを自動的に識別することに関する方法800を示す。図6および図7同様、方法800は、図1の制御フローシステム100の観点から説明される。方法800は、制御フローシステム100と組み合わせて説明されるが、方法800は、制御フローシステム100内で実施されることに限定されず、代わりに、方法800を実施することができるシステムの一例であることを理解されたい。
810で、計装モジュール150は、コードセグメントにタグ付けするための電子入力の有無を判断する。すなわち、電子入力を検出したか否かを判断する。一実施形態では、計装モジュール150は、たとえば、タグ付け動作がいつ開始されたかを識別するために、IDEのGUIによって生成された電子要求を監視する。タグ付け動作は、最初に、第1の電子入力を介してIDE内の制御機能を選択し、次いで、タグ付けされるべき関数/コードセグメントを示す第2の電子入力を選択することを含み得る。第1の電子入力は、一実施形態では、タグ付けに関連するIDE内の機能をアクティブにし、第2の電子入力は、たとえば、どのセグメント/関数がタグ付けされるかを識別する。
ひとつのアプローチでは、IDE内の電子入力の組み合わせは、自動化されたソース(たとえば、IDE内で実行されるスクリプト)からのものでも、I/Oインターフェース(たとえば、HMI入力)を介して受信された電子入力によるものでもよく、電子要求を形成する。したがって、計装モジュール150は、一実施形態では、IDEによって生成される電子要求を監視する。電子要求は、計装される関数/コードセグメント、計装の特性(たとえば、制御フロー、データ検証など)などの様々な態様を示すことができる。
820で、計装モジュール150は、810で電子入力/要求を検出したことに応答して、タグ付けされるソースコードの一部を識別(特定)する。ひとつのアプローチでは、計装モジュール150は、タグ付けされるべきコードセグメントを識別する後続の選択を識別するための要求を検出すると、HMI入力を追跡する。あるいは、要求自体がコードセグメントを示すので、計装モジュール150は、コードセグメントを識別するために要求を解析する。いずれの場合も、コードセグメントは、要求の生成と識別を通じてタグ付けされる高価値のコードセグメントとして識別される。
830で、計装モジュール150は、識別されたコードセグメント(関数)に計装識別子をタグ付けする。一実施形態では、計装モジュール150は、識別されたコードセグメントが計装されることを示すコメントをソースコード内に含むことによって、識別されたコードセグメントにタグを付ける。コメントは、また、コードセグメントに関する特性、および、コードセグメントの計装方法に関する特性を含むことができる。すなわち、コメントは、識別されたセグメントが自動的に計装されることを示すとともに、計装がプログラム制御フロー保護、データ型チェックなどを提供することを指定することができる。さらに、コメントのフォーマットは、一般に、言及された情報を伝達し、その後ソースコードを計装する際にタグを容易に識別するために符号化されるひとつ以上の特定の文字シーケンス(文字列)を含むことを理解されたい。
840で、計装モジュール150は、タグ付き関数を計装する。前述したように、計装モジュール150は、コードセグメントを識別し、自動的に計装することができる。したがって、840において、計装モジュール150は、一実施形態では、方法700に関して説明したのと同様のアプローチにしたがう。しかしながら、この場合、コードセグメント/関数は、タグにしたがってすでに識別されているので、計装モジュール150は、関数を独立して識別するためにソースコードを個別に分析する必要はない。さらに、計装モジュール150は、一実施形態では、識別されたコードセグメントに含まれるタグに応答して、ブロック730とともに説明した関数を計装する。
さらに、図1の制御フローシステム100は、別個の集積回路、および/または、チップを用いて様々な構成によって構成できることが理解されるべきである。そのような実施形態では、分析モジュール130は、個別の集積回路として具現化される。さらに、グラフモジュール140は、個々の集積回路上に具現化される。さらに、計装モジュール150は、個々の集積回路上に具現化される。回路は接続パスを介して接続され、個別の回路間で信号を通信する。もちろん、別個の集積回路が論じられているが、様々な実施形態では、回路は、共通の集積回路基板に統合されてもよい。さらに、集積回路は、より少ない集積回路に組み合わせるか、またはより多くの集積回路に分割することができる。別の実施形態では、モジュール130、140、150は、別個の特定用途向け集積回路に組み合わされてもよい。さらなる実施形態では、モジュール130、140、150に関連する機能の一部は、プロセッサ110によって実行可能であり、非一時的メモリに格納されるファームウェアとして具現化されてもよい。さらなる実施形態では、モジュール130、140、150は、プロセッサ110のハードウェアコンポーネントとして統合される。
別の実施形態では、説明された方法、および/または、それらの等価物は、コンピュータ実行可能命令で実装されてもよい。したがって、一実施形態では、非一時的なコンピュータ可読媒体は、格納されたコンピュータ実行可能命令とともに構成されている。格納されたコンピュータ実行可能命令は、機械(たとえば、プロセッサ、コンピュータなど)によって実行されると、機械、および/または、関連するコンポーネントに方法を実行させる。
説明を簡単にするために、図に示されている方法論は一連のブロックとして示され説明されているが、いくつかのブロックは異なる順序で実行されることがあり、および/または、図示および説明から他のブロックと同時に実行されることがあり、方法論はブロックの順序によって制限されないことが理解されるべきである。さらに、例示されたブロックのすべてが、例示的な方法論を実装するために使用されてもよい。ブロックは、複数のコンポーネントに結合、または、分離されることがある。さらに、追加の、および/または、代替の方法論は、図示されていない追加のブロックを使用することができる。
制御フローシステム100は、ひとつ以上のプロセッサ110を含むことができる。ひとつ以上の構成では、プロセッサ110は、制御フローシステム100のメインプロセッサであり得る。たとえば、プロセッサ110は、電子制御装置(ECU)であり得る。制御フローシステム100は、ひとつ以上のタイプのデータを格納するためのひとつ以上のデータストアを含むことができる。データストアは、揮発性、および/または、不揮発性メモリを含むことができる。適切なデータストアの例には、RAM(ランダムアクセスメモリ)、フラッシュメモリ、ROM(リードオンリーメモリ)、PROM(プログラマブルリードオンリーメモリ)、EPROM(消去可能プログラマブルリードオンリーメモリ)、EEPROM(電気的消去可能プログラマブルリードオンリーメモリ)、レジスタ、磁気ディスク、光ディスク、ハードドライブ、分散メモリ、クラウドベースのメモリ、開示されたデータを格納するのに適した他の記憶媒体、またはそれらの任意の組み合わせが含まれる。データストアは、プロセッサ110のコンポーネントとすることができ、またはデータストアは、使用のためプロセッサ110に動作可能に接続することができる。この説明全体を通して使用される「動作可能に接続された」という用語は、直接的な物理的接触のない接続を含む、直接または間接の接続を含みえる。
この明細書では詳細な実施形態が開示されている。しかしながら、開示された実施形態は、例としてのみ意図されていることが理解されるべきである。したがって、この明細書に開示される特定の構造的および機能的詳細は、限定事項として解釈されるべきではなく単に請求項の基礎として、および、実質的に任意の適切な詳細な構造でこの明細書の態様を様々に使用することを当業者に教示するための代表的な基礎としてのみ解釈されるべきである。さらに、この明細書で使用される用語および語句は、限定することを意図するものではなく、可能な実装の理解可能な説明を提供することを意図している。種々の実施形態が図1~図8に示されているが、実施形態は、図示された構造または用途に限定されない。
図中のフローチャート、および、ブロック図は、様々な実施形態による、システム、方法、および、コンピュータプログラム製品の可能な実装のアーキテクチャ、機能、および、動作を示している。これに関して、フローチャート、または、ブロック図の各ブロックは、指定された論理機能を実装するためのひとつ以上の実行可能な命令を含むコードのモジュール、セグメント、または、部分を表すことができる。また、一部の代替実装では、ブロックに記載されている機能が、図に記載されている順序とは異なる順序で発生する場があることにも注意されるべきである。たとえば、連続して示されたふたつのブロックは、実際には実質的に同時実行されてもよいし、関係する機能に応じて、ブロックが逆の順序で実行されることもある。
上記のシステム、コンポーネント、および/または、プロセスは、ハードウェア、または、ハードウェアとソフトウェアの組み合わせで実現でき、ひとつの処理システムで集中方式によって、または、複数の相互接続された処理システムに異なる要素が分散している分散方式によって実現することができる。この明細書に記載の方法を実行するように適合されたあらゆる種類の処理システム、または、別の装置が適している。ハードウェアとソフトウェアの組み合わせは、コンピュータで使用可能なプログラムコードを備えた処理システムであり、読み込まれて実行されると、ここで説明する方法を実行するように処理システムを制御する。システム、コンポーネント、および/または、処理は、たとえば、機械によって読み取り可能であって、ここに記述された処理、および、方法を実行するために機械によって実行可能な指令のプログラムに実体的に実装された、コンピュータプログラム製品の記憶装置、または、他のデータプログラムの記憶装置として、コンピュータによって読み取り可能な記憶装置に埋め込むことができる。これらの要素は、この明細書に記載の方法の実施を可能にし、処理システムにロードされたときにこれらの方法を実行できるすべての機能を含むアプリケーション製品に組み込むこともできる。
さらに、この明細書で説明された構成は、たとえば記憶されるなどして、実施されるコンピュータ可読プログラムコードを有するひとつ以上のコンピュータ可読媒体に具現化されるコンピュータプログラム製品の形をとることができる。ひとつ以上のコンピュータ可読媒体の任意の組み合わせが利用されてもよい。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であり得る。「コンピュータ可読記憶媒体」という語句は、非一時的な記憶媒体を意味する。コンピュータ可読媒体は、限定されるものではないが、不揮発性媒体および揮発性媒体を含む、形態をとってもよい。不揮発性媒体には、たとえば、光ディスク、磁気ディスクなどが含まれる。揮発性媒体には、たとえば、半導体メモリ、ダイナミックメモリなどが含まれる。そのようなコンピュータ可読媒体の限定的ではない例には、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、および、その他の磁気媒体、または、ASIC、または、グラフィックス処理装置(GPU)、または、CD、および、その他の光学媒体、または、RAM、または、ROM、または、メモリチップ、または、メモリカード、または、メモリスティック、または、他の媒体を含むことができ、これらは、コンピュータ、プロセッ、または、他の電子デバイスが読み取り可能である。この明細書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、機器、またはデバイス(装置)によって、またはそれに関連して使用するためのプログラムを含むか、または、記憶することができる任意の有形の媒体であり得る。
以下の説明は、この明細書で使用される選択された用語の定義を含んでいる。定義には、用語の範囲に含まれ、様々な実装に使用できるコンポーネントの様々な例や形式が含まれている。例は、制限することを意図したものではない。用語の単数形と複数形の両方が定義内にある場合がある。
「ひとつの実施形態」、「一実施形態」、「ひとつの例」、「一例」などへの言及は、そのように説明された実施形態、または、例が、特定の特徴、構造、特性、内部特性、要素、または、制限を含み得ることを示すが、それらの実施形態、または、例が、必須のものとして、特定の特徴、構造、特性、内部特性、要素、または、制限を含むことを示すものではない。さらに、「一実施形態では」という語句の繰り返しの使用は、同じ実施形態を指す場合があるが、必ずしもそうであるとは限らない。
この明細書で使用される「モジュール」は、コンピュータ、または、電気ハードウェアコンポーネント、ファームウェア、命令を格納する非遷移的なコンピュータ可読媒体、および/または、これらのコンポーネントの組み合わせを含み、これらは、機能、または、アクションを実行するか、および/または、別のロジック、方法、および/または、システムに、機能、または、アクションを発揮させるように構成されている。モジュールは、アルゴリズムによって制御されるマイクロプロセッサ、多数の電気素子を含む論理回路(たとえば、ASIC)、アナログ回路、デジタル回路、プログラムされた論理デバイス、実行時にアルゴリズムを実行する命令を含むメモリデバイスなどを含むことができる。モジュールは、ひとつ以上の実施形態では、ひとつ以上のCMOSゲート、ゲートの組み合わせ、または他の回路構成要素を含む。複数のモジュールが説明される場合、ひとつ以上の実施形態は、複数のモジュールをひとつの物理モジュール構成要素に組み込むことを含む。同様に、単一のモジュールが説明される場合、ひとつ以上の実施形態は、複数の物理的構成要素に、単一のモジュールを分配することを含む。
さらに、この明細書で使用されるモジュールには、タスクを実行したりデータ型を実装したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。さらなる態様では、メモリは一般に、言及されたモジュールを格納する。モジュールに関連付けられたメモリは、プロセッサ、RAM、ROM、フラッシュメモリ、または、別の適切な電子記憶媒体内に埋め込まれたバッファ、または、キャッシュである場合ある。さらに別の態様では、この開示によって想定されるモジュールは、特定用途向け集積回路(ASIC)、システムオンチップ(SoC)のハードウェアコンポーネント、プログラマブルロジックアレイ(PLA)、または開示された機能を実行するための定義された構成セット(たとえば、命令)が組み込まれた別の適切なハードウェアコンポーネントとして実装される。
ひとつ以上の構成では、この明細書で説明されるひとつ以上のモジュールは、人工知能要素、または、計算知能要素、たとえば、ニューラルネットワーク、ファジーロジック、または、他の機械学習アルゴリズムを含むことができる。さらに、ひとつ以上の構成では、ひとつ以上のモジュールを、この明細書で説明する複数のモジュール間で分散させることできる。ひとつ以上の構成では、この明細書で説明されているふたつ以上のモジュールを組み合わせて単一のモジュールにすることができる。
コンピュータ可読媒体上で実施されるプログラムコードは、無線、有線、光ファイバ、ケーブル、RFなど、または、前述要素の任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して送信することができる。この構成の態様の動作を実行するためのコンピュータプログラムコードは、Java(登録商標)、Smalltalk、C++などのオブジェクト指向プログラミング言語、および、Cプログラミング言語、同様のプログラミング言語などを含む従来の手続き型プログラミング言語を含むひとつ以上のプログラミング言語の任意の組み合わせで書くことができる。プログラムコードは、完全にユーザのコンピュータにおいて、一部はユーザのコンピュータにおいて、スタンドアロンソフトウェアパッケージとして、一部はユーザのコンピュータにおいて、残る一部はリモートコンピュータにおいて、または、完全にリモートコンピュータ、または、サーバーで実行することができる。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)、または、ワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または接続は、外部コンピュータ(たとえば、インターネットサービスプロバイダを使用してインターネットを介して)に接続されてもよい。
この明細書で使用される要素の数は、ひとつ、または、ふたつ以上として定義される。この明細書で使用される「複数」という用語は、ふたつ、または、ふたつ以上として定義される。この明細書で使用される「別の」という用語は、少なくとも第2、または、それ以上として定義される。この明細書で使用される「含む」、および/または、「有する」という用語は、「備える」を意味し、すなわち、他の要素の存在を許容する用語として定義される。「・・・と・・・との少なくともひとつ」という表現は、関連付けて列挙された項目のひとつ、または、複数のありとあらゆる可能な組み合わせを指し、それらを包含するものとして解釈されるべきである。一例として、「A、B、および、Cのうちの少なくともひとつ」という語句は、Aのみ、Bのみ、Cのみ、またはそれらの任意の組み合わせ(たとえば、AB、AC、BC、または、ABC)を含む。
この明細書の態様は、その精神、または、本質的な属性から逸脱することなく、他の形態で具体化することができる。したがって、この明細書の範囲を示すために、前述の明細書ではなく、以下の特許請求の範囲を参照する必要がある。

Claims (24)

  1. プログラムの機能を向上するための制御フローシステムであって、
    ひとつ以上のプロセッサ(110)と、
    ひとつ以上の前記プロセッサに通信可能に結合されたメモリ(120)と、を備え、
    前記メモリは、分析モジュール(130)と、グラフモジュール(140)と、を格納しており、
    前記分析モジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別させる命令を含み、
    前記グラフモジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新させる命令を含み、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記グラフモジュールは、前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供する命令をさらに含み、
    前記グラフモジュールは、前記制御フローグラフを提供する命令として、前記制御フローグラフの視覚的表現を生成し、前記コードセグメントが前記制御フローグラフを介して前記プログラムのリアルタイム表現を提供するように生成されるときに、統合開発環境(IDE)内で前記視覚的表現を動的に表示する命令を含み、
    前記グラフモジュールは、前記制御フローグラフを更新する命令として、前記コードセグメントに対応するように前記制御フローグラフの既存のノードおよびエッジを修正しながら、前記コードセグメントに対応する前記制御フロー特性を前記制御フローグラフに追加する命令を含む、制御フローシステム。
  2. プログラムの機能を向上するための制御フローシステムであって、
    ひとつ以上のプロセッサ(110)と、
    ひとつ以上の前記プロセッサに通信可能に結合されたメモリ(120)と、を備え、
    前記メモリは、分析モジュール(130)と、グラフモジュール(140)と、を格納しており、
    前記分析モジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別させる命令を含み、
    前記グラフモジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新させる命令を含み、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記グラフモジュールは、前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供する命令をさらに含み、
    前記グラフモジュールは、前記制御フローグラフを提供する命令として、前記プログラムがセキュリティの脆弱性を回避することを保証することでプログラムの機能を向上するために、前記ソースコードが開発される際にリアルタイムで前記制御フローグラフを提供する命令を含む、制御フローシステム。
  3. 前記分析モジュールは、前記コードセグメントを検出する命令として、前記コードセグメントを構成するステートメントについて、コンピューティングデバイス内の統合開発環境(IDE)への電子入力ストリームを監視することを含み、前記コードセグメントは前記ソースコードの一部を形成する、請求項に記載の制御フローシステム。
  4. プログラムの機能を向上するための制御フローシステムであって、
    ひとつ以上のプロセッサ(110)と、
    ひとつ以上の前記プロセッサに通信可能に結合されたメモリ(120)と、を備え、
    前記メモリは、分析モジュール(130)と、グラフモジュール(140)と、を格納しており、
    前記分析モジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別させる命令を含み、
    前記グラフモジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新させる命令を含み、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記グラフモジュールは、前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供する命令をさらに含み、
    前記分析モジュールは、前記ソースコードの前記制御フロー特性を識別する命令として、前記制御フロー特性を、セキュリティ脆弱性を示す条件を定義するグラフポリシーと比較することによって、前記ソースコードのどのステートメントに脆弱性が含まれているかを判断することを含み、
    前記グラフポリシーは、前記脆弱性と相関するデータフロー、データ引数、データ消失、および、プログラムフローに関連する前記プログラム内の条件を指定する、制御フローシステム。
  5. 前記グラフモジュールは、前記制御フローグラフを更新する命令として、前記脆弱性の軽減を容易にするために、前記脆弱性を含む前記ステートメントにタグを付ける命令を含む、請求項に記載の制御フローシステム。
  6. プログラムの機能を向上するための制御フローシステムであって、
    ひとつ以上のプロセッサ(110)と、
    ひとつ以上の前記プロセッサに通信可能に結合されたメモリ(120)と、を備え、
    前記メモリは、分析モジュール(130)と、グラフモジュール(140)と、を格納しており、
    前記分析モジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別させる命令を含み、
    前記グラフモジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新させる命令を含み、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記グラフモジュールは、前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供する命令をさらに含み、
    ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記プログラムを計装する要求に応答して、前記プログラムの実行が前記制御フローグラフにしたがうことを保証することにより、前記プログラムのセキュリティを向上する前記プログラム内のランタイムチェックを実施するために、前記制御フローグラフにしたがって前記ソースコード内に計装を統合させる命令を含む計装モジュール(150)をさらに備える、制御フローシステム。
  7. 前記計装モジュールは、前記ソースコード内に計装を統合する命令として、i)前記制御フローグラフと前記ソースコードとの間の相関関係にしたがって計装される前記ソースコードのセグメントを識別する命令と、ii)前記ソースコードにしたがって定義された計装のテンプレートを修正することによって、前記識別されたセグメントにしたがって前記計装を自動的に追加する命令と、を含む請求項に記載の制御フローシステム。
  8. 前記要求は、統合開発環境(IDE)を介して生成され、前記プログラムのコンパイル要求と並行して開始される電子要求である、請求項6又は7に記載の制御フローシステム。
  9. 前記計装モジュールは、前記ソースコード内の関数を識別する電子入力の検出に応答して、前記関数に、前記関数が自動的に計装されることを指定する計装識別子をタグ付けする命令を含む、請求項6乃至8のいずれか1項に記載の制御フローシステム。
  10. 前記分析モジュールは、前記制御フロー特性を識別させる命令として、前記ソースコード内のステートメントを走査し、少なくとも関数呼び出し、関数リターンアドレス、関数引数、関数戻り値、および前記ステートメント間の関係を前記制御フロー特性として識別するために、深さ優先探索を使用して前記ソースコードを分析する命令を含み、
    前記制御フローグラフは、前記プログラムの制御フローの転送手順を表す、請求項1乃至10のいずれか1項に記載の制御フローシステム。
  11. プログラムの機能を向上するための命令を格納する非一時的コンピュータ可読媒体であって、
    前記命令は、ひとつ以上のプロセッサ(110)によって実行されると、ひとつ以上の前記プロセッサに、
    前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別させ、
    前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新させ、
    前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供させ、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記制御フローグラフを提供する命令は、前記制御フローグラフの視覚的表現を生成し、前記コードセグメントが前記制御フローグラフを介して前記プログラムのリアルタイム表現を提供するように生成されるときに、統合開発環境(IDE)内で前記視覚的表現を動的に表示する命令を含み、
    前記制御フローグラフを更新する命令は、前記コードセグメントに対応するように前記制御フローグラフの既存のノードおよびエッジを修正しながら、前記コードセグメントに対応する前記制御フロー特性を前記制御フローグラフに追加する命令を含む、非一時的コンピュータ可読媒体。
  12. プログラムの機能を向上するための命令を格納する非一時的コンピュータ可読媒体であって、
    前記命令は、ひとつ以上のプロセッサ(110)によって実行されると、ひとつ以上の前記プロセッサに、
    前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別させ、
    前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新させ、
    前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供させ、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記命令は、前記プログラムを計装する要求に応答して、前記プログラムの実行が前記制御フローグラフにしたがうことを保証することにより、前記プログラムのセキュリティを向上する前記プログラム内のランタイムチェックを実施するために、前記制御フローグラフにしたがって前記ソースコード内に計装を統合する命令をさらに含む、非一時的コンピュータ可読媒体。
  13. 前記制御フロー特性を識別させる命令は、前記ソースコード内のステートメントを走査し、少なくとも関数呼び出し、関数リターンアドレス、関数引数、関数戻り値、および、前記ステートメント間の関係を前記制御フロー特性として識別するために、深さ優先探索を使用して前記ソースコードを分析する命令を含み、
    前記制御フローグラフは、前記プログラムの制御フローの転送手順を表す、請求項11又は12に記載の非一時的コンピュータ可読媒体。
  14. プログラムの機能を向上する方法であって、
    ひとつ以上のプロセッサ(110)が、前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別すること、
    ひとつ以上の前記プロセッサが、前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新すること、
    ひとつ以上の前記プロセッサが、前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供すること、を含み、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記制御フローグラフを提供することは、前記制御フローグラフの視覚的表現を生成し、前記コードセグメントが前記制御フローグラフを介して前記プログラムのリアルタイム表現を提供するように生成されるときに、統合開発環境(IDE)内で前記視覚的表現を動的に表示することを含み、
    前記制御フローグラフを更新することは、前記コードセグメントに対応するように前記制御フローグラフの既存のノードおよびエッジを修正しながら、前記コードセグメントに対応する前記制御フロー特性を前記制御フローグラフに追加することを含む、方法。
  15. プログラムの機能を向上する方法であって、
    ひとつ以上のプロセッサ(110)が、前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別すること、
    ひとつ以上の前記プロセッサが、前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新すること、
    ひとつ以上の前記プロセッサが、前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供すること、を含み、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記制御フローグラフを提供することは、前記プログラムがセキュリティの脆弱性を確実に回避することを保証することで前記プログラムの機能性を向上するために、前記ソースコードが開発される際にリアルタイムで前記制御フローグラフを提供することを含む、方法。
  16. プログラムの機能を向上する方法であって、
    ひとつ以上のプロセッサ(110)が、前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別すること、
    ひとつ以上の前記プロセッサが、前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新すること、
    ひとつ以上の前記プロセッサが、前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供すること、を含み、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記ソースコードの前記制御フロー特性を識別することは、前記制御フロー特性を、セキュリティ脆弱性を示す条件を定義するグラフポリシーと比較することによって、前記ソースコードのどのステートメントに脆弱性が含まれているかを判断することを含み、
    前記グラフポリシーは、前記脆弱性と相関するデータフロー、データ引数、データ消失、および、プログラムフローに関連する前記プログラム内の条件を指定する、方法。
  17. プログラムの機能を向上する方法であって、
    ひとつ以上のプロセッサ(110)が、前記プログラムのソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別すること、
    ひとつ以上の前記プロセッサが、前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新すること、
    ひとつ以上の前記プロセッサが、前記ソースコードの調整を容易にすることによって前記プログラムの機能を向上するために、前記制御フローグラフを提供すること、を含み、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記プログラムを計装する要求に応答して、前記プログラムの実行が前記制御フローグラフにしたがうことを保証することにより、前記プログラムのセキュリティを向上する前記プログラム内のランタイムチェックを実施するために、前記制御フローグラフにしたがって前記ソースコード内に計装を統合することをさらに含む、方法。
  18. 前記ソースコード内に計装を統合することは、i)前記制御フローグラフと前記ソースコードとの間の相関関係にしたがって計装される前記ソースコードのセグメントを識別することと、ii)前記ソースコードにしたがって定義された計装のテンプレートを修正することによって、前記識別されたセグメントにしたがって前記計装を自動的に追加すること、を含む、請求項17に記載の方法。
  19. 前記ソースコード内の関数を識別する電子入力の検出に応答して、前記関数に、前記関数が自動的に計装されることを指定する計装識別子をタグ付けすることをさらに含む、請求項17又は18に記載の方法。
  20. 前記制御フロー特性を識別することは、前記ソースコード内のステートメントを走査し、少なくとも関数呼び出し、関数リターンアドレス、関数引数、関数戻り値、および、前記ステートメント間の関係を前記制御フロー特性として識別するために、深さ優先探索を使用して前記ソースコードを分析することを含み、
    前記制御フローグラフは、前記プログラムの制御フローの転送手順を表す、請求項14乃至19のいずれか1項に記載の方法。
  21. 1つ以上のプロセッサ(110)に、
    ソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別する機能と、
    前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新する機能と、
    前記ソースコードの調整を容易にするために、前記制御フローグラフを提供する機能と、を実現させるプログラムであって、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記制御フローグラフを提供する機能は、前記制御フローグラフの視覚的表現を生成し、前記コードセグメントが前記制御フローグラフを介して前記プログラムのリアルタイム表現を提供するように生成されるときに、統合開発環境(IDE)内で前記視覚的表現を動的に表示する機能を含み、
    前記制御フローグラフを更新する機能は、前記コードセグメントに対応するように前記制御フローグラフの既存のノードおよびエッジを修正しながら、前記コードセグメントに対応する前記制御フロー特性を前記制御フローグラフに追加する機能を含む、プログラム。
  22. ひとつ以上のプロセッサ(110)に、
    ソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別する機能と、
    前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新する機能と、
    前記ソースコードの調整を容易にするために、前記制御フローグラフを提供する機能と、を実現させるプログラムであって、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記制御フローグラフを提供する機能は、前記プログラムがセキュリティの脆弱性を回避することを保証することで前記プログラムの機能を向上するために、前記ソースコードが開発される際にリアルタイムで前記制御フローグラフを提供する機能を含む、プログラム。
  23. 1つ以上のプロセッサ(110)に、
    ソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別する機能と、
    前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新する機能と、
    前記ソースコードの調整を容易にするために、前記制御フローグラフを提供する機能と、を実現させるプログラムであって、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記ソースコードの前記制御フロー特性を識別する機能は、前記制御フロー特性を、セキュリティ脆弱性を示す条件を定義するグラフポリシーと比較することによって、前記ソースコードのどのステートメントに脆弱性が含まれているかを判断する機能を含み、
    前記グラフポリシーは、前記脆弱性と相関するデータフロー、データ引数、データ消失、および、プログラムフローに関連する前記プログラム内の条件を指定する、プログラム。
  24. 1つ以上のプロセッサ(110)に、
    ソースコードに追加されたコードセグメントの検出に応答して、前記コードセグメントを含む前記ソースコードの制御フロー特性を識別する機能と、
    前記制御フロー特性にしたがって前記ソースコードの制御フローグラフを更新する機能と、
    前記ソースコードの調整を容易にするために、前記制御フローグラフを提供する機能と、を実現させるプログラムであって、
    前記制御フローグラフは、前記ソースコードのブロックを表すノードと、前記ブロック間の遷移を表す前記ノード間の有向エッジとで構成される前記プログラムの実行パスを表し、
    前記プログラムを計装する要求に応答して、前記プログラムの実行が前記制御フローグラフにしたがうことを保証することにより、前記プログラムのセキュリティを向上する前記プログラム内のランタイムチェックを実施するために、前記制御フローグラフにしたがって前記ソースコード内に計装を統合させる機能さらに備える、プログラム。
JP2021506000A 2018-10-18 2019-10-18 プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法 Active JP7218793B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/163,916 2018-10-18
US16/163,916 US10628286B1 (en) 2018-10-18 2018-10-18 Systems and methods for dynamically identifying program control flow and instrumenting source code
PCT/JP2019/041069 WO2020080513A1 (en) 2018-10-18 2019-10-18 Systems and methods for dynamically identifying program control flow and instrumenting source code

Publications (2)

Publication Number Publication Date
JP2021533485A JP2021533485A (ja) 2021-12-02
JP7218793B2 true JP7218793B2 (ja) 2023-02-07

Family

ID=68426773

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021506000A Active JP7218793B2 (ja) 2018-10-18 2019-10-18 プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法

Country Status (3)

Country Link
US (1) US10628286B1 (ja)
JP (1) JP7218793B2 (ja)
WO (1) WO2020080513A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10896253B2 (en) * 2017-02-06 2021-01-19 Huawei Technologies Co., Ltd. Processor trace-based enforcement of control flow integrity of a computer system
WO2020061586A1 (en) * 2018-09-22 2020-03-26 Manhattan Engineering Incorporated Code completion
WO2021100122A1 (ja) * 2019-11-19 2021-05-27 三菱電機株式会社 設計支援システムおよび設計支援プログラム
US11650904B2 (en) * 2019-12-23 2023-05-16 Intrinsic Innovation Llc Analysis of real-time software
US11440190B1 (en) * 2020-02-26 2022-09-13 Trend Micro Incorporated Detecting unsecure data flow in automation task programs
EP3872663B1 (en) * 2020-02-28 2024-05-08 BlackBerry Limited Method and device for symbolic analysis of a software program
US11175897B1 (en) * 2020-05-13 2021-11-16 Microsoft Technology Licensing, Llc. Language interoperability to automate code analysis

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130055209A1 (en) 2011-08-26 2013-02-28 Fujitsu Limited Constructing a Control Flow Graph for Javascript Software

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11110198A (ja) * 1997-10-02 1999-04-23 Fujitsu Ltd モジュール構成図自動生成装置および記録媒体
US6487713B1 (en) 1999-09-24 2002-11-26 Phoenix Technologies Ltd. Software development system that presents a logical view of project components, facilitates their selection, and signals missing links prior to compilation
US6668372B1 (en) 1999-10-13 2003-12-23 Intel Corporation Software profiling method and apparatus
US8302072B2 (en) 2000-06-05 2012-10-30 National Instruments Corporation System and method for programmatically generating a graphical program based on a sequence of motion control, machine vision, and data acquisition (DAQ) operations
US7917863B2 (en) 2000-06-13 2011-03-29 National Instruments Corporation System and method for graphically creating a sequence of motion control operations
JP2002073333A (ja) 2000-08-25 2002-03-12 Hitachi Ltd 手続き呼び出し先のデータ依存の解析表示方法
US20030182414A1 (en) 2003-05-13 2003-09-25 O'neill Patrick J. System and method for updating and distributing information
US7110936B2 (en) 2001-02-23 2006-09-19 Complementsoft Llc System and method for generating and maintaining software code
US7418734B2 (en) 2003-04-18 2008-08-26 Ounce Labs, Inc. Method and system for detecting privilege escalation vulnerabilities in source code
JP2004341671A (ja) 2003-05-14 2004-12-02 Internatl Business Mach Corp <Ibm> 情報処理システム、制御方法、制御プログラム、及び記録媒体
US20050015752A1 (en) 2003-07-15 2005-01-20 International Business Machines Corporation Static analysis based error reduction for software applications
US7207038B2 (en) * 2003-08-29 2007-04-17 Nokia Corporation Constructing control flows graphs of binary executable programs at post-link time
JP4789933B2 (ja) 2004-06-04 2011-10-12 フォーティファイ ソフトウェア, エルエルシー セキュアーソフトウェアを開発し、テストし、監視するための装置および方法
US7603715B2 (en) 2004-07-21 2009-10-13 Microsoft Corporation Containment of worms
US7337291B2 (en) 2005-01-14 2008-02-26 Microsoft Corporation Software memory access control
US7577992B2 (en) 2005-01-14 2009-08-18 Microsoft Corporation Software security based on control flow integrity
EP1870829B1 (en) 2006-06-23 2014-12-03 Microsoft Corporation Securing software by enforcing data flow integrity
US8136091B2 (en) 2007-01-31 2012-03-13 Microsoft Corporation Architectural support for software-based protection
WO2008120367A1 (ja) 2007-03-29 2008-10-09 Fujitsu Limited 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
US8826255B1 (en) 2007-06-18 2014-09-02 The Mathworks, Inc. Restructuring control flow graphs generated from a model
US8387000B2 (en) 2007-07-12 2013-02-26 The Mathworks, Inc. Continuous time mode-driven simulations in a graphical modeling environment
US8356289B2 (en) * 2008-03-26 2013-01-15 Avaya Inc. Efficient encoding of instrumented data in real-time concurrent systems
US8434064B2 (en) 2008-03-28 2013-04-30 Microsoft Corporation Detecting memory errors using write integrity testing
EP2141587A1 (en) 2008-06-27 2010-01-06 Siemens Aktiengesellschaft Method and system for generating of a control flow graph for representing a program code
US8645923B1 (en) 2008-10-31 2014-02-04 Symantec Corporation Enforcing expected control flow in program execution
US8863105B2 (en) 2008-11-28 2014-10-14 Siemens Aktiengesellschaft Automatic control system and method for executing control program in parallel
US20100192026A1 (en) 2009-01-27 2010-07-29 Microsoft Corporation Implementations of program runtime checks
US8239824B2 (en) 2009-05-18 2012-08-07 National Instruments Corporation Developing a graphical data flow program with multiple models of computation in a web browser
US8510709B2 (en) 2009-06-01 2013-08-13 National Instruments Corporation Graphical indicator which specifies parallelization of iterative program code in a graphical data flow program
US9081928B2 (en) 2009-06-02 2015-07-14 Vector Fabrics, B.V. Embedded system development
US10698923B2 (en) 2009-06-11 2020-06-30 Talari Networks, Inc. Methods and apparatus for providing adaptive private network database schema migration and management processes
US8458798B2 (en) 2010-03-19 2013-06-04 Aspect Security Inc. Detection of vulnerabilities in computer systems
EP2561441A1 (en) 2010-04-23 2013-02-27 Vector Fabrics B.V. Improved embedded system performance
US8479188B2 (en) 2010-07-08 2013-07-02 Microsoft Corporation Binary code change vulnerability prioritization
US8683449B2 (en) 2010-10-28 2014-03-25 Juniper Networks, Inc. Automated parallel software code impact analysis
US8793665B2 (en) 2011-08-26 2014-07-29 Fujitsu Limited Performing taint analysis for javascript software using a control flow graph
US8875109B2 (en) 2011-08-26 2014-10-28 Fujitsu Limited Tracking variables in javascript software using a control flow graph
US20130055221A1 (en) 2011-08-26 2013-02-28 Fujitsu Limited Detecting Errors in Javascript Software Using a Control Flow Graph
US8914262B2 (en) 2011-11-08 2014-12-16 The Mathworks, Inc. Visualization of data dependency in graphical models
US11003464B2 (en) 2012-04-19 2021-05-11 Microsoft Technology Licensing, Llc Control flow integrity enforcement at scale
US20120324454A1 (en) 2012-05-04 2012-12-20 Concurix Corporation Control Flow Graph Driven Operating System
US9846717B2 (en) * 2012-10-23 2017-12-19 Galois, Inc. Software security via control flow integrity checking
US9471461B2 (en) 2013-03-27 2016-10-18 Nec Corporation Guarding a monitoring scope and interpreting partial control flow context
US9501382B2 (en) 2013-06-25 2016-11-22 Purdue Research Foundation Systems and methods of detecting power bugs
CN104252408B (zh) * 2013-06-26 2017-04-12 国际商业机器公司 提供测试用例的方法和装置
EP3049917A1 (en) * 2013-09-27 2016-08-03 Hewlett Packard Enterprise Development LP Application control flow models
US9189375B1 (en) 2013-12-31 2015-11-17 Google Inc. Dynamic sandboxing
US9390260B2 (en) 2014-06-09 2016-07-12 Lehigh University Methods for enforcing control flow of a computer program
EP2958044B1 (en) 2014-06-20 2019-09-18 Secure-IC SAS A computer implemented method and a system for controlling dynamically the execution of a code
US9678855B2 (en) * 2014-12-30 2017-06-13 International Business Machines Corporation Managing assertions while compiling and debugging source code
US9892021B2 (en) * 2015-03-18 2018-02-13 Sap Se Injection of code modifications in a two session debug scripting environment
US9965280B2 (en) 2015-09-25 2018-05-08 Intel Corporation Instruction and logic for processor trace information for control flow integrity
US9823912B2 (en) * 2015-10-15 2017-11-21 Semmle Limited Data flow analysis with collapsed contexts
US10437998B2 (en) 2015-10-26 2019-10-08 Mcafee, Llc Hardware heuristic-driven binary translation-based execution analysis for return-oriented programming malware detection
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
US10509634B2 (en) 2016-03-30 2019-12-17 International Business Machines Corporation Data flow analysis for dynamic application, skipping views

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130055209A1 (en) 2011-08-26 2013-02-28 Fujitsu Limited Constructing a Control Flow Graph for Javascript Software

Also Published As

Publication number Publication date
US10628286B1 (en) 2020-04-21
US20200125478A1 (en) 2020-04-23
WO2020080513A1 (en) 2020-04-23
JP2021533485A (ja) 2021-12-02

Similar Documents

Publication Publication Date Title
JP7201078B2 (ja) データ引数を動的に識別し、ソースコードを計装するためのシステムと方法
JP7218793B2 (ja) プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法
JP7164017B2 (ja) フォールトツリー分析を使用して機能安全のため制御フローグラフを最適化するシステム及び方法
US10853060B2 (en) Software refactoring systems and methods
US11567759B1 (en) Generating source code from binary files
Gosain et al. Static analysis: A survey of techniques and tools
US20120304153A1 (en) Context-sensitive analysis framework using value flows
US8726255B2 (en) Recompiling with generic to specific replacement
US8893102B2 (en) Method and system for performing backward-driven path-sensitive dataflow analysis
US20160357519A1 (en) Natural Language Engine for Coding and Debugging
US11579856B2 (en) Multi-chip compatible compiling method and device
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
US10545850B1 (en) System and methods for parallel execution and comparison of related processes for fault protection
WO2018161509A1 (zh) 条件编译预处理方法、终端及存储介质
US20210405980A1 (en) Long method autofix engine
US20190205239A1 (en) Code update based on detection of change in runtime code during debugging
CN108984416A (zh) 一种评估Maven环境中依赖冲突危险级别的方法
KR20150130298A (ko) 컨트랙트에 대한 운영 체제 지원 기법
US10915302B2 (en) Identification and visualization of associations among code generated from a model and sources that affect code generation
Aho et al. Automated extraction of GUI models for testing
US11442845B2 (en) Systems and methods for automatic test generation
EP3872663B1 (en) Method and device for symbolic analysis of a software program
US20230267066A1 (en) Software anomaly detection
Panda et al. Hierarchical regression test case selection using slicing
Troost A testing tool visualizing and ensuring data-flow coverage

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210203

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220215

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220413

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220712

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220905

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230109

R151 Written notification of patent or utility model registration

Ref document number: 7218793

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151