(57)【要約】【課題】  プログラム保護のためのＪａｖａデバッガ遮断方法およびシステムを提供する。【解決手段】  コンピュータのプロセッサが実行するＪａｖａデバッガ遮断方法は、コンピュータ上で現在実行中のＪａｖａ仮想マシンのハンドルを取得する段階、コンピュータ上で現在実行中のスレッドのうちからＪａｖａで予め定義されたデバッグ規約に従って動作するスレッドを確認する段階、および取得したＪａｖａ仮想マシンのハンドルから前記確認されたスレッドを分離して終了させる段階を含む。【選択図】      図３
2021530014.tif 000002
【特許請求の範囲】
【請求項１】
Ｊａｖａデバッガ遮断方法をコンピュータに実行させるコンピュータプログラムであって、
前記Ｊａｖａデバッガ遮断方法は、
前記コンピュータ上で現在実行中のＪａｖａ仮想マシンのハンドルを取得する段階、
前記コンピュータ上で現在実行中のスレッドのうちからＪａｖａで予め定義されたデバッグ規約に従って動作するスレッドを確認する段階、および
前記取得したＪａｖａ仮想マシンのハンドルから前記確認されたスレッドを分離して終了させる段階
を含む、コンピュータプログラム。
【請求項２】
前記デバッグ規約は、Ｊａｖａアプリケーションとデバッガプロセスとの通信を定義するＪＤＷＰを含む、請求項１に記載のコンピュータプログラム。
【請求項３】
前記スレッドを確認する段階は、
前記スレッドのうちで名称がＪＤＷＰであるスレッドの識別子を確認する段階
を含む、請求項１に記載のコンピュータプログラム。
【請求項４】
前記スレッドを確認する段階は、
前記スレッドのうちでＪＤＷＰ機能を実行するスレッドの識別子を確認する段階
を含む、請求項１に記載のコンピュータプログラム。
【請求項５】
前記スレッドを確認する段階は、
前記スレッドそれぞれのタスク情報に基づいてＪＤＷＰに対応するタスク情報を有するスレッドの識別子を確認する段階
を含む、請求項１に記載のコンピュータプログラム。
【請求項６】
前記確認されたスレッドを分離して終了させる段階は、
前記確認されたスレッドの識別子を有する第１スレッドが終了するということを前記第１スレッドが前記Ｊａｖａ仮想マシンに知らせて終了するように前記第１スレッドを制御する処理関数を登録する段階、および
前記第１スレッドが前記処理関数を実行するように制御する段階
を含み、
前記第１スレッドが前記登録された処理関数を実行することにより、前記第１スレッドが前記Ｊａｖａ仮想マシンから分離して終了する、請求項１に記載のコンピュータプログラム。
【請求項７】
前記登録する段階は、
前記スレッドそれぞれが前記処理関数を呼び出すように制御するユーザ定義シグナルをさらに登録し、
前記制御する段階は、
前記ユーザ定義シグナルを呼び出して前記スレッドが前記処理関数を呼び出すように制御する、請求項６に記載のコンピュータプログラム。
【請求項８】
コンピュータのプロセッサが実行するＪａｖａデバッガ遮断方法であって、
コンピュータ上で現在実行中のＪａｖａ仮想マシンのハンドルを取得する段階、
前記コンピュータ上で現在実行中のスレッドのうちからＪａｖａで予め定義されたデバッグ規約に従って動作するスレッドを確認する段階、および
前記取得したＪａｖａ仮想マシンのハンドルから前記確認されたスレッドを分離して終了させる段階
を含む、Ｊａｖａデバッガ遮断方法。
【請求項９】
前記デバッグ規約は、Ｊａｖａアプリケーションとデバッガプロセスとの通信を定義するＪＤＷＰを含む、請求項８に記載のＪａｖａデバッガ遮断方法。
【請求項１０】
前記スレッドを確認する段階は、
前記スレッドのうちで名称がＪＤＷＰであるスレッドの識別子を確認する段階
を含む、請求項８に記載のＪａｖａデバッガ遮断方法。
【請求項１１】
前記スレッドを確認する段階は、
前記スレッドのうちでＪＤＷＰ機能を実行するスレッドの識別子を確認する段階
を含む、請求項８に記載のＪａｖａデバッガ遮断方法。
【請求項１２】
前記スレッドを確認する段階は、
前記スレッドそれぞれのタスク情報に基づいてＪＤＷＰに対応するタスク情報を有するスレッドの識別子を確認する段階
を含む、請求項８に記載のＪａｖａデバッガ遮断方法。
【請求項１３】
前記確認されたスレッドを分離して終了させる段階は、
前記確認されたスレッドの識別子を有する第１スレッドが終了するということを前記第１スレッドが前記Ｊａｖａ仮想マシンに知らせて終了するように前記第１スレッドを制御する処理関数を登録する段階、および
前記第１スレッドが前記処理関数を実行するように制御する段階
を含み、
前記第１スレッドが前記登録された処理関数を実行することにより、前記第１スレッドが前記Ｊａｖａ仮想マシンから分離して終了する、請求項８に記載のＪａｖａデバッガ遮断方法。
【請求項１４】
前記登録する段階は、
前記スレッドそれぞれが前記処理関数を呼び出すように制御するユーザ定義シグナルをさらに登録し、
前記制御する段階は、
前記ユーザ定義シグナルを呼び出して前記スレッドが前記処理関数を呼び出すように制御する、請求項１３に記載のＪａｖａデバッガ遮断方法。
【請求項１５】
請求項１〜７のうちのいずれか一項に記載のコンピュータプログラムが記録されている、コンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の説明は、プログラム保護のためのＪａｖａデバッガ遮断方法、Ｊａｖａデバッガ遮断方法を実行するＪａｖａデバッガ遮断システム、コンピュータと結合してＪａｖａデバッガ遮断方法をコンピュータに実行させるためにコンピュータ読み取り可能な記録媒体に記録されたコンピュータプログラムとその記録媒体に関する。
【背景技術】
【０００２】
クライアント端末に配布されたアプリケーションは、リバースエンジニアリング（リバーシング）によってその動作方式を把握することができるため、このような技術によってアプリケーション機能の盗用を可能にする。また、アプリケーションの機能を修正してアプリケーションの本来の意図とは異なるように動作させることで、アプリケーションが提供するサービスと該当のサービスを提供するシステムの信頼性に良くない影響を与えたりもする。
【０００３】
このようなリバースエンジニアリングによるアプリケーションの分析過程では、デバッグ（ｄｅｂｕｇｇｉｎｇ）の活用が必須となる。デバッグとは、プログラムのエラーを確認して修正する行為を意味するものであって、このような行為のために使用されるプログラムはデバッガと呼ばれる。このようなデバッグは、エラーのない正常なプログラムに対しても実行可能であり、このような場合には、プログラムが本来意図する動作を変更するだけではなく、プログラム内部の動作の原理を把握するための悪意的な目的として使用されることもある。
【０００４】
従来は、内蔵されたプログラムを保護する目的で、コードの修正と動作形態の理解を難しくするために、本来の動作方式を変更したり一部を暗号化したりする方式である難読化技法が利用されている。例えば、韓国登録特許第１０−１３２８０１２号は、アプリケーションコード難読化装置およびその方法に関するものであって、アプリケーションに使用されるコードのうち、重要コードおよび重要コードを呼び出すための呼び出しコードをネイティブコード形態に変換する技術を開示している。
【０００５】
しかし、このような従来技術は、難読化されたコードを実行するために追加の実行時間が必要となり、本来の動作を実行するために特定の時点ではメモリ上に本来のコードがロードされなければならないという問題があった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】韓国登録特許第１０−１３２８０１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
Ｊａｖａアプリケーションとデバッガとの通信を定義するデバッグ規約に従って動作するスレッドを終了させることにより、Ｊａｖａアプリケーションに対するデバッガの影響を遮断することができるＪａｖａデバッガ遮断方法、Ｊａｖａデバッガ遮断方法を実行するＪａｖａデバッガ遮断システム、コンピュータと結合してＪａｖａデバッガ遮断方法をコンピュータに実行させるためにコンピュータ読み取り可能な記録媒体に記録されたコンピュータプログラムとその記録媒体を提供する。
【課題を解決するための手段】
【０００８】
コンピュータのプロセッサが実行するＪａｖａデバッガ遮断方法であって、前記コンピュータ上で現在実行中のＪａｖａ仮想マシンのハンドルを取得する段階、前記コンピュータ上で現在実行中のスレッドのうちからＪａｖａで予め定義されたデバッグ規約に従って動作するスレッドを確認する段階、および前記取得したＪａｖａ仮想マシンのハンドルから前記確認されたスレッドを分離して終了させる段階を含む、Ｊａｖａデバッガ遮断方法を提供する。
【０００９】
コンピュータと結合して前記Ｊａｖａデバッガ遮断方法をコンピュータ実行させるためにコンピュータ読み取り可能な記録媒体に記録された、コンピュータプログラムを提供する。
【００１０】
前記Ｊａｖａデバッガ遮断方法をコンピュータに実行させるためのコンピュータプログラムが記録されていることを特徴とする、コンピュータ読み取り可能な記録媒体を提供する。
【００１１】
コンピュータ読み取り可能な命令を実行するように実現される少なくとも１つのプロセッサを含み、前記少なくとも１つのプロセッサにより、前記コンピュータ上で現在実行中のＪａｖａ仮想マシンのハンドルを取得し、前記コンピュータ上で現在実行中のスレッドのうちからＪａｖａで予め定義されたデバッグ規約に従って動作するスレッドを確認し、前記取得したＪａｖａ仮想マシンのハンドルから前記確認されたスレッドを分離して終了させる、コンピュータ装置を提供する。
【発明の効果】
【００１２】
Ｊａｖａアプリケーションとデバッガとの通信を定義するデバッグ規約に従って動作するスレッドを終了させることにより、Ｊａｖａアプリケーションに対するデバッガの影響を遮断することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態における、ネットワーク環境の例を示した図である。
【図２】本発明の一実施形態における、電子機器およびサーバの内部構成を説明するためのブロック図である。
【図３】本発明の一実施形態における、Ｊａｖａデバッガを遮断する過程の例を示した図である。
【図４】本発明の一実施形態における、Ｊａｖａデバッガ遮断方法の例を示したフローチャートである。
【図５】本発明の一実施形態における、スレッドをＪａｖａ仮想マシンのハンドルから分離させる過程の例を示したフローチャートである。
【発明を実施するための形態】
【００１４】
以下、実施形態について、添付の図面を参照しながら詳しく説明する。
【００１５】
本発明の実施形態に係るＪａｖａデバッガ遮断システムは、一例として、図２で説明するコンピュータ装置２００のようなコンピュータによって実現されてよく、本発明の実施形態に係るＪａｖａデバッガ遮断方法は、コンピュータによって実行されてよい。例えば、コンピュータにおいては、本発明の一実施形態に係るコンピュータプログラム（一例として、特定のサービス提供を受けるためにコンピュータ装置にインストールされたアプリケーション）が実行されてよく、コンピュータは、実行されたコンピュータプログラムの制御にしたがって本発明の一実施形態に係るＪａｖａデバッガ遮断方法を実行してよい。上述したコンピュータプログラムは、コンピュータと結合してＪａｖａデバッガ遮断方法をコンピュータに実行させるためにコンピュータ読み取り可能な記録媒体に記録されてよい。
【００１６】
図１は、本発明の一実施形態における、ネットワーク環境の例を示した図である。図１のネットワーク環境は、複数の電子機器１１０、１２０、１３０、１４０、複数のサーバ１５０、１６０、およびネットワーク１７０を含む例を示している。このような図１は、発明の説明のための一例に過ぎず、電子機器の数やサーバの数が図１のように限定されることはない。
【００１７】
複数の電子機器１１０、１２０、１３０、１４０は、コンピュータ装置によって実現される固定端末や移動端末であってよい。複数の電子機器１１０、１２０、１３０、１４０の例としては、スマートフォン、携帯電話、ナビゲーション、ＰＣ（ｐｅｒｓｏｎａｌ  ｃｏｍｐｕｔｅｒ）、ノート型パンコン、デジタル放送用端末、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、ＰＭＰ（Ｐｏｒｔａｂｌｅ  Ｍｕｌｔｉｍｅｄｉａ  Ｐｌａｙｅｒ）、タブレットなどがある。一例として、図１では、電子機器１（１１０）の例としてスマートフォンを示しているが、本発明の実施形態において、電子機器１（１１０）は、実質的に無線または有線通信方式を利用し、ネットワーク１７０を介して他の電子機器１２０、１３０、１４０および／またはサーバ１５０、１６０と通信することのできる多様な物理的なコンピュータ装置のうちの１つを意味してよい。
【００１８】
通信方式が限定されることはなく、ネットワーク１７０が含むことのできる通信網（一例として、移動通信網、有線インターネット、無線インターネット、放送網）を利用する通信方式だけではなく、機器間の近距離無線通信が含まれてもよい。例えば、ネットワーク１７０は、ＰＡＮ（ｐｅｒｓｏｎａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＣＡＮ（ｃａｍｐｕｓ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＭＡＮ（ｍｅｔｒｏｐｏｌｉｔａｎ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＷＡＮ（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＢＢＮ（ｂｒｏａｄｂａｎｄ  ｎｅｔｗｏｒｋ）、インターネットなどのネットワークのうちの１つ以上の任意のネットワークを含んでよい。さらに、ネットワーク１７０は、バスネットワーク、スターネットワーク、リングネットワーク、メッシュネットワーク、スター−バスネットワーク、ツリーまたは階層的ネットワークなどを含むネットワークトポロジのうちの任意の１つ以上を含んでもよいが、これに限定されることはない。
【００１９】
サーバ１５０、１６０それぞれは、複数の電子機器１１０、１２０、１３０、１４０とネットワーク１７０を介して通信して命令、コード、ファイル、コンテンツ、サービスなどを提供する１つ以上のコンピュータ装置によって実現されてよい。例えば、サーバ１５０は、ネットワーク１７０を介して接続した複数の電子機器１１０、１２０、１３０、１４０に第１サービスを提供するシステムであってよく、サーバ１６０も、ネットワーク１７０を介して接続した複数の電子機器１１０、１２０、１３０、１４０に第２サービスを提供するシステムであってよい。より具体的な例として、サーバ１５０は、複数の電子機器１１０、１２０、１３０、１４０にインストールされたアプリケーション（コンピュータプログラム）と連係するサービスを前記第１サービスとして提供してよい。他の例として、サーバ１６０は、前記第１サービスのためのアプリケーションのインストールファイルを複数の電子機器１１０、１２０、１３０、１４０に提供するサービスを前記第２サービスとして提供してよい。
【００２０】
図２は、本発明の一実施形態における、コンピュータ装置の例を示したブロック図である。上述した複数の電子機器１１０、１２０、１３０、１４０それぞれやサーバ１５０、１６０それぞれは、図２に示したコンピュータ装置２００によって実現されてよい。例えば、コンピュータ装置２００においては、一実施形態に係るコンピュータプログラムがインストールされて実行されてよく、コンピュータ装置２００は、実行されるコンピュータプログラムの制御にしたがって本発明の一実施形態に係るＪａｖａデバッガ遮断方法を実行してよい。
【００２１】
このようなコンピュータ装置２００は、図２に示すように、メモリ２１０、プロセッサ２２０、通信インタフェース２３０、および入力／出力インタフェース２４０を含んでよい。メモリ２１０は、コンピュータ読み取り可能な記録媒体であって、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）、およびディスクドライブのような永続的大容量記録装置を含んでよい。ここで、ＲＯＭやディスクドライブのような永続的大容量記録装置は、メモリ２１０とは区分される別の永続的記録装置としてコンピュータ装置２００に含まれてもよい。また、メモリ２１０には、オペレーティングシステムと、少なくとも１つのプログラムコードが記録されてよい。このようなソフトウェア構成要素は、メモリ２１０とは別のコンピュータ読み取り可能な記録媒体からメモリ２１０にロードされてよい。このような別のコンピュータ読み取り可能な記録媒体は、フロッピードライブ、ディスク、テープ、ＤＶＤ／ＣＤ−ＲＯＭドライブ、メモリカードなどのコンピュータ読み取り可能な記録媒体を含んでよい。他の実施形態において、ソフトウェア構成要素は、コンピュータ読み取り可能な記録媒体ではない通信インタフェース２３０を通じてメモリ２１０にロードされてもよい。例えば、ソフトウェア構成要素は、ネットワーク１７０を介して受信されるファイルによってインストールされるコンピュータプログラムに基づいてコンピュータ装置２００のメモリ２１０にロードされてよい。
【００２２】
プロセッサ２２０は、基本的な算術、ロジック、および入出力演算を実行することにより、コンピュータプログラムの命令を処理するように構成されてよい。命令は、メモリ２１０または通信インタフェース２３０によって、プロセッサ２２０に提供されてよい。例えば、プロセッサ２２０は、メモリ２１０のような記録装置に記録されたプログラムコードにしたがって受信される命令を実行するように構成されてよい。
【００２３】
通信インタフェース２３０は、ネットワーク１７０を介してコンピュータ装置２００が他の装置（一例として、上述した記録装置）と互いに通信するための機能を提供してよい。一例として、コンピュータ装置２００のプロセッサ２２０がメモリ２１０のような記録装置に記録されたプログラムコードにしたがって生成した要求や命令、データ、ファイルなどが、通信インタフェース２３０の制御にしたがってネットワーク１７０を介して他の装置に伝達されてよい。これとは逆に、他の装置からの信号や命令、データ、ファイルなどが、ネットワーク１７０を経てコンピュータ装置２００の通信インタフェース２３０を通じてコンピュータ装置２００に受信されてよい。通信インタフェース２３０を通じて受信された信号や命令、データなどは、プロセッサ２２０やメモリ２１０に伝達されてよく、ファイルなどは、コンピュータ装置２００がさらに含むことのできる記録媒体（上述した永続的記録装置）に記録されてよい。
【００２４】
入力／出力インタフェース２４０は、入力／出力装置２５０とのインタフェースのための手段であってよい。例えば、入力装置は、マイク、キーボード、またはマイクなどの装置を、出力装置は、ディスプレイ、スピーカのような装置を含んでよい。他の例として、入力／出力インタフェース２４０は、タッチスクリーンのように入力と出力のための機能が１つに統合された装置とのインタフェースのための手段であってもよい。入力／出力装置２５０は、コンピュータ装置２００と１つの装置で構成されてもよい。
【００２５】
また、他の実施形態において、コンピュータ装置２００は、図２の構成要素よりも少ないか多くの構成要素を含んでもよい。しかし、大部分の従来技術的構成要素を明確に図に示す必要はない。例えば、コンピュータ装置２００は、上述した入力／出力装置２５０のうちの少なくとも一部を含むように実現されてもよいし、トランシーバ、データベースなどのような他の構成要素をさらに含んでもよい。
【００２６】
図３は、本発明の一実施形態における、Ｊａｖａデバッガを遮断する過程の例を示した図である。コンピュータ装置２００は、Ｊａｖａ仮想マシン（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）３００を含んでよい。Ｊａｖａ仮想マシン３００は、Ｊａｖａ言語で作成されたプログラムを解釈して実行する仮想のコンピュータである。Ｊａｖａ言語で記述されたプログラムはＪａｖａコンパイラによってバイトコードのような中間コードに変換されるが、このとき、Ｊａｖａ仮想マシン３００は、このようなバイトコードを解釈して実行するソフトウェアモジュールであってよい。Ｊａｖａは、オブジェクト指向プログラミング言語であって、ＪａｖａアプリケーションのデバッグのためにＪＤＷＰ（ＪａｖａＴＭ  Ｄｅｂｕｇ  Ｗｉｒｅ  Ｐｒｏｔｏｃｏｌ）のようなＪａｖａアプリケーションとデバッガプロセスとの通信を定義するデバッグ規約を提供する。このとき、このようなデバッグ規約に従って動作するスレッドが存在することがある。図３は、Ｊａｖａ仮想マシン３００にアタッチ（ａｔｔａｃｈ）したｎ個のスレッド３１０を示しており、ｎ個のスレッド３１０のうちスレッドｎ３２０をデバッグ規約に従って動作するスレッドとして示している。このとき、スレッドｎ３２０は、一般的にＪＤＷＰを名称として使用し、ＪＤＷＰのようなデバッグ規約による機能を実行することにより、コンピュータ装置２００にインストールされた他のソフトウェアであるデバッガ３３０がＪａｖａアプリケーションと通信できるように動作する。例えば、スレッドｎ３２０は、デバッガ３３０が、ｎ個のスレッド３１０のうち、Ｊａｖａアプリケーションによる他のスレッドと通信できるようにする機能を提供してよい。
【００２７】
デバッガ３３０は、スレッドｎ３２０と連結することができない場合には、Ｊａｖａアプリケーションによる他のスレッドと通信することができないため、本実施形態では、スレッドｎ３２０を終了させることによってＪａｖａアプリケーションをデバッグしようとするデバッガ３３０を遮断する。図３では「ｐｔｈｒｅａｄ＿ｅｘｉｔ（）」３４０のような処理関数を利用してＪａｖａ仮想マシン３００にアタッチしたＪＤＷＰスレッドであるスレッドｎ３２０を終了させて無力化することによってデバッガ３３０を遮断する例を示している。
【００２８】
図４は、本発明の一実施形態における、Ｊａｖａデバッガ遮断方法の例を示したフローチャートである。本実施形態に係るＪａｖａデバッガ遮断方法は、上述したコンピュータ装置２００によって実行されてよい。例えば、コンピュータ装置２００のプロセッサ２２０は、メモリ２１０が含むオペレーティングシステムのコード、および／または少なくとも１つのプログラムのコードによる制御命令（ｉｎｓｔｒｕｃｔｉｏｎ）を実行するように実現されてよい。例えば、上述したプログラムコードは、デバッグの対象となるＪａｖａアプリケーションのコードであってよい。言い換えれば、Ｊａｖａアプリケーションは、Ｊａｖａデバッガを遮断するためのコードを含んでよく、プロセッサ２２０は、コンピュータ装置２００に記録されたＪａｖａアプリケーションのコードが提供する制御命令にしたがってコンピュータ装置２００が図３の制御方法に含まれる段階４１０〜４３０を実行するようにコンピュータ装置２００を制御してよい。実施形態によっては、プログラムのコードは、デバッグの対象となるＪａｖａアプリケーションとは別のプログラムによって提供されてもよい。
【００２９】
段階４１０で、コンピュータ装置２００は、現在実行中のＪａｖａ仮想マシンのハンドルを取得してよい。Ｊａｖａコードを実行するすべてのスレッドはＪａｖａ仮想マシンに連結（ａｔｔａｃｈ）しているため、このようなスレッドを「ｐｔｈｒｅａｄ＿ｅｘｉｔ（）」のような関数を利用して直ぐに終了させる場合にはＪａｖａ仮想マシンで衝突が発生する恐れがある。したがって、コンピュータ装置２００は、後にスレッドを終了させようとするときに「ＤｅｔａｃｈＣｕｒｒｅｎｔＴｈｒｅａｄ（）」のような関数を利用して終了させようとする関数をＪａｖａ仮想マシンから予め分離（ｄｅｔａｃｈ）してからスレッドを終了させてよく、このために、Ｊａｖａ仮想マシンのハンドルを予め取得してよい。したがって、実施形態によっては、段階４１０は、スレッドをＪａｖａ仮想マシンから分離させる前、一例として、段階４２０と段階４３０の間に実行されてもよい。
【００３０】
コンピュータ装置２００は、「ＪＮＩ＿ＯｎＬｏａｄ（）」のような関数によって呼び出されるＪａｖａ仮想マシンのハンドルを記録してよい。例えば、仮想マシンのハンドルは、現在実行中のＪａｖａ仮想マシンのオブジェクトにアクセスするためのアドレスポインタ値であって、Ｊａｖａ仮想マシンがネイティブライブラリをロードする時点に先立ち、説明した関数「ＪＮＩ＿ＯｎＬｏａｄ（）」を行うようになり、関数「ＪＮＩ＿ＯｎＬｏａｄ（）」を呼び出す時点に呼び出されるハンドル（現在実行中のプロセッサのＪａｖａ仮想マシンインスタンス自体に対するポインタ値として、一般的に「ＪＮＩ＿ＯｎＬｏａｄ（）」に伝達される最初のパラメータ「ＪａｖａＶＭ＊ｖｍ」を意味する）を記録してよい。記録されたハンドルは、後にスレッドを分離する場合に、スレッド分離のための関数「ＤｅｔａｃｈＣｕｒｒｅｎｔＴｈｒｅａｄ（）」を呼び出すのに活用されてよい。ただし、コンピュータ上で実行中のＪａｖａ仮想マシンのハンドルをインポートすることができる方法であれば、上述した関数「ＪＮＩ＿ＯｎＬｏａｄ（）」に限定されることなく使用が可能である。
【００３１】
段階４２０で、コンピュータ装置２００は、現在実行中のスレッドのうちからＪａｖａで予め定義されたデバッグ規約に従って動作するスレッドを確認してよい。デバッグ規約は、上述したように、Ｊａｖａアプリケーションとデバッガプロセスとの通信を定義するＪＤＷＰを含んでよい。このようなデバッグ規約に従って動作するスレッドの名称は一般的にはＪＤＷＰをそのまま使用するため、コンピュータ装置２００は、スレッドのうちで名称がＪＤＷＰであるスレッドの識別子を確認することにより、デバッグ規約に従って動作するスレッドを確認してよい。他の実施形態として、コンピュータ装置２００は、スレッドのうちからＪＤＷＰ機能を実行するスレッドの識別子を確認することにより、デバッグ規約に従って動作するスレッドを確認してもよい。また他の実施形態として、コンピュータ装置２００は、スレッドそれぞれのタスク情報を取得し、タスク情報に基づいてＪＤＷＰに対応するタスク情報を有するスレッドの識別子を確認することにより、デバッグ規約に従って動作するスレッドを確認してもよい。一例として、ユニックス（Ｕｎｉｘ）を使用するコンピュータ装置２００は、ＰＲＯＣファイルシステムで現在実行中のプロセス情報にアクセスしてタスク情報をインポートしてよい。このとき、コンピュータ装置２００は、ＪＤＷＰに該当するタスクによってスレッドの識別子を確認してよい。
【００３２】
段階４３０で、コンピュータ装置２００は、取得したＪａｖａ仮想マシンのハンドルから確認されたスレッドを分離して終了させてよい。このように、デバッグ規約に従って動作するスレッドを終了させることにより、Ｊａｖａデバッガ（一例として、図３を参照しながら説明したデバッガ３３０）はデバッグしようとするＪａｖａアプリケーションと通信することができなくなり、これにより、Ｊａｖａデバッガを遮断させることができるようになる。
【００３３】
一方、単にスレッドを終了させる場合には衝突が発生する恐れがあるため、コンピュータ装置２００は、スレッドをＪａｖａ仮想マシンのハンドルから分離させることで安全にスレッドを終了させることができる。
【００３４】
図５は、本発明の一実施形態における、スレッドをＪａｖａ仮想マシンのハンドルから分離させる過程の例を示したフローチャートである。図５の段階５１０〜５２０は、図４を参照しながら説明した段階４３０に含まれ、コンピュータ装置２００によって実行されてよい。
【００３５】
段階５１０で、コンピュータ装置２００は、確認されたスレッドの識別子を有する第１スレッドが終了するということを第１スレッドがＪａｖａ仮想マシンに知らせて終了するように第１スレッドを制御する処理関数を登録してよい。このような処理関数は、図４および図５の段階を実行するようにコンピュータ装置２００を制御するためのコンピュータプログラムに含まれてよく、コンピュータ装置２００は、このようなコンピュータプログラムのコードによる制御命令にしたがい、コンピュータプログラムに含まれる処理関数をＪａｖａ仮想マシンに登録してよい。
【００３６】
このような処理関数は、段階４２０で確認されたスレッド、言い換えれば、デバッグ規約に従って動作するスレッド（一例として、ＪＤＷＰスレッド）が処理関数を実行するときに、ＪＤＷＰスレッド自身が直ぐに終了するということをＪａｖａ仮想マシンに知らせるようにするコードを含んでよく、このような知らせによってＪＤＷＰスレッドが正常に終了できるような環境が造成されてよく、Ｊａｖａ仮想マシンのハンドルからＪＤＷＰスレッドが分離されてよい。また、処理関数は、ＪＤＷＰスレッドが自身を終了させるようにするためのコードをさらに含んでよく、処理関数を実行するＪＤＷＰスレッドは自主的に終了してよい。
【００３７】
段階５２０で、コンピュータ装置２００は、第１スレッドが処理関数を実行するように制御してよい。上述したように、第１スレッドが処理関数を実行することにより、第１スレッド自身が自主的に終了するということをＪａｖａ仮想マシンに知らせた後、自らを終了させるように制御することができる。
【００３８】
このとき、第１スレッドが処理関数を実行するようにするために、コンピュータ装置２００は、段階５１０で、スレッドそれぞれが処理関数を呼び出すように制御するユーザ定義シグナルをさらに登録してよく、段階５２０で、ユーザ定義シグナルを呼び出してスレッドが処理関数を呼び出すように制御してよい。より具体的な例として、ユニックス系列のオペレーティングシステムを使用するコンピュータ装置２００の場合は、「ｓｉｇａｃｔｉｏｎ（）」のような関数を利用することで、ユーザ定義シグナル（シグナルの番号）とハンドラー（処理関数）をシステム（オペレーティングシステム）上に登録してよい。例えば、コンピュータ装置２００は、コンピュータプログラムの制御にしたがって「ｓｉｇａｃｔｉｏｎ（）」関数を呼び出してよく、コンピュータプログラムが含むユーザ定義シグナルとハンドラーをコンピュータ装置２００に登録してよい。この後、コンピュータプログラムの制御にしたがい、コンピュータ装置２００が「ｋｉｌｌ（）」関数を利用してシステムに登録されたユーザ定義シグナルを呼び出すことにより、Ｊａｖａ仮想マシンが含むスレッドそれぞれが登録されたハンドラー（処理関数）を呼び出して実行するようになる。このとき、処理関数は、自身を呼び出したスレッドがＪＤＷＰスレッドであるかを確認する過程を経てよく、確認されたＪＤＷＰスレッド（第１スレッド）は、処理関数が含む機能を利用して自らを終了させるための過程を行ってよい。言い換えれば、コンピュータ装置２００は、呼び出されたユーザ定義シグナルを処理するスレッドの識別子を段階４２０で確認されたＪＤＷＰスレッドの識別子と比較して該当のスレッドが確認されたＪＤＷＰスレッドと一致するかを確認してよく、該当のスレッドがＪＤＷＰスレッドである場合には、ＪＤＷＰスレッドが処理関数を実行して自身が終了することをＪａｖａ仮想マシンに知らせ、自身をＪａｖａ仮想マシンから分離させて終了するように制御してよい。
【００３９】
上述したように、ＪＤＷＰスレッドが終了する場合には、図３を参照しながら説明したデバッガ３３０のようなＪａｖａデバッガがデバッグしようとするＪａｖａアプリケーションと通信することができなくなるため、ＪａｖａデバッガをＪａｖａアプリケーションから遮断することができる。既にＪａｖａアプリケーションとアタッチしたＪａｖａデバッガであったとしても、ＪＤＷＰスレッドの終了により、ＪａｖａデバッガとＪａｖａアプリケーションとはこれ以上の通信が不可能となるため、ＪａｖａデバッガはＪａｖａアプリケーションからデタッチ（ｄｅｔａｃｈ）して遮断される。
【００４０】
以上のように、本発明の実施形態によると、Ｊａｖａアプリケーションとデバッガとの通信を定義するデバッグ規約に従って動作するスレッドを終了させることにより、Ｊａｖａアプリケーションに対するデバッガの影響を遮断することができる。
【００４１】
上述したシステムまたは装置は、ハードウェア構成要素、ソフトウェア構成要素、またはハードウェア構成要素とソフトウェア構成要素との組み合わせによって実現されてよい。例えば、実施形態で説明された装置および構成要素は、例えば、プロセッサ、コントローラ、ＡＬＵ（ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）、デジタル信号プロセッサ、マイクロコンピュータ、ＦＰＧＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、ＰＬＵ（ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ｕｎｉｔ）、マイクロプロセッサ、または命令を実行して応答することができる様々な装置のように、１つ以上の汎用コンピュータまたは特殊目的コンピュータを利用して実現されてよい。処理装置は、オペレーティングシステム（ＯＳ）およびＯＳ上で実行される１つ以上のソフトウェアアプリケーションを実行してよい。また、処理装置は、ソフトウェアの実行に応答し、データにアクセスし、データを記録、操作、処理、および生成してもよい。理解の便宜のために、１つの処理装置が使用されるとして説明される場合もあるが、当業者は、処理装置が複数個の処理要素および／または複数種類の処理要素を含んでもよいことが理解できるであろう。例えば、処理装置は、複数個のプロセッサまたは１つのプロセッサおよび１つのコントローラを含んでよい。また、並列プロセッサのような、他の処理構成も可能である。
【００４２】
ソフトウェアは、コンピュータプログラム、コード、命令、またはこれらのうちの１つ以上の組み合わせを含んでもよく、思うままに動作するように処理装置を構成したり、独立的または集合的に処理装置に命令したりしてよい。ソフトウェアおよび／またはデータは、処理装置に基づいて解釈されたり、処理装置に命令またはデータを提供したりするために、いかなる種類の機械、コンポーネント、物理装置、仮想装置、コンピュータ記録媒体または装置に具現化されてよい。ソフトウェアは、ネットワークによって接続されたコンピュータシステム上に分散され、分散された状態で記録されても実行されてもよい。ソフトウェアおよびデータは、１つ以上のコンピュータ読み取り可能な記録媒体に記録されてよい。
【００４３】
実施形態に係る方法は、多様なコンピュータ手段によって実行可能なプログラム命令の形態で実現されてコンピュータ読み取り可能な媒体に記録されてよい。前記コンピュータ読み取り可能な媒体は、プログラム命令、データファイル、データ構造などを単独でまたは組み合わせて含んでよい。前記媒体に記録されるプログラム命令は、実施形態のために特別に設計されて構成されたものであっても、コンピュータソフトウェア当業者に公知な使用可能なものであってもよい。コンピュータ読み取り可能な記録媒体の例としては、ハードディスク、フロッピディスク、および磁気テープのような磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤのような光媒体、フロプティカルディスク（ｆｌｏｐｔｉｃａｌ  ｄｉｓｋ）のような光磁気媒体、およびＲＯＭ、ＲＡＭ、フラッシュメモリなどのようなプログラム命令を記録して実行するように特別に構成されたハードウェア装置が含まれる。プログラム命令の例には、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行される高級言語コードを含む。
【００４４】
以上のように、実施形態を、限定された実施形態および図面に基づいて説明したが、当業者であれば、上述した記載から多様な修正および変形が可能であろう。例えば、説明された技術が、説明された方法とは異なる順序で実行されたり、かつ／あるいは、説明されたシステム、構造、装置、回路などの構成要素が、説明された方法とは異なる形態で結合されたりまたは組み合わされたり、他の構成要素または均等物によって対置されたり置換されたとしても、適切な結果を達成することができる。
【００４５】
したがって、異なる実施形態であっても、特許請求の範囲と均等なものであれば、添付される特許請求の範囲に属する。
【図１】
2021530014.tif 000003
【図２】
2021530014.tif 000004
【図３】
2021530014.tif 000005
【図４】
2021530014.tif 000006
【図５】
2021530014.tif 000007
【国際調査報告】
2021530014.tif 000008
2021530014.tif 000009
2021530014.tif 000010
2021530014.tif 000011