JP5367379B2 - バイナリコード解析 - Google Patents

バイナリコード解析 Download PDF

Info

Publication number
JP5367379B2
JP5367379B2 JP2008552298A JP2008552298A JP5367379B2 JP 5367379 B2 JP5367379 B2 JP 5367379B2 JP 2008552298 A JP2008552298 A JP 2008552298A JP 2008552298 A JP2008552298 A JP 2008552298A JP 5367379 B2 JP5367379 B2 JP 5367379B2
Authority
JP
Japan
Prior art keywords
code
analysis
query
result
binary code
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.)
Expired - Fee Related
Application number
JP2008552298A
Other languages
English (en)
Other versions
JP2009524875A (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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009524875A publication Critical patent/JP2009524875A/ja
Application granted granted Critical
Publication of JP5367379B2 publication Critical patent/JP5367379B2/ja
Expired - Fee Related 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/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/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

1.背景および関連技術。
コンピュータシステムおよび関連技術は、社会の多くの側面に影響を及ぼす。確かに、コンピュータシステムの情報を処理する能力は、我々が生活し働く方式を変化させてきた。コンピュータシステムは現在、コンピュータシステムの出現前には手作業で実施されていた多数のタスク(たとえば文書処理、スケジューリングおよびデータベース管理)を一般に実施する。より最近では、コンピュータシステムは、有線と無線の両方のコンピュータネットワークを形成するように互いに、また他の電子装置に結合されており、このネットワークを介してコンピュータシステムおよび他の電子装置は、電子データを転送することができる。結果として、コンピュータシステムで実施される多くのタスク(たとえば音声通信、電子メールへのアクセス、家電の制御、ウェブブラウジングおよび文書印刷)は、有線および/または無線コンピュータネットワークを介して複数のコンピュータシステムおよび/または他の電子装置の間で通信(たとえば電子メッセージの交換)することを含む。
したがって、ソフトウェアアプリケーションの実行に応答して汎用コンピューティングシステムによって実施され得る非常に様々な機能およびアプリケーションがある。しかし、コンピューティングシステムの有用性および機能性は、プロセッサによって実際に実行されるバイナリ命令にコンパイルされまたは解釈されたソースコードの適切なコーディングに依存する。コーディングまたは設計の誤り(しばしば「バグ」と呼ばれる)がある場合、この結果として、予想されたふるまいからの偏差がしばしば生じることになる。
さらに、ソフトウェアプログラマおよび設計者の創造性によって、ますます複雑で強力なソフトウェアアプリケーションがもたらされてきた。ソフトウェアアプリケーションの複雑さが増すにつれて、予想されない性能の偏差を引き起こし得るコーディングおよび設計誤りの潜在性もしばしば増加する。したがって、予想外の性能偏差が生じることは、ほとんど不可避である。したがって、ほとんどの開発環境では、開発されたソフトウェアの予想外の性能偏差の数を減らす努力がなされる。
予想外の性能偏差を減らす努力は、予想外の性能偏差を識別し、コードが顧客に公開される前にそれを取り除こうとするためにコード解析を実施することを含み得る。一部のコード解析機構では、ローカル(たとえばクライアント側)解析が、プログラマによってコンパイルされた開発中のバイナリに対して行われる。このローカル手法は、開発プロセスに近いコード解析結果をもたらし、コード内で正当性の問題を常にチェックすることを防ぐのに有効である。これは、開発サイクルのできるだけ早期に問題を識別することによって、その問題を修正するのに消費されるリソースの量が減少するので有益である。
しかし、ローカル解析は、妥当な時間内に実行されなければならないので必ず制限される。すなわち、開発者は、コードに組み込み戻すための解析結果をタイムリーな方式で得なければならない。タイムリーな方式で結果を得ることができないと、開発者は、開発よりも解析結果を待つことにより多くの時間を費やすことになる。したがって、少なくともこれらの時間制約によって、行われ得るローカル解析の深さおよび複雑さが制限される。たとえば、ローカル解析機構はしばしば、データフローの能力をイントラプロシージャ(すなわちプロシージャ内)解析に制限し、インタープロシージャ(すなわちプロシージャ間)解析を可能にしない。その結果、ローカルコード解析はプロシージャ境界を横断する高級な解析を実施するためには、一般に使用できない。
他のコード解析機構では、リモート(たとえばサーバベース)解析が、ソース制御内でチェックされたコンパイル済みコードに対して行われる。一部の解析は、リソース集約的であり、完了するのに長期間(たとえば数時間)を要することがある。一部の環境では、このタイプの解析の負担を取り除いてリモート(かつ潜在的により強力な)コンピュータに向けることは有益である。リモートコンピュータシステムに解析を実施させると、開発者のコンピュータが、リソースを消費するリソース集約型解析を伴わずにコード開発に使用するために解放される。
しかし、リモート解析は、たとえば、しばしば夜通し行われるローカル解析よりもかなり長い時間を結果生成に要することがある。したがって、リモート解析は、ローカルコード解析と比較して、結果の生成により多くの待ち時間を有する。多くの開発環境では、開発者は、チェックイン(たとえば、それらの結果に基づいてさらなる修正を必要とし得る)に関する結果を受け取るために数時間待つことはできない。
さらに、リモートコード解析を実行するために、開発者は、調査および解決によって問題を管理するための基盤(たとえば結果のデータベースを管理するウェブアプリケーション)を開発するように求められ得る。またリモートコード解析では、開発者は、チェックインの前に1組の予期される変更を解析するためにコード解析(たとえばプロシージャ間解析)を実施することはできない。さらに、既存のリモートコード解析技術は一般に、開発プロセスの間に使用するにはあまりに高級である。したがって、一部の開発環境では、開発者は、時間およびコスト制約により、それほど強力でないローカルコード解析を使用することになる。
本発明は、バイナリコードを解析するための方法、システムおよびコンピュータプログラム製品に及ぶ。一部の実施形態では、バイナリコードおよびコード解析ルールを受け取る(受信する)。少なくとも1つのコード解析ルールは、バイナリコードの機能性に関するクエリを示すものである。クエリは、クエリの結果を決定するように構成された解析コードで実装される。クエリについての有効な結果が結果ストアにキャッシュされていないことを決定される。それに応答して、解析コードが、クエリの結果を決定するために呼び出される。結果は、クエリを将来受け取るとき、結果決定のために解析コードを呼び出す必要なしに結果が結果ストアからアクセスされ得るように、結果ストア内にキャッシュされる。クエリの結果が返される。
他の実施形態では、バイナリコードおよびコード解析ルールを受け取る。少なくとも1つのコード解析ルールは、バイナリコードの機能性に関連するクエリを示すものである。クエリは、クエリの結果を決定するように構成された解析コードで実装される。クエリのキャッシュされた結果が結果ストア内にキャッシュされていることを決定される。キャッシュされた結果は、クエリの結果を決定するために使用された解析コードの呼出しに続いて、結果ストア内にキャッシュされている。結果が有効であることを決定される。キャッシュされた結果が、解析コードのさらなる呼出しを回避するために取り出される。クエリのキャッシュされた結果が返される。
この要約は、以下の詳細な説明でさらに述べられる選択された概念を簡略化された形で述べるために提供されている。この要約は、特許請求された主題の主な特徴または本質的な特徴を識別するものではなく、また特許請求された主題の範囲を決定する助けとして使用されないことを意図する。
本発明の追加の特徴および利点は、以下の説明で述べられ、また一部は説明から明らかになり、あるいは本発明を実施することによって知ることができる。本発明の諸特徴および利点は、添付の特許請求の範囲中に具体的に指摘された手段および組合せによって実現し得ることができる。本発明のこれらおよび他の特徴は、以下の説明および添付の特許請求の範囲からより完全に明らかになり、または以下で述べられるように本発明を実施することによって知ることができる。
本発明の上記他の利点および特徴を得ることができる方式について述べるために、上記で簡潔に述べられた本発明のより具体的な説明が、添付の図面に示されたその具体的な実施形態に言及することによって示される。これらの図面が本発明の一般的な実施形態を示すものにすぎず、したがってその範囲を制限するものと見なすべきでないという理解のもと、本発明について、添付の図面を使用してさらに具体的にかつ詳細に述べ説明する。
本発明は、バイナリコードを解析するための方法、システムおよびコンピュータプログラム製品に及ぶ。一部の実施形態では、バイナリコードおよびコード解析ルールを受け取る。少なくとも1つのコード解析ルールは、バイナリコードの機能性に関連するクエリを示す。クエリは、クエリの結果を決定するように構成された解析コードで実施される。クエリについての有効な結果が結果ストアにキャッシュされていないことを決定される。それに応答して、解析コードが、クエリの結果を決定するために呼び出される。結果は、クエリが将来受け取られるとき、結果決定のために解析コードを呼び出す必要なしに結果が結果ストアからアクセスされ得るように、結果ストア内にキャッシュされる。クエリの結果が返される。
他の実施形態では、バイナリコードおよびコード解析ルールを受け取る。少なくとも1つのコード解析ルールは、バイナリコードの機能性に関連するクエリを示す。クエリは、クエリの結果を決定するように構成された解析コードで実施される。クエリのキャッシュされた結果が結果ストア内にキャッシュされていることを決定される。キャッシュされた結果は、クエリの結果を決定するために使用された解析コードの呼出しに続いて結果ストア内にキャッシュされている。結果が有効であることを決定される。キャッシュされた結果が、解析コードのさらなる呼出しを回避するために取り出される。クエリのキャッシュされた結果が返される。
本発明の実施形態は、以下でより詳細に論じられるように、コンピュータハードウェアを含めて特別目的または汎用コンピュータを含んでもよい。本発明の範囲内の実施形態は、その上に格納されたコンピュータ実行可能命令またはデータ構造体を搬送または含むコンピュータ読取り可能媒体をも含む。こうしたコンピュータ読取り可能媒体は、汎用または特別目的コンピュータによってアクセスすることができる任意の使用可能な媒体であり得る。限定のためではなく、例を挙げると、コンピュータ読取り可能媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスク記憶装置などのコンピュータ読取り可能記憶媒体、磁気ディスク記憶装置または他の磁気記憶装置、あるいは所望のプログラムコード手段をコンピュータ実行可能命令またはデータ構造体の形で格納するために使用することができ、また汎用または特別目的コンピュータによってアクセスすることができる他の任意の媒体を含むことができる。
この説明および添付の特許請求の範囲では、「ネットワーク」は、コンピュータシステムおよび/またはモジュール間の電子データの移送を可能にする1または複数のデータリンクとして定義される。情報がネットワークまたは別の通信接続(有線、無線、あるいは有線または無線の組合せ)を介してコンピュータに転送されまたは提供される場合、コンピュータは適切に、その接続をコンピュータ読取り可能媒体と見なす。したがって、限定のためではなく、例を挙げると、コンピュータ読取り可能媒体は、所望のプログラムコード手段をコンピュータ実行可能命令またはデータ構造体の形で搬送し又は格納するために使用することができ、汎用または特別目的コンピュータによってアクセスすることができるネットワークまたはデータリンクを含むことができる。
コンピュータ実行可能命令は、たとえば、汎用コンピュータ、特別目的コンピュータまたは特別目的の処理装置に特定の機能または機能群を実施させる命令およびデータを含む。コンピュータ実行可能命令は、たとえばバイナリ、アセンブリ言語などの中間形式の命令、さらにはソースコードであり得る。本主題は構造的特徴および/または方法論的動作に特有の言語で述べられているが、添付の請求項の範囲に定義された本主題は、述べられた特徴または上述の動作に必ずしも限定されないことを理解されたい。より正確に述べると、述べられた特徴および動作は、特許請求の範囲を実施する例示的な形として開示されている。
本発明は、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブル家電、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話、PDA、ページャなどを含めて、多種のコンピュータシステム構成を備えたネットワークコンピューティング環境内で実施されてもよいことが当業者には理解されよう。本発明は、ネットワークを介して(有線データリンク、無線データリンク、または有線と無線データリンクの組合せによって)リンクされたローカルとリモートのコンピュータシステムの両方がタスクを実施する分散システム環境内で実施することもできる。分散システム環境では、プログラムモジュールは、ローカルとリモートの両方のメモリ記憶装置内に置かれてもよい。
図1は、バイナリコードの解析を容易にするコンピュータアーキテクチャ100の一例を示している。コンピュータアーキテクチャ100内には、コード解析モジュール107、解析エンジン109、キャッシュインターフェースモジュール111、結果キャッシュ112を含めて、様々なコンポーネントが示されている。様々なコンポーネントはそれぞれ、たとえばローカルエリアネットワーク(「LAN:Local Area Network」)、広域ネットワーク(「WAN:Wide Area Network」)、さらにはインターネットなどのネットワークに接続され得る。したがって、様々なコンポーネントは、ネットワークに接続された他のコンポーネントからデータを受け取り、そこにデータを送信することができる。したがって、コンポーネントは、メッセージ関連のデータを作成し、メッセージ関連のデータ(たとえばインターネットプロトコル(「IP:Internet Protocol」)データグラム、ならびに転送制御プロトコル(「TCP:Transmission Control Protocol」)、ハイパーテキスト転送プロトコル(「HTTP:Hypertext Transfer Protocol」)、簡易メール転送プロトコル(「SMTP:Simple Mail Transfer Protocol」)など、IPデータグラムを使用する他の高位層プロトコル)をネットワークを介して交換することができる。示されたコンポーネントは、同じコンピュータシステム上にあっても、複数の異なるコンピュータシステム間で分散されてもよい。
一般に、コード解析モジュール107は、解析ルールに従ってバイナリコード(たとえばコンパイルされたソースコード)を解析するように構成される。たとえば、コード解析モジュール107は、例外のクロージャまたは関数によって返され得る結果コードを計算し、呼出し箇所(call site)がメモリ割当てを恐らく返すことができるかどうか計算し、関数の呼び出しグラフを計算し、変数およびパラメータの制約を計算し、値がNULLであり得るか、それともNULLであり得ないかどうか、(たとえばマネージドコードの)集約セキュリティ許可を判断するために、バイナリコードを解析することができる。
解析エンジン109は、たとえばバイナリコード解析を要求する別のモジュールから、バイナリコードおよび対応する解析ルールを受け取ることができる。解析ルールには、バイナリコードの機能性に関連する1または複数のコードクエリが含まれ得る。受け取ったコードクエリをバイナリコードに対して実施するために、解析エンジンは、受け取ったコードクエリの結果を生成するように設計された解析コードを実行することができる。
解析コードは、コード解析モジュール107に含まれる内部解析コードであり得る。あるいは、解析コードは、コード解析モジュール107からアクセス可能であり、またそれによってロードされ得る外部解析コードであり得る。たとえば、一部の実施形態では、プラグインシステムが、様々な解析および推論タスクを実施することに専用であるプラグインを編成し、記述し、管理する。解析コード(内部と外部の両方)は、特定のプログラムに対して実行するように構成され得る。
受け取ったコードクエリを実施する解析コードを実行する前に、解析エンジン109は、キャッシュインターフェースモジュール111にキャッシュクエリを提出することができる。キャッシュクエリは、受け取ったコードクエリコードについての有効な結果が結果キャッシュ112内にキャッシュされているかどうか判断するために、キャッシュインターフェースモジュール111が結果キャッシュ112をチェックすることを要求することができる。有効な結果が結果キャッシュ112内にキャッシュされている場合は、キャッシュインターフェースモジュール111は、キャッシュされた結果を、たとえばコード解析を要求した他のモジュールに返すことができる。したがって、(潜在的にリソース集約的な)解析コードの呼出しが回避される。
有効な結果が結果キャッシュ112内にキャッシュされていない場合は、解析エンジン109は、受け取ったコードクエリの結果を生成するために解析コードを実行することができる。生成された結果は、キャッシュインターフェースモジュール111に送信することができる。キャッシュインターフェースモジュール111は、(潜在的にリソース集約的な)解析コードを呼び出す必要なしに、生成された結果が同じコードクエリの後続のインスタンスに提供され得るように、生成された結果を結果キャッシュ112内にキャッシュすることができる。
キャッシュインターフェースモジュール111は、以前に解析されたバイナリコードへの後の修正に基づいてキャッシュ済みの結果を無効にするための機構を含むことができる。たとえば、キャッシュインターフェースモジュールは、バイト数およびバイナリコードの日付/タイムスタンプの検証のためのヒューリスティックを含むことができる。指定されたバイナリコードについての生成された結果がキャッシュされる場合は、キャッシュインターフェースモジュール111は、指定されたバイナリコードのバイト数および日付/タイムスタンプを計算し、バイト数および日付/タイムスタンプを結果と共に結果キャッシュ112内にキャッシュすることができる。キャッシュされた結果についての後のキャッシュクエリ(解析エンジン109上でコードクエリの受信によって引き起こされる)に応答して、キャッシュインターフェースモジュール111は、指定されたバイナリコードのバイト数および日付/タイムスタンプを再計算することができる。
キャッシュインターフェースモジュール111は、キャッシュされたバイト数およびキャッシュされた日付/タイムスタンプをそれぞれ、再計算されたバイト数および再計算された日付/タイム活動的にスタンプと比較することができる。キャッシュされたバイト数および再計算されたバイト数が一致し(たとえば同じであり)、キャッシュされた日付/タイムスタンプと再計算された日付/タイムスタンプが対応する(たとえば同じである)場合は、キャッシュされた結果は有効であることを決定され、キャッシュされた結果が、コードクエリの結果として返される。その一方で、キャッシュされたバイト数および再計算されたバイト数が一致せず(たとえば同じでなく)、かつ/またはキャッシュされた日付/タイムスタンプと再計算された日付/タイムスタンプが一致しない(たとえば同じでない)場合は、キャッシュされた結果は無効にされ、結果キャッシュ112からクリアされる。
キャッシュ結果は、依存関係の解析によって、(単一バイナリにまでも減少した)より小さい粒度で無効にすることもできる。
一部の実施形態では、無効の結果は、結果が無効にされた後のある時間量の間、結果キャッシュ112内に保持される。したがって、指定された時間間隔で、または何らかのイベントに応答して、無効にされた結果が、結果キャッシュ112から削除され得る。
図2は、バイナリコードを解析するための例示的な方法200のフローチャートを示している。方法200について、コンピュータアーキテクチャ100内のコンポーネントおよびデータに関して述べる。
方法200は、バイナリコードを受け取る動作(動作201)を含む。たとえば、解析エンジン109は、バイナリコード101を受け取ることができる。バイナリコード101は、バイナリコード101の意図された機能性を実施しようと試みるように共に動作する、たとえばプロシージャ101A、101Bおよび101Cなど、複数のプロシージャを含むことができる。たとえば、プロシージャ101Aは、プロシージャ101Bを呼び出すことができ、プロシージャ101Bは次に、プロシージャ101Cなどを呼び出すことができるなどである。したがって、それぞれの呼出しプロシージャの適切な動作は、そのコールツリーのリーフプロシージャへの一連の呼出し内の他の各プロシージャの適切な動作に依存する。たとえば、プロシージャ101C(被呼出しプロシージャ)の不適切な動作によって、プロシージャ101A(呼出しプロシージャ)の対応する不適切な動作が引き起こされ得る。
バイナリコードは、コンピュータシステム上で実行することができる任意のコードを事実上含む。たとえば、バイナリコードは、コンピュータシステム上でプロセッサによって実行するためにコンパイルされたC++、C#、Visual Basicなど、コンピュータ言語のコンパイルされたソースコード命令を含む。バイナリコードは、ハードウェアプロセッサによって実行される前に仮想マシンによって実行するためにさらにコンパイルされる中間言語命令をも含む。
方法200は、バイナリコードの機能性に関連するクエリを含むコード解析ルールを受け取る動作(動作202)を含む。たとえば、解析エンジン109は、解析ルール102を受け取ることができる。解析ルールは、たとえばセキュリティ設定、設計ガイドラインとの適合性など、バイナリコードの様々な異なる特性をチェックするためのルール、ならびにバイナリコードの機能性に関連するクエリを示すルールを含むことができる。
たとえば、解析ルール102は、バイナリコード101の機能性に関連するクエリを示すコードクエリ103を含む。コード質問は、プラグイン104A、104Bおよび104Cにそれぞれ含まれる、たとえば解析コード106A、106Bおよび106Cなど、コード解析モジュール107に外部的にアクセス可能な解析コードを実行することによって実施することができる。たとえば、コードクエリ103は、プラグインの104Aからの解析コード106Aを実行することによって実施することができる。あるいは、コードクエリは、コード解析モジュール107に含まれる解析コードを実行することによって実施することができる。たとえば、コードクエリ103は、解析コード108を実行することによって実施することができる。
方法200は、クエリの結果が存在するかどうか判断するステップ(判断ブロック203)を含む。たとえば、バイナリコード101および解析ルール102の受信に応答して、解析エンジン109は、キャッシュインターフェースモジュール111にキャッシュクエリ131を提出することができる。キャッシュクエリ131に応答して、キャッシュインターフェースモジュール111は、バイナリコード101のコードクエリ103のキャッシュされた結果が結果キャッシュ112内にキャッシュされているかどうか、あるいはバイナリコード101のコードクエリ103のキャッシュされた結果が結果キャッシュ112内にキャッシュされていなかどうか判断することができる。
解析コード(たとえば解析コード106Aまたは解析コード108)の前の呼出しの結果として、バイナリコード101のコードクエリ103について生成された結果は、結果キャッシュ112内にキャッシュされたかもしれない。したがって、方法200は、クエリのキャッシュされた結果が結果ストア内にキャッシュされていることを決定する動作を含むことができる。たとえば、キャッシュインターフェースモジュール111は、結果123が、バイナリコード101のコードクエリ103のキャッシュされた結果であると判断することができる。クエリのキャッシュされた結果が存在する(判定ブロック203のYES)場合は、方法200は、判断ブロック204に進む。
もう一方で、解析コードの前の呼出しによって、バイナリコード101のコードクエリ103の結果が生成されていないかもしれない。たとえば、解析コード106Aまたは解析コード108は、バイナリコード111のためにかつて呼び出されたことがないかもしれない。あるいは、何らかの理由により、解析コード106Aまたは解析コード108の呼出しからの結果は、もはや結果キャッシュ112内にキャッシュされていないかもしれない。たとえば、以前に格納された結果は、結果キャッシュ112からフラッシュされているかもしれない。
したがって、方法200は、クエリのキャッシュされた結果が結果ストア内にキャッシュされていないことを決定する動作を含むことができる。たとえば、キャッシュインターフェースモジュール111は、バイナリコード111に対して(コードクエリ103を実施するために)解析コード106Aを呼び出すことからの結果が結果キャッシュ112内にキャッシュされていないと判断することができる。クエリのキャッシュされた結果が存在しない場合は(判断ブロック203のNO)、方法200は、動作205に進む。
方法200は、クエリの結果が有効かどうかの判断(判断ブロック204)を含む。たとえば、(バイナリコード101のコードクエリ103の)結果123を検出することに応答して、キャッシュインターフェースモジュール111は、結果123が有効かどうかを決定することができる。キャッシュインターフェースモジュール111は、バイナリコード101を現在表しているデータ(たとえば現在のタイムスタンプおよび現在のチェックサム)を、結果123がキャッシュされたときのバイナリコード101を表すデータ(たとえばタイムスタンプ124およびチェックサム126)と比較することができる。
比較の結果、キャッシュインターフェースモジュール111は、現在のタイムスタンプおよび現在のチェックサムが、それぞれタイムスタンプ124およびチェックサム126に対応することを決定することがある。したがって、方法200は、キャッシュされた結果が有効であることを決定する動作を含むことができる。たとえば、キャッシュインターフェースモジュール111は、結果123が有効であることを決定することができる。クエリのキャッシュされた結果が有効である場合は(判定ブロック204のYES)、方法200は、動作206に進む。
方法200は、結果を取り出す動作(動作206)を含む。たとえば、キャッシュインターフェースモジュール111は、結果キャッシュ112から結果123を取り出すことができる。
もう一方では、比較の結果、キャッシュインターフェースモジュール111は、現在のタイムスタンプおよび/または現在のチェックサムが、それぞれタイムスタンプ124および/またはチェックサム126に一致しないことを決定するかもしれない。したがって、方法200は、キャッシュされた結果が有効でないことを決定する動作を含むことができる。たとえば、キャッシュインターフェースモジュール111は、結果123が有効でないことを決定することができる。クエリのキャッシュされた結果が有効でない場合は(判断ブロック204のNO)、方法200は、動作205に進む。
方法200は、クエリの結果を生成するために解析コードを呼び出す動作を含む(動作205)。たとえば、解析エンジン109は、コードクエリ103の結果113を生成するために、バイナリコード101に対する解析コード106Aを呼び出すことができる。解析コード106Aは、例外のクロージャ、または返され得る結果コードを計算し、プロシージャ101A、101Bおよび101Cのいずれかがメモリ割当てを恐らく返し得るかどうか計算し、プロシージャ101A、101Bおよび101Cのいずれかの呼び出しグラフを計算し、プロシージャ101A、101Bおよび101Cのいずれかの変数およびパラメータプロシージャの制約を計算し、プロシージャ101A、101Bおよび101Cのいずれかについて値がNULLであり得るか、それともNULLであり得ないか、バイナリコード101の集約セキュリティ許可を判断するなどのためのコードを含むことができる。
方法200は、結果をキャッシュする動作を含む(動作207)。たとえば、解析エンジン109は、キャッシュインターフェースモジュール111に結果113を送信することができる。キャッシュインターフェースモジュール111は、結果キャッシュ112に結果113をキャッシュすることができる。一部の実施形態では、解析コード(たとえば解析コード106A)は、解析エンジン109および/またはキャッシュインターフェースモジュール111に、その結果がキャッシュに適していると示すことができる。たとえば、解析コードが頻繁に繰り返される解析を実施するように構成される場合、解析コードは、その結果がキャッシュに適していることの表示を含むことができる。他の実施形態では、解析エンジン109および/またはキャッシュインターフェースモジュール111は、解析結果がキャッシュされるべきであることを決定するために実行される追加の論理を含む。
解析エンジン109またはキャッシュインターフェースモジュール111は、生成された結果についても、タイムスタンプおよびチェックサムを生成する。たとえば、解析エンジン109は、結果113のタイムスタンプおよびチェックサムを生成し、タイムスタンプおよびチェックサム(たとえばタイムスタンプ114およびチェックサム116)を結果113と共にキャッシュインターフェースモジュール111に送信することができる。あるいは、キャッシュインターフェースモジュール111は、結果113のタイムスタンプおよびチェックサム(たとえばタイムスタンプ114およびチェックサム116)を生成することができる。キャッシュインターフェースモジュール111は、(受け取ったか、それとも生成されたかに拘らず)タイムスタンプおよびチェックサムを、キャッシュされた結果と共にキャッシュすることができる。たとえば、キャッシュインターフェースモジュール111は、タイムスタンプ114およびチェックサム116を結果113と共にキャッシュすることができる。
方法200は、結果を返す動作(動作208)をも含む。一部の実施形態では、キャッシュインターフェースモジュール111は、結果を返す。たとえば、キャッシュクエリ131に応答して、キャッシュインターフェースモジュール111は、応答132に結果123を含めることができ、解析エンジン109に応答123を返すことができる。あるいは、または応答132と同時に、キャッシュインターフェースモジュール111は、結果123(たとえば表示装置に)を出力することができる。
他の実施形態では、解析エンジン109は、結果を返す。たとえば、結果113生成の後に、解析エンジン109は、(たとえば表示装置に)結果113を出力することができる。あるいは、応答の受信132に応答して、解析エンジン109は、(たとえば表示装置に)結果123を出力することができる。
本発明の実施形態は、ターゲットのプロシージャに対して解析質問への回答を要求するためのシステムおよびアプリケーションプログラムインターフェース(「API:Application Program Interface」)を含むことができる。APIは、解析結果が既に存在しており、有効であるかどうか判断するために、永続型の結果ストアにクエリすることができる。結果が存在せず、または既存の結果が有効でない場合は、このシステムは、オンザフライで関連の解析コードを呼び出し、生成された結果を記録し、呼出し側に返す。
一部の実施形態では、毎回実行される解析と、高級な解析質問に対する回答を計算しまたは推論することに関連する解析との間で区別がなされる。毎回実行される解析の結果は、反復解析の結果のアクセスがより効率的となるように、キャッシュすることができる。
したがって、本発明の実施形態は、解析と解析されたコードとの間の形式的な関係を確立する。形式的関係は、予想された1組のコード変更に対して、チェックイン前に開発者のコンピュータシステム上でより強力なコード解析を行うことを容易にし、解析時間コストを減少させる。本発明の実施形態は、コードの一部が静的なコードのより大きな本体に対して変化する環境において特に有用であり得る。たとえば、実施形態は、性能を損なわずに重要な解析値を提供するローカルシステムへの集中した結果キャッシュを構築するために使用することができる。
本発明は、その精神または本質的な特徴から逸脱せずに、他の特定の形で実施されてもよい。述べられた諸実施形態は、あらゆる点において、限定的ではなく、例示的なものにすぎないと見なすべきである。したがって、本発明の範囲は、上記説明ではなく、添付の特許請求の範囲で示される。特許請求の範囲の均等物の意味および範囲に含まれるすべての変更は、その範囲に包含されるものである。
バイナリコードの解析を容易にする例示的なコンピュータアーキテクチャを示す。 バイナリコードを解析するための例示的な方法のフローチャートを示す。

Claims (16)

  1. バイナリコードを解析するための複数のコード解析プラグインを編成したり、記述したり、管理したりするためのプラグインマネージャーを含むコンピュータシステム上で、バイナリコードを解析するための方法であって、各コード解析は、特定の解析コードを実行するために構成されており、
    バイナリコードを受け取る動作と、
    コード解析ルールを受け取る動作であって、少なくとも1つのコード解析ルールは、バイナリコードに対する予想可能なコード変化チェックができるように当該バイナリコードの機能性に関するクエリを含む、動作と、
    前記プラグインマネージャーにおいて、前記複数のコード解析プラグインを用いてプラグインにアクセスし、前記受け取ったバイナリコードの解析のために前記解析コードを実行する動作であって、前記コード解析プラグインは、前記受け取ったバイナリコードに対する予測可能なコード変化チェックができるように当該受け取ったバイナリコードに対するクエリを実施するための解析コードを含む、動作と、
    前記受け取ったバイナリコードに対する前記解析コードの前回の呼び出しの結果として得られた前記クエリについての有効な結果、前記アクセスされたコード解析プラグインにおいて前記解析コードを呼び出す前に、結果ストア内にキャッシュされていないことを決定する動作であって、前記クエリについての有効な結果は、前記受け取ったバイナリコードに対する前記クエリの結果が前記結果ストア内に存在する場合の当該クエリの結果を示す、動作と、
    前記クエリについての有効な結果が前記結果ストア内にキャッシュされていないとの決定に応答して、前記アクセスされたコード解析プラグインにおける前記解析コードを呼び出して、前記受け取ったバイナリコードに対する予測可能なコード変化チェックができるようにクエリの結果を生成する動作と、
    将来受け取り得るバイナリコードに対して同じクエリを実行する場合に、そのクエリの結果を得るために、前記コード解析プラグインにおける前記解析コードを呼び出すことなく、前記クエリの結果を前記結果ストアからアクセスできるように、前記生成されたクエリの結果を前記結果ストア内にキャッシュする動作であって、前記特定の解析コードがあらかじめ繰り返し実施されるように構成されている場合は、その特定の解析コードは、当該特定の解析コードに基づくクエリの結果をキャッシュするのに適することを示すための表示を含む、動作と、
    前記クエリについての有効な結果を前記結果ストア内から返す動作と
    を備えたことを特徴とする方法。
  2. バイナリコードを受け取る前記動作は、コンパイルされたソースコード、および、中間言語命令のうち、少なくともいずれか1つを受け取る動作を備えたことを特徴とする請求項1に記載の方法。
  3. コード解析ルールを受け取る前記動作は、バイナリコードの特性を解析するためのコード解析ルールを受け取る動作を備えたことを特徴とする請求項1に記載の方法。
  4. バイナリコードの特性を解析するためのコード解析ルールを受け取る前記動作は、前記バイナリコードに関連するセキュリティ設定、前記バイナリコードの設計ガイドラインへの適合性、および前記バイナリコードの機能性のうちの1または複数を解析するためのコード解析ルールを受け取る動作を備えたことを特徴とする請求項3に記載の方法。
  5. 前記クエリについての有効な結果が結果ストアにキャッシュされていないことを決定する前記動作は、前記クエリについての無効な結果が前記結果ストア内にキャッシュされていることを決定する動作を備えたことを特徴とする請求項1に記載の方法。
  6. 前記クエリについての無効な結果が前記結果ストア内にキャッシュされていることを決定する前記動作は、前記受け取ったバイナリコードに対応するタイムスタンプおよびチェックサムのうちの少なくとも1つがそれぞれ、前記クエリよりも前に生成されたクエリの結果に対応するキャッシュ済みのタイムスタンプおよびチェックサムと異なることを決定する動作を備えたことを特徴とする請求項に記載の方法。
  7. 前記生成されたクエリの結果を前記結果ストアにキャッシュする前記動作は、前記バイナリコードを受け取った前記コンピュータシステムにネットワーク接続可能である結果ストアにおいて、前記生成された結果をキャッシュする動作を備えたことを特徴とする請求項1に記載の方法。
  8. バイナリコードを解析するための複数のコード解析プラグインを編成したり、記述したり、管理したりするためのプラグインマネージャーを含むコンピュータシステム上でバイナリコードを解析するための方法であって、各コード解析は、特定の解析コードを実行するために構成されており、
    バイナリコードを受け取る動作と、
    コード解析ルールを受け取る動作であって、少なくとも1つのコード解析ルールは、バイナリコードに対する予想可能なコード変化チェックができるように当該バイナリコードの機能性に関するクエリを含む、動作と、
    前記プラグインマネージャーにおいて、前記複数のコード解析プラグインを用いてプラグインにアクセスし、前記受け取ったバイナリコードの解析のために前記解析コードを実行する動作であって、前記コード解析プラグインは、前記バイナリコードに対する予想可能なコード変化チェックができるように当該バイナリコードに対するクエリを実施するための解析コードを含む、動作と、
    前記受け取ったバイナリコードに対する前記解析コードの前回の呼び出しの結果として得られた前記クエリについての有効な結果、前記アクセスされたコード解析プラグインにおいて前記解析コードを呼び出す前に、結果ストア内にキャッシュされていないことを決定する動作であって、前記クエリについての有効な結果は、前記受け取ったバイナリコードに対する前記クエリの結果が前記結果ストア内に存在する場合の当該クエリの結果を示す、動作と、
    前記キャッシュされたクエリの結果が有効であることを決定する動作と、
    前記クエリの結果と同じクエリの結果を生成する場合記コード解析プラグインにおける前記解析コードの呼び出しが回避できるう、前記キャッシュされたクエリについての有効な結果を取り出す動作と、
    前記キャッシュされたクエリについての有効な結果を返す動作と
    を備え
    前記特定の解析コードがあらかじめ繰り返し実施されるように構成されている場合は、その特定の解析コードは、当該特定の解析コードに基づくクエリの結果をキャッシュするのに適することを、クエリの結果が前記結果ストア内にキャッシュされるべきかを決定するための論理に示すための表示を含む
    ことを特徴とする方法。
  9. バイナリコードを受け取る前記動作は、コンパイルされたソースコードを受け取る動作を備えたことを特徴とする請求項に記載の方法。
  10. コード解析ルールを受け取る前記動作は、バイナリコードの特性を解析のためのコード解析ルールを受け取る動作を含むことを特徴とする請求項に記載の方法。
  11. バイナリコードの特性の解析のためのコード解析ルールを受け取る前記動作は、前記バイナリコードに関連するセキュリティ設定、前記バイナリコードの設計ガイドラインへの適合性、および前記バイナリコードの機能性のうちの1または複数を解析するためのコード解析ルールを受け取る動作を備えたことを特徴とする請求項10に記載の方法。
  12. 前記クエリについての前記キャッシュされた結果が有効であることを決定する前記動作は、前記受け取ったバイナリコードに対応するタイムスタンプおよびチェックサムがそれぞれ、前記コードクエリの以前に生成された結果に対応するキャッシュされたタイムスタンプおよびチェックサムに対応することを決定する動作を備えたことを特徴とする請求項に記載の方法。
  13. 前記キャッシュされた結果を取り出す動作は、前記バイナリコードを受け取った前記コンピュータシステムにネットワーク接続可能である結果ストアからキャッシュされた結果を取り出す動作を備えたことを特徴とする請求項に記載の方法。
  14. 1または複数のプロセッサと、
    システムメモリと、
    コード解析モジュールとプラグインマネージャーのコンピュータ実行可能命令が格納された1または複数のコンピュータ読取り可能記憶媒体であって、前記コード解析モジュールは、
    バイナリコードを受け取るステップと、
    コード解析ルールを受け取るステップであって、少なくとも1つのコード解析ルールが、バイナリコードに対する予想可能なコード変化チェックができるように当該バイナリコードの機能性に関連するクエリを含む、ステップと、
    バイナリコードを解析するための複数のコード解析プラグインを用いて、コード解析プラグインを受け取るステップであって、前記受け取ったコード解析プラグインは、前記受け取ったバイナリコードに対して実行するように構成され、前記受け取ったコード解析プラグインは、当該バイナリコードに対する予想可能なコード変化チェックができるように当該バイナリコードに対するクエリを実施するための解析コードを含む、ステップと、
    前記受け取ったバイナリコードに対する前記解析コードの前回の呼び出しの結果として得られた前記クエリについての有効な結果、前記コード解析プラグインにおいて前記解析コードを呼び出す前に、結果ストアにキャッシュされているかどうか判断するステップであって、前記クエリについての有効な結果は、前記受け取ったバイナリコードに対する前記クエリの結果が前記結果ストア内に存在する場合の当該クエリの結果を示す、ステップと、
    前記クエリについての有効な結果がキャッシュされていない場合は、
    前記クエリについての結果をキャッシュするために、前記コード解析プラグインにおける前記予想可能なコード変化チェックができるようにするためのクエリの結果を生成するために、前記解析コードを呼び出すステップと、
    将来受け取り得るバイナリコードに対して同じクエリを実行する場合にそのクエリの結果を得るために、前記コード解析プラグインにおける前記解析コードを呼び出すことなく、前記クエリの結果を結果ストア内からアクセスできるように、生成済みのクエリの結果を前記結果ストア内にキャッシュする動作であって、特定の解析コードがあらかじめ繰り返し実施されるように構成されている場合は、その特定の解析コードは、当該特定の解析コードに基づくクエリの結果をキャッシュするのに適することを示すための表示を含む、ステップと、
    前記クエリについての有効な結果がキャッシュされている場合は、
    前記クエリの結果を生成するために前記コード解析プラグインにおける前記解析コードの呼出しが回避できるように、前記キャッシュされたクエリの結果を取り出して前記バイナリコードに対する前記予測可能なコード変化チェックができるようにするステップと、
    前記クエリについての有効な結果を返すステップと
    を実施させるように構成され、
    前記プラグインマネージャーは、
    バイナリコードを分析するための複数のコード解析プラグインを編成したり、記述したり、管理したりするように構成されるとともに、各コード解析は、特定の解析コードを実行するために構成されており、
    前記複数のコード解析プラグインを用いてプラグインにアクセスし、前記受け取ったバイナリコードの解析のために前記解析コードを実行するように構成され、前記コード解析プラグインは、当該バイナリコードに対する前記予測可能なコード変化チェックができるように当該受け取ったバイナリコードに対するクエリを実施するための解析コードを含む、
    コンピュータ読取り可能記憶媒体と
    を備えることを特徴とするコンピュータシステム。
  15. 前記クエリについて有効な結果が結果ストア内にキャッシュされているかどうかを決定するように構成された前記コード解析モジュールは、前記受け取ったバイナリコードに対応するタイムスタンプおよびチェックサムがそれぞれ、前記クエリよりも前に生成されたクエリの結果に対応するキャッシュ済みのタイムスタンプおよびチェックサムに対応するかどうかを決定するように構成された前記解析モジュールを備えることを特徴とする請求項14に記載のコンピュータシステム。
  16. 前記コード解析モジュールは、解析エンジンとキャッシュインターフェースモジュールとを含み、前記クエリについての前記結果を返すように構成された前記コード解析モジュールは、前記解析エンジンに結果を返すように構成された前記キャッシュインターフェースモジュールを備えることを特徴とする請求項14に記載のコンピュータシステム。
JP2008552298A 2006-01-26 2006-12-28 バイナリコード解析 Expired - Fee Related JP5367379B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/340,190 2006-01-26
US11/340,190 US7836433B2 (en) 2006-01-26 2006-01-26 Analyzing binary code
PCT/US2006/049546 WO2007089348A1 (en) 2006-01-26 2006-12-28 Analyzing binary code

Publications (2)

Publication Number Publication Date
JP2009524875A JP2009524875A (ja) 2009-07-02
JP5367379B2 true JP5367379B2 (ja) 2013-12-11

Family

ID=38287106

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008552298A Expired - Fee Related JP5367379B2 (ja) 2006-01-26 2006-12-28 バイナリコード解析

Country Status (6)

Country Link
US (1) US7836433B2 (ja)
EP (1) EP1979831A4 (ja)
JP (1) JP5367379B2 (ja)
KR (1) KR20080091345A (ja)
CN (1) CN101336428B (ja)
WO (1) WO2007089348A1 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7761444B2 (en) * 2006-10-05 2010-07-20 Hewlett-Packard Development Company, L.P. Identifying a sequence of blocks of data to retrieve based on a query
US8275754B1 (en) * 2008-01-22 2012-09-25 Oracle America, Inc. Method and apparatus for state tracking of data from multiple observers
US8990792B2 (en) * 2008-05-26 2015-03-24 Samsung Electronics Co., Ltd. Method for constructing dynamic call graph of application
RU2008120587A (ru) * 2008-05-26 2009-12-10 Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд." (KR) Способ построения динамических графов вызовов функций
US8321850B2 (en) * 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
US8572589B2 (en) * 2009-06-30 2013-10-29 Agilent Technologies, Inc. Programming language translator and enabling translation of machine-centric commands for controlling instrument
CN102193859B (zh) * 2010-03-03 2014-09-10 深圳市世纪光速信息技术有限公司 一种代码分析方法及系统
US8516446B2 (en) 2010-05-21 2013-08-20 Apple Inc. Automated qualification of a binary application program
US9619779B2 (en) 2011-08-26 2017-04-11 Apple Inc. Client-side policy enforcement of developer API use
US20140289697A1 (en) * 2013-03-21 2014-09-25 The Procter & Gamble Company Systems and Methods for Software Development
EP3021216A1 (en) * 2014-11-14 2016-05-18 Semmle Limited Incremental source code analysis
US10296737B2 (en) * 2015-12-09 2019-05-21 International Business Machines Corporation Security enforcement in the presence of dynamic code loading
CN107783892A (zh) * 2016-08-25 2018-03-09 平安科技(深圳)有限公司 一种代码分析方法及终端
US10754948B2 (en) * 2017-04-18 2020-08-25 Cylance Inc. Protecting devices from malicious files based on n-gram processing of sequential data
KR102265937B1 (ko) * 2020-12-21 2021-06-17 주식회사 모비젠 시퀀스데이터의 분석 방법 및 그 장치
US12061903B2 (en) 2022-09-16 2024-08-13 Microsoft Technology Licensing, Llc Software development quality assessment

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5749079A (en) 1992-03-04 1998-05-05 Singapore Computer Systems Limited End user query facility including a query connectivity driver
US5864837A (en) * 1996-06-12 1999-01-26 Unisys Corporation Methods and apparatus for efficient caching in a distributed environment
US5987254A (en) * 1997-07-14 1999-11-16 Hewlett Packard Company System-wide memoization of array dependence information
US6263332B1 (en) 1998-08-14 2001-07-17 Vignette Corporation System and method for query processing of structured documents
US6647462B1 (en) * 2000-06-29 2003-11-11 Motorola, Inc. Apparatus and a method for providing decoded information
US7237243B2 (en) 2001-06-11 2007-06-26 Microsoft Corporation Multiple device management method and system
US7065743B2 (en) * 2002-07-11 2006-06-20 International Business Machines Corporation Apparatus and method for caching analyzed program information
US7150008B2 (en) * 2002-10-25 2006-12-12 Microsoft Corporation Non-invasive rule-based binary analysis of software assemblies
US20050108562A1 (en) * 2003-06-18 2005-05-19 Khazan Roger I. Technique for detecting executable malicious code using a combination of static and dynamic analyses
JP2005056183A (ja) * 2003-08-05 2005-03-03 Nec Corp ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラム
US7496903B2 (en) * 2003-08-12 2009-02-24 Hewlett-Packard Development Company, L.P. Synthesizing application response measurement (ARM) instrumentation
US7503037B2 (en) * 2004-04-02 2009-03-10 Bea Systems, Inc. System and method for identifying bugs in software source code, using information from code coverage tools and source control tools to determine bugs introduced within a time or edit interval

Also Published As

Publication number Publication date
WO2007089348A1 (en) 2007-08-09
JP2009524875A (ja) 2009-07-02
EP1979831A1 (en) 2008-10-15
CN101336428B (zh) 2010-09-08
EP1979831A4 (en) 2012-04-25
CN101336428A (zh) 2008-12-31
US7836433B2 (en) 2010-11-16
US20070174817A1 (en) 2007-07-26
KR20080091345A (ko) 2008-10-10

Similar Documents

Publication Publication Date Title
JP5367379B2 (ja) バイナリコード解析
US7689665B2 (en) Dynamically loading scripts
US11003511B2 (en) Controlling runtime access to application program interfaces
CA2564681C (en) Methods and systems for dynamically composing distributed interactive applications from high-level programming languages
US20040250257A1 (en) System and method for generator state object validation
US7448028B2 (en) System and method for selective local object retrieval
US20040250258A1 (en) System and method for rule based object navigation
De Nicola et al. Programming and verifying component ensembles
US20040249823A1 (en) System and method for object navigation grammar completion
US20040250259A1 (en) System and method for incremental object generation
US20040249940A1 (en) System and method for asynchronous resource management
Olsen et al. Using SDL for targeting services to CORBA
Pedersen Enforcement of Timing-Sensitive Security Policies in Runtime Systems

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091124

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120524

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120622

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120924

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130329

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20130516

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20130516

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130701

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130729

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130805

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130806

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20130813

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130911

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees