(57)【要約】      （修正有）【課題】ソフトウェアアプリケーションにおけるエントリーポイントを特定および検証する。【解決手段】方法は、プロセッサーを用いて、ソフトウェアアプリケーション用の入力データを処理する工程を含む。該処理する工程は、ソフトウェアアプリケーション用のコールグラフを生成する工程と、コールグラフのそれぞれ用のルートパラメーターを特定する工程と、ルートパラメーターを、第１のエントリーポイントのセットとして設定する工程と、第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、第１のエントリーポイントのセットをフィルタリングする工程と、を含む。前記方法は、プロセッサーを用いて、第２のエントリーポイントのセットを、それぞれのコールグラフと共に表示する工程をさらに含む。【選択図】図１
2014089705.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するコンピューター実行可能な方法であって、
プロセッサーを用いて、前記ソフトウェアアプリケーション用の入力データを処理する工程を含み、前記処理する工程は、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成する工程と、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定する工程と、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定する工程と、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする工程と、を含み、
前記コンピューター実行可能な方法は、前記プロセッサーを用いて、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示する工程をさらに含むこと特徴とする方法。
【請求項２】
前記入力データは、前記ソフトウェアアプリケーションのソースコードと、前記第１のコール長値とを含む請求項１に記載の方法。
【請求項３】
前記ルートパラメーターは、前記１つ以上のコールグラフ中の呼び出されない関数である請求項１に記載の方法。
【請求項４】
前記コールグラフは、コール階層の形式である請求項１に記載の方法。
【請求項５】
前記第１のコール長値は、前記コールグラフの前記ルートパラメーターにリンクされた関数呼び出しの数を意味する請求項１に記載の方法。
【請求項６】
前記第１のエントリーポイントのセットをフィルタリングする工程は、
前記第１のエントリーポイントのセットのそれぞれ用の第２のコール長値を決定するため、前記第１のエントリーポイントのセットにリンクされた関数呼び出しの数を特定する工程と、
前記第１のコール長値と、前記第２のコール長値とを比較する工程と、を含む請求項１に記載の方法。
【請求項７】
ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するためのシステムであって、
機械実行可能な命令を保存するメモリーと、
プロセッサーと、
表示モジュールと、を含み、
前記プロセッサーは、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成し、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定し、
前記１つ以上のルートパラメーターを第１のエントリーポイントのセットとして設定し、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする前記命令を実行するよう構成され、
前記表示モジュールは、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示するよう構成されていることを特徴とするシステム。
【請求項８】
前記入力データは、前記ソフトウェアアプリケーションのソースコードと、前記第１のコール長値とを含む請求項７に記載のシステム。
【請求項９】
前記ルートパラメーターは、前記１つ以上のコールグラフ中の呼び出されない関数である請求項７に記載のシステム。
【請求項１０】
前記表示モジュールは、コール階層の形式の前記コールグラフを表示するようさらに構成されている請求項７に記載のシステム。
【請求項１１】
前記プロセッサーは、
前記第１のエントリーポイントのセットのそれぞれ用の第２のコール長値を決定するため、前記第１のエントリーポイントのセットにリンクされた関数呼び出しの数を特定し、
前記第１のコール長値と、前記第２のコール長値とを比較することによって、前記第１のエントリーポイントのセットをフィルタリングするようさらに構成されている請求項７に記載のシステム。
【請求項１２】
前記第１のコール長値は、前記コールグラフの前記ルートパラメーターにリンクされた関数呼び出しの数を意味する請求項７に記載のシステム。
【請求項１３】
ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するための方法をコンピューターに実行させるための命令を保存する非一時的コンピューター読み取り可能保存媒体であって、
前記方法は、
前記ソフトウェアアプリケーション用の入力データを処理する工程を含み、前記処理する工程は、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成する工程と、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定する工程と、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定する工程と、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする工程と、を含み、
前記方法は、前記プロセッサーを用いて、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示する工程をさらに含むことを特徴とする非一時的コンピューター読み取り可能保存媒体。
【請求項１４】
前記入力データは、前記ソフトウェアアプリケーションのソースコードと、前記第１のコール長値とを含む請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【請求項１５】
前記ルートパラメーターは、前記１つ以上のコールグラフ中の呼び出されない関数である請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【請求項１６】
前記コールグラフは、コール階層の形式である請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【請求項１７】
前記第１のコール長値は、前記コールグラフの前記ルートパラメーターにリンクされた関数呼び出しの数を意味する請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【請求項１８】
前記第１のエントリーポイントのセットをフィルタリングする工程は、
前記第１のエントリーポイントのセットのそれぞれ用の第２のコール長値を決定するため、前記第１のエントリーポイントのセットにリンクされた関数呼び出しの数を特定する工程と、
前記第１のコール長値と、前記第２のコール長値とを比較する工程と、を含む請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアアプリケーションのコード解析一般に関する。より具体的に、本発明は、ソフトウェアアプリケーションにおける設定可能なエントリーポイントの特定および検証技術に関する。
【背景技術】
【０００２】
ソフトウェアアプリケーションは、複数の言語を用いて記述可能である。その上、アプリケーションプログラムを作成（記述）する全てのプログラマーは、自分独自のプログラムオブジェクトの記述方法および実行方法を有している。これら言語のそれぞれは、複数のＡＰＩ（Application Programing Interface）および指令文（directives）を利用可能である。また、非常に大量のソースコードのメンテナンスまたはアップグレードがしばしば要求される。製品システムのコードをデプロイ（deploy）する前、または、ソースコードの実装に取りかかる前に、コードにアクセスし、アプリケーションソースコードのエントリーポイント（entry points：プログラミングにおける入口点）を理解することが必要不可欠である。また、安全性の観点から、コードをレビューすることも重要である。
【０００３】
アプリケーションソースコードにおけるエントリーポイントは、インターフェースまたはソフトウェアアプリケーションの関数を実行するのに有用なエントリー関数である。アプリケーションには、複数のエントリーポイントが存在する。これらエントリーポイントは、順番に、または同時に呼び出されることができる。エントリーポイントは、アプリケーションの関数を正確に解析し、アプリケーションの不正利用（application exposure）を確認するために必要とされる。エントリーポイントの特定（identifying）は、アプリケーション用の均一なエントリー基準および出口（exit）基準を提供するのに有用である。
【０００４】
ソフトウェアアプリケーションの安全性評価の際には、エントリーポイントの特定が必要不可欠である。エントリーポイントは、アプリケーションに対する情報を提供し、それにより、データベース、サーバー、処理エンジンその他アプリケーションのコンポーネント（構成要素）を見つけ出すことができる。もし、これらエントリーポイントの安全性が確保されていなければ、アプリケーションの脆弱性となってしまう可能性がある。
【０００５】
アプリケーションのエントリーポイントを特定するためには、アプリケーションの情報（知識）を得ることが必要不可欠である。熟練した知識豊富な人がいない場合や（アプリケーションに関する情報が記載された）書類が無い場合、これらエントリーポイントを見つけ出すことは困難であり、また、多大な時間を要する工程となる。さらに、人手による検査（manual inspection）でのエントリーポイントの特定は、多大な時間を要する工程であって、また、不正確な結果を得てしまう。加えて、もし、エントリーポイントの特定を呼び出されない関数（uncalled function）を見つけ出すことによって実行すると、再度の検証が必要な膨大な関数リストが出来てしまうこととなる。呼び出されない関数の検証は、非常に多くの時間を要するだけでなく、退屈な工程であり、多くの場合、各関数を詳しく調べ、必要とされるエントリーポイントを抽出しなければならない。また、エントリーポイントの特定が完了したか否かを検証するために有用な技術が利用できない場合がある。
【０００６】
したがって、最小限のアプリケーションに対する知識で、または、書類が欠如していても、ユーザーによるソフトウェア用エントリーポイントの特定を補助することのできるシステムおよび方法が必要とされている。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するコンピューター実行可能な方法を提供することにある。前記方法は、プロセッサーを用いて、前記ソフトウェアアプリケーション用の入力データを処理する工程を含む。前記処理する工程は、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成する工程と、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定する工程と、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定する工程と、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする工程と、を含む。
前記方法は、前記プロセッサーを用いて、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示する工程をさらに含む。
【０００８】
本発明のさらなる目的は、ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するためのシステムを提供することにある。該システムは、機械実行可能な（machine-executable）命令を保存するメモリーと、前記命令を実行するよう構成されたプロセッサーとを含む。前記プロセッサーは、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成し、
前記１つ以上のコールグラフ用のルートパラメーターを特定し、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定し、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングするよう構成されている。
前記システムは、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示するよう構成された表示モジュールをさらに含む。
【０００９】
本発明のさらなる目的は、ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するための方法をコンピューターに実行させるための命令を保存する非一時的コンピューター読み取り可能保存媒体（non-transitory computer-readable storage medium）を提供することにある。該方法は、プロセッサーを用いて、ソフトウェアアプリケーション用の入力データを処理する工程を含む。前記処理する工程は、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成する工程と、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定する工程と、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定する工程と、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする工程と、を含む。
前記処理する方法は、前記プロセッサーを用いて、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示する工程をさらに含む。
【図面の簡単な説明】
【００１０】
本開示の一部をなし、本明細書に組み入れられる添付の図面は、本発明の実施例を図示するものであり、本発明の基本概念を説明するために、明細書の記載と共に参照される。
【００１１】
【図１】図１は、システムの基本設計概念（architecture）の実施例を示す図である。
【００１２】
【図２】図２は、図１の基本設計概念を利用したアプリケーションのエントリーポイント生成を含む工程を示すフローチャートの例である。
【００１３】
【図３】図３は、コンピューターシステムの実施例を示す図である。
【発明を実施するための形態】
【００１４】
添付の図面を参照して、本発明の実施形態が説明される。以下に、本発明の基本概念の特徴および実施例が記載されるが、本発明の範囲および基本概念から有意に離れない限り、それらの変更、代替その他の実装が可能である。以下の記載は、実施例を理解するためのもので、本発明の真の範囲および概念は、特許請求の範囲において示される。
【００１５】
１つ以上の構成要素は、モジュールとして記述される。例えば、モジュールは、論理ゲート（logical gate）、半導体デバイス、集積回路、その他の個々の要素を含むハードウェア回路内の自己充足な（self-contained）構成要素を含んでいてもよい。また、モジュールは、プロセッサー等の任意のハードウェア資源によって実行される任意のソフトウェアプログラムの一部であってもよい。ソフトウェアプログラムとしてのモジュールの実行は、プロセッサーまたはその他のハードウェア資源によって実行可能な論理命令（logical instructions）のセットを含んでいてもよい。さらに、モジュールは、命令のセットもしくはインターフェースを介したプログラムと組み合わせられていてもよい。
【００１６】
本発明は、ソフトウェアアプリケーションに関連付けられた１つ以上の設定可能なエントリーポイントを特定（identifying）および検証（verifying）するための方法およびシステムに関する。エントリーポイントのセット（集合、組）を図示するコールグラフ（call graph：コンピューターアプリケーションのサブルーチン同士の呼び出し関係を表現した有向グラフ）が生成され、表示される。
【００１７】
図１に示す例示のシステム１００は、入力データを受け付けるよう構成された入力受信モジュール１０２と、エントリーポイントの包括リスト（comprehensive list）を取得するよう構成された処理部１０４とを含む。処理部１０４は、生成部１０６と、特定モジュール１０８と、フィルタリング部１１０とを含む。システム１００は、フィルタリングされたエントリーポイントのセットを表示するよう構成された表示モジュール１１２をさらに含む。
【００１８】
入力受信モジュール１０２は、ソフトウェアアプリケーションに関する入力データを受信するよう構成されている。入力データは、特に限定されないが、ソースコードおよびコール長値（call length value）を含む。コール長値は、特に限定されないが、コール深度値（call depth value）を含む。
【００１９】
システム１００の動作例を、図２を参照して説明する。生成部１０６は、提供された、または受信したアプリケーションソースコードから１つ以上の中間表示を生成するよう構成されている（ステップ２０２）。さらに、１つ以上の中間表示を用いて、１つ以上のコールグラフが構成される（ステップ２０４）。コールグラフは、コール階層（call hierarchy）の形式で表示される。
【００２０】
ステップ２０６において、特定モジュール１０８は、エントリーポイントの参照セット（informative set）を準備するため、コールグラフ用の１つ以上のルートパラメーターを特定する。ルートパラメーターは、エントリーポイントのセットに関連付けられた１つ以上の呼び出されない関数（uncalled functions）を含む。呼び出されない関数は、エントリーポイントの上位セット（super-set）として機能してもよい。コールグラフが入力端（incoming edges）および出力端（outgoing edges）を有するグラフであることを考慮すれば、入力端は関数として存在し、出力端は該関数に呼び出される関数として存在する。
【００２１】
フィルタリング部１１０は、ユーザーによって提供される事前に定められた値を用いて、エントリーポイントの参照セットをフィルタリングする。ユーザーによって提供される事前に定められた値はコール長値を含み、コール長値は、コール深度の値を参照する（ステップ２０８）。以下に説明するステップ２０８および２１０では、呼び出されない関数の潜在的に大きなリスト（potentially large list）がフィルタリングされ、必要なエントリーポイントを取得することを容易とする。したがって、多大な時間を消費する、呼び出されない関数の人手によるレビューやソート（整理）工程が最小化される。
【００２２】
フィルタリング部１１０は、呼び出されない関数のそれぞれのコール深度またはコール経路（call chain）の長さを判別する際に、呼び出されない関数の上位セットの内の任意の関数に対して順々に適用される（ステップ２１０）。呼び出されない関数のそれぞれのコール長やコール深度の値は、ユーザーによって提供されたコール長またはコール深度と比較される（ステップ２１２）。もし、呼び出されない関数のコール長値またはコール深度値がユーザーによって提供された値よりも大きければ、呼び出されない関数は、必要なエントリーポイントのリストに追加される（ステップ２１４）。このフィルタリングされたエントリーポイントのセットは、表示モジュール１１２によって表示され、機能情報（functional knowledge）と共に検証される（ステップ２１６）。
【００２３】
例として、表示モジュール１１２は、フィルタリングされたエントリーポイントの参照セットを、それぞれのソフトウェアアプリケーションに関するコールグラフと共に表示する。また、エントリーポイントのセットを検証するため、視覚化された表示は、コール階層とともに提供されてもよい。表示モジュール１１２は、各エントリーポイントそれぞれのコール階層を表示する（ステップ２１６）。そのため、システム１００は、エントリーポイントの包括リストを取得し、コール階層を表示するための、統合され、自動化された方法を提供することとなる。システム１００によって提供されるこのような視覚化は、エントリーポイントに関する有用な情報（知識）およびカバレッジ（coverage：プログラムテストの際にテスト対象とする範囲）を提供することができる。上述の方法例のアプリケーションを以下に示すが、本発明はこれに限定されるものではない。
【００２４】
ソフトウェアアプリケーションは、ソースコードとして、以下の関数を有するものとする。また、コール経路の長さ＝２のエントリーポイントを取得する必要があるとする。なお、この“２”というコール経路の長さは、ユーザーによって提供される。
【００２５】
Ｖｏｉｄ  ｆｏｏ（）
｛
ｂａｒ１（）；
ｂａｒ２（）；
｝
【００２６】
Ｖｏｉｄ  ｂａｒ１（）
｛
ｂａｒ３（）；
｝
【００２７】
Ｖｏｉｄ  ｂａｒ２（）
｛
ｂａｒ３（）；
｝
【００２８】
Ｖｏｉｄ  ｆｕｎｃ（）
｛
ｂａｒ２（）；
｝
【００２９】
Ｖｏｉｄ  ｂａｒ３（）
｛｝
【００３０】
ｖｏｉｄ  ｆｕｎｃ２（）
｛
ｂａｒ３（）；
｝
【００３１】
Ｖｏｉｄ  ｂａｒ４（）
｛
｝
【００３２】
上述のコードのサンプルでは、以下のように可視化されたコールグラフ（例えば、コール階層の形式）が生成される。
2014089705.tif 000003
【００３３】
ここで、エントリーポイントの上位セット（例えば、呼び出されない関数のセット）は、｛ｆｏｏ（）、ｆｕｎｃ（）、ｆｕｎｃ２（）、ｂａｒ４（）｝となる。
【００３４】
ｆｏｏ（）のコール経路の長さは“２”である。
【００３５】
ｆｕｎｃ（）のコール経路の長さは“２”である。
【００３６】
ｆｕｎｃ２（）のコール経路の長さは“１”である。
【００３７】
ｂａｒ４（）のコール経路の長さは“０”である。
【００３８】
必要とされるコール長は“２”である。
【００３９】
したがって、フィルタリングされたエントリーポイントのセットは、｛ｆｏｏ（）、ｆｕｎｃ（）｝となる。
【００４０】
このフィルタリングされたエントリーポイントのセットは、検証のため、それぞれのコール階層とともに表示される。
【００４１】
このリストから、１つ以上の必要とされるエントリーポイントを選択することができる。
【００４２】
上述の技術を利用して、ユーザー要求の関数の最小コール長等のユーザーの要求毎に、ソフトウェアアプリケーションのエントリーポイントを特定および検証することができる。いくつかの実施形態では、アプリケーションに関する知識やアプリケーションに関する書類なしで、エントリーポイントを特定および検証することができる。特定されたエントリーポイントは、それぞれのコール階層と共に表示されるので、エントリーポイントの実用性が有効化される。また、呼び出されない関数の膨大なリストをレビューし、整理するのに必要な時間が大幅に削減される。
【００４３】
図３は、本開示と整合する(consistent with)実施形態を実行するコンピューターシステムのブロック図の１例である。コンピューターシステム６０１の変形を、上述のデバイスおよびアルゴリズムの実行に用いることができる。例えば、コンピューターシステム６０１は、図１のシステムを実行することができる。コンピューターシステム６０１は、中央演算処理部（ＣＰＵまたはプロセッサー）６０２を含んでいる。図２の実施例の方法を実行するプロセッサー６０２は、ユーザーまたはシステムで生成されたプログラムコンポーネントを実行する少なくとも１つのデータプロセッサーを含む。ユーザーは、個人、本開示に含まれるようなデバイスを用いる個人、もしくはデバイス自身である。プロセッサー６０２は、統合システム（バス）コントローラー、メモリー管理コントロールユニット、浮動小数点ユニット（floating point units）、画像処理ユニット、デジタル信号処理ユニット等の専門化した処理ユニットを含んでいてもよい。プロセッサー６０２は、ＡＭＤアスロン（AMD Athlon）、ＤｕｒｏｎまたはＯｐｔｅｒｏｎのようなマイクロプロセッサー、ＡＲＭ´ｓアプリケーション（ARM's application）、組み込みまたはセキュアープロセッサー（embedded or secure processor）、ＩＢＭパワーＰＣ（IBM PowerPC）、インテルコア（Intel’s core）、Ｉｔａｎｉｕｍ、Ｘｅｏｎ、Ｃｅｌｅｒｏｎ、またはその他のプロセッサー等を含んでいてもよい。プロセッサー６０２は、メインフレーム、分散プロセッサー（distributed processor）、マルチコア、平行、グリッド、その他の基本概念（architecture）を用いて、実行される。いくつかの実施形態では、ＡＳＩＣｓ（Application-Specific Integrated Circuits）、デジタル信号プロセッサー（DSPs）、ＦＰＧＡｓ（Field Programmable Gate Arrays）等の実装技術が用いられる。
【００４４】
プロセッサー６０２は、Ｉ／Ｏインターフェース６０３を介して、１つ以上の入力／出力（Ｉ／Ｏ）デバイスと通信可能に配置される。Ｉ／Ｏインターフェース６０３は、特に限定されないが、音声、アナログ、デジタル、モノラル、ＲＣＡ、ステレオ、ＩＥＥＥ−１３９４、シリアルバス、ユニバーサルシリアルバス（ＵＳＢ）、赤外線、ＰＳ／２、ＢＮＣ、同軸、コンポーネント、コンポジット、ＤＶＩ（Digital Visual Interface）、ＨＤＭＩ（High-Definition Multimedia Interface）（登録商標）、ＲＦアンテナ、Ｓ−ビデオ、ＶＧＡ、ＩＥＥＥ８０２．１１、ａ／ｂ／ｇ／ｎ／ｘ、ブルートゥース、Ｃｅｌｌｕｌａｒ（例えば、ＣＤＭＡ（Code-Division Multiple Access）、ＨＳＰＡ＋（High-Speed Packet Access）、ＧＳＭ（Global System for Mobile communications）（登録商標）、ＬＴＥ（Long-Term Evolution）、ＷｉＭａｘ等）等の通信プロトコル／方法を採用してもよい。
【００４５】
Ｉ／Ｏインターフェース６０３を用いて、コンピューターシステム６０１は、１つ以上のＩ／Ｏデバイスと通信を取る。例えば、入力デバイス６０４は、アンテナ、キーボード、マウス、ジョイスティック、（赤外線）遠隔コントロール、カメラ、カード読み取り機、ファックス機、ドングル（dongle）、生体読み取り機、マイク、タッチスクリーン、タッチパッド、トラックボール、センサー（例えば、加速度センサー、光センサー、ＧＰＳ、ジャイロスコープ、近接センサー等）、針、スキャナー、保存デバイス、トランシーバー、ビデオデバイス／ソース、バイザー（visors）等である。出力デバイス６０５は、プリンター、ファックス機、ビデオディスプレイ（例えば、ＣＲＴ（Cathode Ray Tube）、液晶ディスプレイ（ＬＣＤ）、ＬＥＤ（Light-Emitting Diode）、プラズマ等）、音声スピーカー等である。いくつかの実施形態では、トランシーバー６０６は、プロセッサー６０２と通信可能に配置されている。トランシーバー６０６は、様々な種類のワイヤレス送信または受信を容易にする。例えば、トランシーバー６０６は、トランシーバーチップ（例えば、テキサスインストゥルメンツＷｉＬｉｎｋ  ＷＬ１２８３、ブロードコム  ＢＣＭ４７５０ＩＵＢ８、インフィネオンテクノロジーズ  Ｘ−Ｇｏｌｄ  ６１８−ＰＭＢ９８００等）に操作可能に接続され、ＩＥＥＥ  ８０２．１１ａ／ｂ／ｇ／ｎ、ブルートゥース、ＦＭ、ＧＰＳ（Global Positioning System）、２Ｇ／３Ｇ  ＨＳＤＰＡ／ＨＳＵＰＡ通信等を提供するアンテナを含む。
【００４６】
いくつかの実施形態では、プロセッサー６０２は、ネットワークインターフェース６０７を介して、通信ネットワーク６０８に通信可能に配置される。ネットワークインターフェース６０７は、通信ネットワーク６０８と通信を取る。ネットワークインターフェース６０７は、特に限定されないが、ダイレクト接続（direct connect）、イーサネット（登録商標）（例えば、twisted pair 10/100/1000 Base T）、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）、トークンリング、ＩＥＥＥ  ８０２．１１ａ／ｂ／ｇ／ｎ／ｘ等の通信プロトコルを採用している。通信ネットワーク６０８は、特に限定されないが、ダイレクトインターコネクション（direct interconnection）、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）、ワイヤレスネットワーク（例えば、ワイヤレスアプリケーションプロトコルを用いたもの）、インターネット等である。ネットワークインターフェース６０７および通信ネットワーク６０８を用いて、コンピューターシステム６０１は、デバイス６１０、６１１および６１２と通信を取る。これらのデバイスは、特に限定されないが、パーソナルコンピューター、サーバー、ファックス機、プリンター、スキャナー、携帯電話等のモバイル機器、スマートフォン（例えば、アップルアイフォーン、ブラックベリー、アンドロイド系電話等）、タブレットコンピューター、電子書籍リーダー（アマゾン、キンドル、Ｎｏｏｋ等）、ラップトップコンピューター、ノート型コンピューター、ゲームコンソール（マイクロソフトＸｂｏｘ、任天堂ＤＳ、ソニープレイステーション等）等である。いくつかの実施形態では、コンピューターシステム６０１は、それ自身が、１つ以上のデバイスを統合している。
【００４７】
いくつかの実施形態では、プロセッサー６０２は、保存インターフェース６１２を介して、１つ以上のメモリーデバイス（例えば、ＲＡＭ６１３、ＲＯＭ６１４等）と通信可能に配置されている。保存インターフェース６１２は、特に限定されないが、ＳＡＴＡ（Serial Advanced Technology Attachment）、ＩＤＥ（Integrated Drive Electronics）、ＩＥＥＥ−１３９４、ＵＳＢ（Universal Serial Bus）、ファイバーチャンネル、ＳＣＳＩ（Small Computer Systems Interface）等の接続プロトコルを採用するメモリーデバイス、リムーバブルディスクドライブ等のメモリーデバイスに接続されている。メモリーデバイスは、ドラム、磁気ディスクドライブ、磁気光学ドライブ、光学ドライブ、ＲＡＩＤ（Redundant Array of Independent Discs）、固体メモリーデバイス、固体ドリブ等を含む。
【００４８】
メモリーデバイスは、特に限定されないが、オペレーティングシステム６１６、ユーザーインターフェース（アプリケーション）６１７、ウェブブラウザー６１８、メールサーバー６１９、メールクライアント６２０、ユーザー／アプリケーションデータ６２１（例えば、本開示で議論された任意のデータ変数またはデータ記録）等のプログラムまたはデータベースコンポーネントの一群を保存している。オペレーティングシステム６１６は、コンピューターシステムの操作およびリソース管理を容易にする。オペレーティングシステム６１６の例としては、特に限定されないが、アップルマッキントッシュＯＳ  Ｘ、Ｕｎｉｘ（登録商標）、Ｕｎｉｘ（登録商標）のようなシステム分散（例えば、ＢＳＤ（Berkeley Software Distribution）、ＦｒｅｅＢＳＤ、ＮｅｔＢＳＤ、ＯｐｅｎＢＳＤ等）、Ｌｉｎｕｘ分散（例えば、Ｒｅｄ  Ｈａｔ、Ｕｂｕｎｔｕ、Ｋｕｂｕｎｔｕ等）、ＩＢＭ  ＯＳ／２、マイクロソフトウィンドウズ（登録商標）（ＸＰ、Ｖｉｓｔａ／７／８等）、アップルｉＯＳ、グーグルアンドロイド、ブラックベリーＯＳ等である。ユーザーインターフェース６１７は、テキストまたは画像ファシリティーを介して、プログラムコンポーネントの実行、操作、インタラクション、実施、表示を容易にする。例えば、ユーザーインターフェース６１７は、カーソル、アイコン、チェックボックス、メニュー、スクローラー、ウィンドウ、ウィジェット（widget）等のコンピューターシステム６０１に操作可能に接続された表示システム上のコンピューター相互インターフェース要素である。ＧＵＩｓ（Graphical User Interfaces）は、特に限定されないが、アップルマッキントッシュオペレーティングシステムＡｑｕａ、ＩＢＭ  ＯＳ／２、マイクロソフトウィンドウズ（登録商標）（例えば、Aero, Metro等）、Ｕｎｉｘ  Ｘ−Ｗｉｎｄｏｗｓ、ウェブインターフェースライブラリ（例えば、ＡｃｔｉｖｅＸ、Ｊａｖａ（登録商標）、Ｊａｖａｓｃｒｉｐｔ（登録商標）、ＡＪＡＸ、ＨＴＭＬ、Ａｄｏｂｅフラッシュ等）等に採用されている。
【００４９】
いくつかの実施形態では、コンピューターシステム６０１は、プログラムコンポーネントに保存されているウェブブラウザー６１８を実行する。ウェブブラウザー６１８は、マイクロソフトＩｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ、グーグルＣｈｒｏｍｅ、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘ、アップルＳａｆａｒｉ等のハイパーテキスト表示アプリケーションである。安全なウェブブラウザーは、ＨＴＴＰＳ（Secure Hypertext Transport Protocol）、ＳＳＬ（Secure Sockets Layer）、ＴＬＳ（Transport Layer Security）等を用いて提供される。ウェブブラウザー６１８は、ＡＪＡＸ、ＤＨＴＭＬ、アドビＦｌａｓｈ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｊａｖａ（登録商標）、ＡＰＩｓ（Application programming Interfaces）等のファシリティーを利用する。いくつかの実施形態では、コンピューターシステム６０１は、プログラムコンポーネントに保存されているメールサーバー６１９を実行する。メールサーバー６１９は、マイクロソフトＥｘｈａｎｇｅ等のインターネットメールサーバーである。メールサーバー６１９は、ＡＳＰ、ＡｃｔｉｖｅＸ、ＡＮＳＩ  Ｃ＋＋／Ｃ＃、マイクロソフト．Ｎｅｔ、ＣＧＩスクリプト、Ｊａｖａ（登録商標）、ＪａｖａＳｃｒｉｐｔ（登録商標）、ＰＥＲＬ、ＰＨＰ、Ｐｙｔｈｏｎ、ＷｅｂＯｂｊｅｃｔｓ等のファシリティーを利用する。メールサーバー６１９は、ＩＭＡＰ（Internet Message Access Protocol）、ＭＡＰＩ（Messaging Application Programming Interface）、マイクロソフトＥｘｃｈａｎｇｅ、ＰＯＰ（Post Office Protocol）、ＳＭＴＰ（Simple Mail Transfer Protocol）等の通信プロトコルを利用する。いくつかの実施形態では、コンピューターシステム６０１は、プログラムコンポーネント内に保存されているメールクライアント６２０を実行する。メールクライアント６２０は、アップルメール、マイクロソフトＥｎｔｏｕｒａｇｅ、マイクロソフトＯｕｔｌｏｏｋ、Ｍｏｚｉｌｌａ  Ｔｈｕｎｄｅｒｂｉｒｄ等のメール閲覧アプリケーションである。
【００５０】
いくつかの実施形態では、コンピューターシステム６０１は、本開示で説明したようなデータ、変数、記録、モジュール等のユーザー／アプリケーションデータ６２１を保存する。このようなデータベースは、フォールトトレラント（fault-tolerant）で、相関的で（relational）、拡張可能で（scalable）、安全な、ＯｒａｃｌｅやＳｙｂａｓｅ等のデータベース等である。また、このようなデータベースは、アレイ、ハッシュ、リンクリスト、構造体、構造化テキストファイル（例えば、ＸＭＬ）、テーブル等の規格化されたデータ構造やオブジェクト指向ベータベース（例えば、ＯｂｊｅｃｔＳｔｏｒｅ、Ｐｏｅｔ、Ｚｏｐｅ等）を用いて実行される。このようなデータベースは、集約され（consolidated）、または上述の様々なコンピューターシステム間で配布される。任意のコンピューターまたはデータベースコンポーネントの動作および構造は、組み合わせ可能であり、集約可能であり、どのような実際の組み合わせ例に対しても配布可能であることは理解されるところであろう。
【００５１】
図示されたステップは、図示の好ましい実施形態を説明するために用意されたものであり、進行している技術の発展は、特定の機能が実行される方法を変化させうることは予期されるであろう。これらの例は、図示する目的で存在しており、限定ではない。さらに、機能的に組み立てられたブロックの境界は、特定の機能およびそれらの関係が適切に実行される限り、任意に定義する事ができる。代替的な境界は、特定の機能およびそれらの関係が適切に実行される限り、定義することができる。関連のある分野における当業者にとって、ここで開示された技術に基づいて、代替手段（ここで述べられたものの同等物、拡張物、バリエーション、偏差等）は、明らかであろう。このような代替手段は、開示された実施例の範囲および考え方の範囲内である。また、特徴を図示している本発明の複数の実施形態が説明される。明細書中、「構成する」、「有する」、「含む」、「備える」およびそれらの他の形式は、同等な意味であり、ある事項またはこれらの文言のいずれか１つに続く事項はそのような事項の包括的なリストであるような意味ではなく、また、列挙された事項のみに限定されるという意味ではない。また、明細書および添付の請求項において使用されるように、単数形“a”、“an”、“the”は、文脈が明確に示していなければ、複数形も含むことに注意しなければならない。
【００５２】
さらに加えて、１つ以上のコンピューター読み取り可能保存メディア（non-transitory computer-readable storage media）を、本発明と矛盾のない実施形態の実装において、利用することができる。コンピューター読み取り可能保存メディアは、情報やデータがプロセッサーによって読み出せるように保存されている任意のタイプの物理メモリーである。したがって、コンピューター読み取り可能保存メディアは、１つ以上のプロセッサーによる実行されるインストラクションを保存しており、ここで述べた実施形態と矛盾のないステップやステージをプロセッサーに実行させるようなインストラクションを含む。用語“コンピューター読み取り可能媒体（computer-readable medium）”は、具体的な物品を含み、搬送波および過渡信号を含まないこと、すなわち、非一時的（non-transitory）であることは理解されるであろう。例として、ランダムアクセスメモリー（ＲＡＭ）、リードオンリーメモリー（ＲＯＭ）、揮発性メモリー、不揮発性メモリー、ハードドライブ、ＣＤＲＯＭ、ＤＶＤ、フラッシュドライブ、ディスク、およびその他既知の物路保存メディアが挙げられる。
【００５３】
本開示および実施例は例示として説明されたものであって、本実施形態の真の範囲および概念は、以下の特許請求の範囲によって表される。
【図１】
2014089705.tif 000004
【図２】
2014089705.tif 000005
【図３】
2014089705.tif 000006
【外国語明細書】
SYSTEM AND METHOD FOR CONFIGURABLE ENTRY POINTS GENERATION AND AIDING VALIDATION IN A SOFTWARE APPLICATION
TECHNICAL FIELD
[001]  The present disclosure generally relates to software application code analysis. More particularly, the disclosure relates to techniques for identifying and verifying configurable entry points in a software application.
BACKGROUND
[002]  Any software application can be written by using several languages. Every programmer while writing application program has his own way to write and implement the program objects. Each one of these languages is open to several API’s and directives. Many a times there are requirements for maintenance or up gradation of bulky source code. Before deploying any code on the production system or before starting to work on the source code, it may be imperative to assess the code and understand the entry points for the application source code. Also it may be important to review the code from security point of view. 
[003]  Entry points in the application source code may be the interfacing or entry functions which help to execute the functionality of the software application. There can be several entry points in the application. These entry points can be called either in sequence or concurrently. Entry points may be required for the analysis of certain functionalities of the application and to validate the application exposure. Identification of entry points may help in providing uniform entry and exit criteria for the application.
[004]  During security assessment of the software application, entry point identification may be essential. Entry points may provide information to the application and they may hit the database, server, process engine and other components of the application. If these entry points are not secured then they may open possible vulnerabilities to the application. 
[005]  To identify the application entry points, it may be essential to have application knowledge. Without a skilled knowledgeable person or documentation, it may be hard and/ortime consuming process to find out these entry points. Moreover, the entry point’s identification by manual inspection may be a time consuming process and it may also result in getting an invalid result. In addition, if entry points are identified by finding uncalled functions, then it might result in huge list of functions which may need to be validated again. Validation of uncalled functions may be very time consuming and tedious process where it may be almost mandatory to study each functionally and extract the required entry point. Also techniques may not be available which could help in verifying that the entry points which are identified are complete or not.
[006]  Therefore, there may be need of a system and method which will help the user to identify the entry points for a software application with minimal knowledge of application or in absence of documentation.
SUMMARY OF THE INVENTION
[007]  According to an aspect of the disclosure, a computer-implemented method of identifying and verifying entry points associated with a software application is disclosed.  The method may include processing, using a processor, input data for a software application.  The processing may include generating one or more call graphs for said software application,identifying a root parameter for each of said one or more call graphs, and setting the one or more root parameters as a first set of entry points, andfiltering the first set of entry points using a first call length value provided by a user to generate a second set of entry points.  The method may further include displaying, using the processor, the second set of entry points along with their respective call graphs.  
[008]  According to another aspect of the disclosure, a system for identifying and verifying entry points associated with a software application is disclosed.  The system may include a memory storing machine-executable instructions and a processor configured to execute the instructions.  The processor may be configuredto generate one or more call graphs for said software application,identify a root parameter for each of said one or more call graphs, set the one or more root parameters as a first set of entry points, and filter the first set of entry points using a first call length value provided by a user to generate a second set of entry points.  The system may further include a display module configured to display the second set of entry points along with their respective call graphs.  
[009]  According to another aspect of the disclosure, a non-transitory computer-readable storage medium storing instructions for enabling a computer to implement a method of identifying and verifying entry points associated with a software application is disclosed.  The method may include processing, using a processor, input data for a software application.  The processing may include generating one or more call graphs for said software application,identifying a root parameter for each of said one or more call graphs, and setting the one or more root parameters as a first set of entry points, and filtering the first set of entry points using a first call length value provided by a user to generate a second set of entry points.  The method may further include displaying, using the processor, the second set of entry points along with their respective call graphs.
BRIEF DESCRIPTION OF DRAWINGS
[0010]  The accompanying drawings, which are incorporated in and constitute a part of this disclosure, illustrate exemplary embodiments and, together with the description, serve to explain the disclosed principles
[0011]  FIG. 1 illustrates an exemplarysystem architecture.
[0012]  FIG. 2 illustrates an exemplary flow chart showing the steps involved in generating application entry points by utilizing the architecture of FIG. 1.
[0013]  FIG. 3 illustrates an exemplary computer system.  
DETAILED DESCRIPTION
[0014]  Exemplary embodiments are described with reference to the accompanying drawings.  While examples and features of disclosed principles are described herein, modifications, adaptations, and other implementations are possible without departing from the spirit and scope of the disclosed embodiments.  It is intended that the following detailed description be considered as exemplary only, with the true scope and spirit being indicated by the following claims.
[0015]  One or more components may be described as modules. For example, a module may include self-contained component in a hardware circuit comprising of logical gate, semiconductor device, integrated circuits or any other discrete component. The module may also be a part of any software program executed by any hardware entity for example processor. The implementation of a module as a software program may include a set of logical instructions to be executed by the processor or any other hardware entity. Further a module may be incorporated with the set of instructions or a program via an interface. 
[0016]  The present disclosure relates to a method and system for identifying and verifying one or more configurable entry points associated with a software application. A call graph illustrating a set of entry points may be generated any displayed.
[0017]  According to FIG. 1, an exemplary system (100) may include an input receiving module (102) configured to accept an input data and a processing unit (104) configured to obtain a comprehensive list of entry points. Processing unit (104) may further include a generator (106), an identification module (108) and a filtration unit (110). System (100) may further includea display module (112) configured to display the filtered set of entry points. 
[0018]  Input receiving module (102) may be configured to receive input data with respect to said software application. The input data may include, but is not limited to, a source code and a call length value. The call length value may include but is not limited to a call depth value. 
[0019]  Exemplary operations of system 100 will now be described with reference to FIG. 2.  Generator (106) may be configured to generate one or more intermediate representations from a provided or received application source code (step 202). Further by using the one or more intermediate representations one or more call graphs may be constructed (step 204). The call graphs may be displayed in the form of a call hierarchy. 
[0020]  In step 206, identification module (108) may be configured to identify one or more root parameters for the call graph in order to prepare an informative set of entry points. The root parameters may include one or more uncalled functions associated with the call graph. Uncalled functions may act as a super-set of the entry points. Considering the call graph as a graph with incoming and outgoing edges, the incoming edges may represent a function and outgoing edges may represent functions called from this function. 
[0021]  Filtration unit (110) may filter the informative set of entry points by using a pre-decided value provided by the user. The pre-decided value provided by the user may include call length and the call length value may refer to a value of call depth (step 208). Steps 208 and 210 (described next) may allow filtering of a potentially large list of uncalled functions and may make it easy to obtain the required entry points. Thus time consuming process of manually reviewing or sorting the list of uncalled function may be minimized.
[0022]  Filtration unit (110) may iterate through the super-set of uncalled functions considering one function at a time to determine a call depth or length of call chain for each of the uncalled functions (step 210). The value of the call length/depth for each of the uncalled functions may be compared with the call length/depth value provided by the user (step 212). If the call length/depth value for an uncalled function is greater than the value provided by the user, then the uncalled function may be added to the list of required entry points (step 214). This set of filtered entry points may be displayed by display module (112) and validated with functional knowledge (step 216).
[0023]  Exemplarily, display module (112) may display the filtered informative set of entry points along with the respective call graph relating to the software application. Thus in order to validate the said set of entry points, visual help may be provided along with call hierarchy. The display module (112) may display the respective call hierarchy for each entry point (step 216). Thus system (100) may provide an integrated automated way to get comprehensive list of entry points and show the call hierarchy. The visualization help presented by system (100) may provide a good knowledge of the entry point and its coverage.  A working non-limiting example is provided next that illustrates an application of the above exemplary method.  :
[0024]  Let us consider a software application having following functions as source code. We need to get the entry point with the length of call chain = 2, which may be provided by the user.  
[0025]  void foo()
[0026]  {
[0027]  bar1();
[0028]  bar2();
[0029]  }
[0030]  void bar1()
[0031]  {
[0032]  bar3();
[0033]  }
[0034]  void bar2()
[0035]  {
[0036]  bar3();
[0037]  }
[0038]  voidfunc()
[0039]  {
[0040]  bar2();
[0041]  }
[0042]  void bar3()
[0043]  {}
[0044]  void func2()
[0045]  {
[0046]  bar3();
[0047]  }
[0048]  void bar4()
[0049]  {
[0050]  } 
[0051]  In the above given sample of code, a call graph (for example, in the form of call hierarchy)may be generated which virtually looks like:
2014089705.tif 000007
[0052]  Here, the super-set of the entry points (for example, the set of uncalled functions) may be = { foo() , func() , func2(), bar4() }
[0053]  call chain length of foo()=2
[0054]  call chain length of func()=2
[0055]  call chain length of func2()=1
[0056]  call chain length of bar4()=0
[0057]  The required call length is equal to 2.
[0058]  Hence, set of filtered entry points = { foo(), func() }
[0059]  This set of filtered entry points may be displayed along with the respective call hierarchy in order to validate them.
[0060]  From this list one can select one or more required entry points.
[0061]  By utilizing the above techniques, entry points for a software application may be identified and verified as per user requirement such as user required minimum call length of functions.In some embodiments, The entry points may be be identified and verified without application knowledge or application documentation. The identified entry points may be displayed with respective call hierarchy, so usefulness of entry points can be validated. Time required to review and sort the huge list of uncalled function may be considerably reduced.
[0062]  FIG. 3 is a block diagram of an exemplary computer system for implementing embodiments consistent with the present disclosure.  Variations of computer system 601 may be used for implementing the devices and algorithms disclosed herein.  For example, computer system 601 may implement the system of FIG. 1.  Computer system 601 may comprise a central processing unit (“CPU” or “processor”) 602 that may implement the exemplary method FIG. 2.  Processor 602 may comprise at least one data processor for executing program components for executing user- or system-generated requests.  A user may include a person, a person using a device such as those included in this disclosure, or such a device itself.  The processor may include specialized processing units such as integrated system (bus) controllers, memory management control units, floating point units, graphics processing units, digital signal processing units, etc.  The processor may include a microprocessor, such as AMD Athlon, Duron or Opteron, ARM’s application, embedded or secure processors, IBM PowerPC, Intel’s Core, Itanium, Xeon, Celeron or other line of processors, etc.  The processor 602 may be implemented using mainframe, distributed processor, multi-core, parallel, grid, or other architectures.  Some embodiments may utilize embedded technologies like application-specific integrated circuits (ASICs), digital signal processors (DSPs), Field Programmable Gate Arrays (FPGAs), etc.
[0063]  Processor 602 may be disposed in communication with one or more input/output (I/O) devices via I/O interface 603.  The I/O interface 603 may employ communication protocols/methods such as, without limitation, audio, analog, digital, monoaural, RCA, stereo, IEEE-1394, serial bus, universal serial bus (USB), infrared, PS/2, BNC, coaxial, component, composite, digital visual interface (DVI), high-definition multimedia interface (HDMI), RF antennas, S-Video, VGA, IEEE 802.n /b/g/n/x, Bluetooth, cellular (e.g., code-division multiple access (CDMA), high-speed packet access (HSPA+), global system for mobile communications (GSM), long-term evolution (LTE), WiMax, or the like), etc.
[0064]  Using the I/O interface 603, the computer system 601 may communicate with one or more I/O devices.  For example, the input device 604 may be an antenna, keyboard, mouse, joystick, (infrared) remote control, camera, card reader, fax machine, dongle, biometric reader, microphone, touch screen, touchpad, trackball, sensor (e.g., accelerometer, light sensor, GPS, gyroscope, proximity sensor, or the like), stylus, scanner, storage device, transceiver, video device/source, visors, etc.  Output device 605 may be a printer, fax machine, video display (e.g., cathode ray tube (CRT), liquid crystal display (LCD), light-emitting diode (LED), plasma, or the like), audio speaker, etc.  In some embodiments, a transceiver 606 may be disposed in connection with the processor 602.  The transceiver may facilitate various types of wireless transmission or reception.  For example, the transceiver may include an antenna operatively connected to a transceiver chip (e.g., Texas Instruments WiLink WL1283, Broadcom BCM4750IUB8, Infineon Technologies X-Gold 618-PMB9800, or the like), providing IEEE 802.11a/b/g/n, Bluetooth, FM, global positioning system (GPS), 2G/3G HSDPA/HSUPA communications, etc.
[0065]  In some embodiments, the processor 602 may be disposed in communication with a communication network 608 via a network interface 607.  The network interface 607 may communicate with the communication network 608.  The network interface may employ connection protocols including, without limitation, direct connect, Ethernet (e.g., twisted pair 10/100/1000 Base T), transmission control protocol/internet protocol (TCP/IP), token ring, IEEE 802.11a/b/g/n/x, etc.  The communication network 608 may include, without limitation, a direct interconnection, local area network (LAN), wide area network (WAN), wireless network (e.g., using Wireless Application Protocol), the Internet, etc.  Using the network interface 607 and the communication network 608, the computer system 601 may communicate with devices 610, 611, and 612.  These devices may include, without limitation, personal computer(s), server(s), fax machines, printers, scanners, various mobile devices such as cellular telephones, smartphones (e.g., Apple iPhone, Blackberry, Android-based phones, etc.), tablet computers, eBook readers (Amazon Kindle, Nook, etc.), laptop computers, notebooks, gaming consoles (Microsoft Xbox, Nintendo DS, Sony PlayStation, etc.), or the like.  In some embodiments, the computer system 601 may itself embody one or more of these devices.
[0066]  In some embodiments, the processor 602 may be disposed in communication with one or more memory devices (e.g., RAM 613, ROM 614, etc.) via a storage interface 612.  The storage interface may connect to memory devices including, without limitation, memory drives, removable disc drives, etc., employing connection protocols such as serial advanced technology attachment (SATA), integrated drive electronics (IDE), IEEE-1394, universal serial bus (USB), fiber channel, small computer systems interface (SCSI), etc.  The memory drives may further include a drum, magnetic disc drive, magneto-optical drive, optical drive, redundant array of independent discs (RAID), solid-state memory devices, solid-state drives, etc.
[0067]  The memory devices may store a collection of program or database components, including, without limitation, an operating system 616, user interface application 617, web browser 618, mail server 619, mail client 620, user/application data 621 (e.g., any data variables or data records discussed in this disclosure), etc.  The operating system 616 may facilitate resource management and operation of the computer system 601.  Examples of operating systems include, without limitation, Apple Macintosh OS X, Unix, Unix-like system distributions (e.g., Berkeley Software Distribution (BSD), FreeBSD, NetBSD, OpenBSD, etc.), Linux distributions (e.g., Red Hat, Ubuntu, Kubuntu, etc.), IBM OS/2, Microsoft Windows (XP, Vista/7/8, etc.), Apple iOS, Google Android, Blackberry OS, or the like.  User interface 617 may facilitate display, execution, interaction, manipulation, or operation of program components through textual or graphical facilities.  For example, user interfaces may provide computer interaction interface elements on a display system operatively connected to the computer system 601, such as cursors, icons, check boxes, menus, scrollers, windows, widgets, etc.  Graphical user interfaces (GUIs) may be employed, including, without limitation, Apple Macintosh operating systems’ Aqua, IBM OS/2, Microsoft Windows (e.g., Aero, Metro, etc.), Unix X-Windows, web interface libraries (e.g., ActiveX, Java, Javascript, AJAX, HTML, Adobe Flash, etc.), or the like.
[0068]  In some embodiments, the computer system 601 may implement a web browser 618 stored program component.  The web browser may be a hypertext viewing application, such as Microsoft Internet Explorer, Google Chrome, Mozilla Firefox, Apple Safari, etc.  Secure web browsing may be provided using HTTPS (secure hypertext transport protocol), secure sockets layer (SSL), Transport Layer Security (TLS), etc.  Web browsers may utilize facilities such as AJAX, DHTML, Adobe Flash, JavaScript, Java, application programming interfaces (APIs), etc.  In some embodiments, the computer system 601 may implement a mail server 619 stored program component.  The mail server may be an Internet mail server such as Microsoft Exchange, or the like.  The mail server may utilize facilities such as ASP, ActiveX, ANSI C++/C#, Microsoft .NET, CGI scripts, Java, JavaScript, PERL, PHP, Python, WebObjects, etc.  The mail server may utilize communication protocols such as internet message access protocol (IMAP), messaging application programming interface (MAPI), Microsoft Exchange, post office protocol (POP), simple mail transfer protocol (SMTP), or the like.  In some embodiments, the computer system 601 may implement a mail client 620 stored program component.  The mail client may be a mail viewing application, such as Apple Mail, Microsoft Entourage, Microsoft Outlook, Mozilla Thunderbird, etc.
[0069]  In some embodiments, computer system 601 may store user/application data 621, such as the data, variables, records, etc. as described in this disclosure.  Such databases may be implemented as fault-tolerant, relational, scalable, secure databases such as Oracle or Sybase.  Alternatively, such databases may be implemented using standardized data structures, such as an array, hash, linked list, struct, structured text file (e.g., XML), table, or as object-oriented databases (e.g., using ObjectStore, Poet, Zope, etc.).  Such databases may be consolidated or distributed, sometimes among the various computer systems discussed above in this disclosure. It is to be understood that the structure and operation of any computer or database component may be combined, consolidated, or distributed in any working combination.
[0070]  The illustrated steps are set out to explain the exemplary embodiments shown, and it should be anticipated that ongoing technological development may change the manner in which particular functions are performed.  These examples are presented herein for purposes of illustration, and not limitation.  Further, the boundaries of the functional building blocks have been arbitrarily defined herein for the convenience of the description.  Alternative boundaries can be defined so long as the specified functions and relationships thereof are appropriately performed.  Alternatives (including equivalents, extensions, variations, deviations, etc., of those described herein) will be apparent to persons skilled in the relevant art(s) based on the teachings contained herein.  Such alternatives fall within the scope and spirit of the disclosed embodiments.Also, the words "comprising," "having," "containing," and "including," and other similar forms are intended to be equivalent in meaning and be open ended in that an item or items following any one of these words is not meant to be an exhaustive listing of such item or items, or meant to be limited to only the listed item or items. It must also be noted that as used herein and in the appended claims, the singular forms “a,”“an,” and “the” include plural references unless the context clearly dictates otherwise.
[0071]  Furthermore, one or more computer-readable storage media may be utilized in implementing embodiments consistent with the present disclosure. A computer-readable storage medium refers to any type of physical memory on which information or data readable by a processor may be stored.  Thus, a computer-readable storage medium may store instructions for execution by one or more processors, including instructions for causing the processor(s) to perform steps or stages consistent with the embodiments described herein. The term “computer-readable medium” should be understood to include tangible items and exclude carrier waves and transient signals, i.e., be non-transitory.  Examples include random access memory (RAM), read-only memory (ROM), volatile memory, nonvolatile memory, hard drives, CD ROMs, DVDs, flash drives, disks, and any other known physical storage media.
[0072]  It is intended that the disclosure and examples be considered as exemplary only, with a true scope and spirit of disclosed embodiments being indicated by the following claims.
CLAIMS:
1.  A computer-implemented method of identifying and verifying entry points associated with a software application, the method comprising:
processing, using a processor,input data for a software application, the processing including:
generating one or more call graphs for said software application,
identifying a root parameter for each of said one or more call graphs, 
setting the one or more root parameters as a first set of entry points, and
filtering the first set of entry points using a first call length value provided by a user to generate a second set of entry points, and
displaying, using the processor, the second set of entry points along with their respective call graphs.
2.  The method of claim 1, wherein the input data includes a source code of the software application and the first call length.
3.  The method of claim 1, wherein the root parameteris an uncalled function in the one or more call graphs.
4.  The method of claim 1, wherein the call graph is in a form of call hierarchy.
5.  The method of claim 1, wherein the first call length indicates a number of function calls linked to the root parameter of the call graph.
6.  The method as claimed in claim 1, wherein filtering the first set of entry points includes identifying a number of function calls linked to the first set of entry points to determine a second call length value for each of the first set of entry points and comparing the second call length value with the first call length value.
7.  A system for identifying and verifying entry points associated with a software application, the system comprising:
a memory storing machine-executable instructions; 
a processor configured to execute the instructions to:
generate one or more call graphs for said software application,
identify a root parameter for each of said one or more call graphs, and sett the one or more root parameters as a first set of entry points, and
filter the first set of entry points using a first call length value provided by a user to generate a second set of entry points, and
a display module configured to display the second set of entry points along with their respective call graphs.
8.  The system of claim 7, wherein the input data includes a source code of the software application and the first call length.
9.  The system of claim 7, wherein the root parameteris an uncalled function in the one or more call graphs.
10.  The system of claim 7, wherein the display module is further configured to display the call graph in form of a call hierarchy.
11.  The system of claim 7, wherein the processor is configured to filter the first set of entry points by identifying a number of function calls linked to the first set of entry points to determine a second call length value for each of the first set of entry points and comparing the second call length value with the first call length value.
12.  The system of claim 1, wherein the first call length indicates a number of function calls linked to the root parameter of the call graph.  
13.  A non-transitory computer-readable storage medium storing instructions for enabling a computer to implement a method of identifying and verifying entry points associated with a software application, the method comprising:
processinginput data for a software application, the processing including:
generating one or more call graphs for said software application,
identifying a root parameter for each of said one or more call graphs, 
setting the one or more root parameters as a first set of entry points, and
filtering the first set of entry points using a first call length value provided by a user to generate a second set of entry points, and
displaying the second set of entry points along with their respective call graphs.
14.  The non-transitory computer-readable storage medium of claim 13, wherein the input data includes a source code of the software application and the first call length.
15.  The non-transitory computer-readable storage medium of claim 13, wherein the root parameter is an uncalled function in the one or more call graphs.
16.  The non-transitory computer-readable storage medium of claim 13, wherein the call graph is in a form of call hierarchy.
17.  The non-transitory computer-readable storage medium of claim 13, wherein the first call length indicates a number of function calls linked to the root parameter of the call graph.
18.  The non-transitory computer-readable storage medium of claim 13, wherein filtering the first set of entry points includes identifying a number of function calls linked to the first set of entry points to determine a second call length value for each of the first set of entry points and comparing the second call length value with the first call length value.
ABSTRACT
A system, method, and computer-readable storage medium is disclosed for identifying and verifying entry points in a software application.  The method may include processing, using a processor, input data for a software application.  The processing may include generating one or more call graphs for said software application, identifying a root parameter for each of said one or more call graphs, and setting the one or more root parameters as a first set of entry points, and filtering the first set of entry points using a first call length value provided by a user to generate a second set of entry points.  The method may further include displaying, using the processor, the second set of entry points along with their respective call graphs.
【図１】
2014089705.tif 000008
【図２】
2014089705.tif 000009
【図３】
2014089705.tif 000010