JP2015179318A - バイナリコードの実行を制御する装置及び方法 - Google Patents

バイナリコードの実行を制御する装置及び方法 Download PDF

Info

Publication number
JP2015179318A
JP2015179318A JP2014055409A JP2014055409A JP2015179318A JP 2015179318 A JP2015179318 A JP 2015179318A JP 2014055409 A JP2014055409 A JP 2014055409A JP 2014055409 A JP2014055409 A JP 2014055409A JP 2015179318 A JP2015179318 A JP 2015179318A
Authority
JP
Japan
Prior art keywords
binary code
code
rewriting
self
trace
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.)
Granted
Application number
JP2014055409A
Other languages
English (en)
Other versions
JP6103541B2 (ja
Inventor
川人 基弘
Motohiro Kawahito
基弘 川人
俊彦 孝壽
Toshihiko Takasu
俊彦 孝壽
シン トン
Xin Tong
シン トン
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2014055409A priority Critical patent/JP6103541B2/ja
Priority to US14/634,018 priority patent/US9430205B2/en
Priority to US14/746,875 priority patent/US9626169B2/en
Publication of JP2015179318A publication Critical patent/JP2015179318A/ja
Priority to US15/057,340 priority patent/US9760357B2/en
Priority to US15/437,530 priority patent/US10241768B2/en
Application granted granted Critical
Publication of JP6103541B2 publication Critical patent/JP6103541B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/568Computer malware detection or handling, e.g. anti-virus arrangements eliminating virus, restoring damaged files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Abstract

【課題】自己書き換えコード(SMC)による書き換えが発生したことによって変換バイナリコードの一部が使用できなくなった状態から復帰する処理のパフォーマンスを向上する。
【解決手段】DBTのランタイム50では、SMC検出部51が、オリジナルバイナリコードのSMCによる書き換えの発生を検出し、トレース特定部54が、SMCによる書き換えの発生の検出に応じて、オリジナルバイナリコードを最適化して得られた最適化バイナリコードのSMCによる書き換えの影響を受けるトレースを特定し、トレース修正部55が、複数のスレッドのうちのこのトレースを実行したスレッドが例外を発生するようにこのトレースを修正し、スレッド実行制御部56が、例外が発生した際に、SMCにより書き換えられたオリジナルバイナリコードのトレースを、例外を発生したスレッドが実行するように制御する。
【選択図】図6

Description

本発明は、バイナリコードの実行を制御する装置及び方法に関する。特に、本発明は、複数のスレッドによるバイナリコードの実行を制御する装置及び方法に関する。
オリジナルバイナリコードを変換して得られた変換バイナリコードを実行中にオリジナルバイナリコードの一部が自分自身を書き換えることがある。このような自分自身を書き換えるコードを自己書き換えコード(SMC;Self-Modifying Code)と呼ぶ。このSMCによる書き換えが発生すると、書き換えられた部分に対応する変換バイナリコードの部分は使用できなくなる。
このような自己書き換えコードに関する技術は、公報記載の技術としても知られている(例えば、特許文献1〜3参照)。
特許文献1は、保護されたページに対する書き込みを試みると(たとえば自己修正コードによる、あるいはテキストとデータが混合されたページに対する書き込み)それがトラップされ、そのページが再度保護なしにセットされることを開示する。
特許文献2は、自己書換えコードが使用されて、命令が頻繁に書換えられるのでその変換が「オリジナル」の状態に繰返し戻るため、その命令を変換しようとする試みが無駄であるような場合にも、タイプEXECUTEDの命令は使用されることを開示する。
特許文献3は、セグメンテーション違反は、ターゲット・コードが、自己書き換えコードへの書き込みを試みるといった、メモリの保護された領域へのアクセスを試みる場合を検出するために、トラップとして意図的に導入することができることを開示する。
特開2011−40087号公報 特表2002−502516号公報 特表2010−525440号公報
上記のように、SMCによる書き換えが発生すると、変換バイナリコードの一部が使用できなくなるので、そのような状態から復帰する必要がある。その際、復帰する処理のパフォーマンスの向上が望まれる。
特許文献1〜3の技術は、自己書き換えコードに関するものではあるが、このような復帰する処理のパフォーマンスを向上するための手段を提案するものではない。
本発明の目的は、SMCによる書き換えが発生したことによって変換バイナリコードの一部が使用できなくなった状態から復帰する処理のパフォーマンスを向上することにある。
かかる目的のもと、本発明は、複数のスレッドによるバイナリコードの実行を制御する装置であって、第1のバイナリコードの部分である第1の部分の自己書き換えコードによる書き換えの発生を検出する検出部と、第1の部分の自己書き換えコードによる書き換えの発生の検出に応じて、第1のバイナリコードを変換して得られた第2のバイナリコードの第1の部分に対応する部分である第2の部分を特定する特定部と、複数のスレッドのうちの第2のバイナリコードの第2の部分を実行した特定スレッドが例外を発生するように第2の部分を修正する修正部とを含む、装置を提供する。
この装置において、修正部は、第2の部分に含まれる複数の命令のうち、第1の部分に含まれる自己書き換えコードにより書き換えられた命令に対応する少なくとも1つの命令を、割り込み命令で置き換えることにより、第2の部分を修正する、ものであってよい。
また、この装置は、例外が発生した際に、自己書き換えコードにより書き換えられた第1のバイナリコードの第1の部分を特定スレッドが実行するように制御する制御部を更に含む、ものであってよい。その場合、制御部は、第2のバイナリコードの第2の部分以外の部分から第2の部分へのリンクを切り離した後に、第1のバイナリコードの第1の部分を特定スレッドが実行するように制御する、ものであってよい。
更に、この装置は、第1の部分の少なくとも一部が記憶されたメモリ領域であって自己書き換えコードにより書き換えられた命令を含むメモリ領域であるページが、ページ保護がかかっておらず使用されていない仮想ページにマッピングされた状態を、特定部が第2の部分を特定し、修正部が第2の部分を修正する間、維持する維持部を更に含む、ものであってよい。
また、本発明は、複数のスレッドによるバイナリコードの実行を制御する装置であって、オリジナルバイナリコードを最適化することにより、最適化バイナリコードを生成する生成部と、最適化バイナリコードを複数のスレッドが実行中に、オリジナルバイナリコードの部分である第1の部分の自己書き換えコードによる書き換えの発生を検出する検出部と、第1の部分の自己書き換えコードによる書き換えの発生の検出に応じて、最適化バイナリコードの第1の部分に対応する部分である第2の部分を特定する特定部と、複数のスレッドのうちの最適化バイナリコードの第2の部分を実行した特定スレッドが例外を発生するように第2の部分を修正する修正部と、例外が発生した際に、自己書き換えコードにより書き換えられたオリジナルバイナリコードの第1の部分を特定スレッドが実行するように制御する制御部とを含む、装置も提供する。
更に、本発明は、複数のスレッドによるバイナリコードの実行を制御する方法であって、第1のバイナリコードの部分である第1の部分の自己書き換えコードによる書き換えの発生を検出するステップと、第1の部分の自己書き換えコードによる書き換えの発生の検出に応じて、第1のバイナリコードを変換して得られた第2のバイナリコードの第1の部分に対応する部分である第2の部分を特定するステップと、複数のスレッドのうちの第2のバイナリコードの第2の部分を実行した特定スレッドが例外を発生するように第2の部分を修正するステップとを含む、方法も提供する。
更にまた、本発明は、複数のスレッドによるバイナリコードの実行を制御する装置として、コンピュータを機能させるプログラムであって、コンピュータを、第1のバイナリコードの部分である第1の部分の自己書き換えコードによる書き換えの発生を検出する検出部と、第1の部分の自己書き換えコードによる書き換えの発生の検出に応じて、第1のバイナリコードを変換して得られた第2のバイナリコードの第1の部分に対応する部分である第2の部分を特定する特定部と、複数のスレッドのうちの第2のバイナリコードの第2の部分を実行した特定スレッドが例外を発生するように第2の部分を修正する修正部として機能させる、プログラムも提供する。
本発明によれば、SMCによる書き換えが発生したことによって変換バイナリコードの一部が使用できなくなった状態から復帰する処理のパフォーマンスが向上する。
本発明の実施の形態におけるバイナリ変換装置の機能構成例を示した図である。 最適化コードキャッシュに記憶されているトレースの例について示した図である。 (a)はオリジナルバイナリコードの命令列を示した図であり、(b)は動作している全てのスレッドに対してグローバル同期を行うことを示した図であり、(c)はグローバル同期を行った後に取り除くべき最適化バイナリコードの命令列を示した図である。 (a)は最適化バイナリコードの命令列が特定されることを示した図であり、(b)はポイズニングを行った後の命令列を示した図であり、(c)はポイズニングを行った後の命令列で割込みが発生することを示した図である。 新たなトレースの呼び出しの変更に先立って行われる無効なトレースへの分岐の切り離し等について示した図である。 本発明の実施の形態におけるランタイムの機能構成例を示した図である。 本発明の実施の形態におけるランタイムの動作例を示したフローチャートである。 本発明の実施の形態におけるDBTのハードウェア構成例を示した図である。
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
[本実施の形態の概要]
図1は、本実施の形態におけるバイナリ変換装置(命令エミュレータ)1の機能構成例を示した図である。図示するように、このバイナリ変換装置1は、オリジナルコードキャッシュ10と、最適化コードキャッシュ20と、DBT(Dynamic Binary Translator)30とを含む。DBT30は、オプティマイザ40と、ランタイム50とを含む。
オリジナルコードキャッシュ10は、オプティマイザ40による最適化前のオリジナルバイナリコードを記憶する。
最適化コードキャッシュ20は、オプティマイザ40による最適化後の最適化バイナリコードを記憶する。
オプティマイザ40は、オリジナルコードキャッシュ10に記憶されたオリジナルバイナリコードを最適化することにより最適化バイナリコードを生成し、この最適化バイナリコードを最適化コードキャッシュ20に記憶する。本実施の形態では、最適化バイナリコードを生成する生成部の一例として、オプティマイザ40を設けている。
ランタイム50は、最適化コードキャッシュ20に記憶された最適化バイナリコードの複数のスレッドによる実行を制御する。特に、最適化バイナリコードを複数のスレッドが実行中にオリジナルバイナリコードがSMCにより書き換えられた場合における実行を制御する。
[本実施の形態の背景]
バイナリ変換装置1でSMCに対処するのに、普通に考えられる手法ではコストがかかる。以下、このことについて具体的に説明する。
図2は、最適化コードキャッシュ20に記憶されているトレースの例について示した図である。ここで、トレースとは、1つの入り口及び複数の出口を有するコンパイル単位である。図では、トレース0xAA,0xBB,0xCC,0xDD,0xEEが記憶されている。また、このうち、トレース0xEEは、「Invalid」の表記で示すように無効になっているものとする。更に、図では、トレース内にそのトレースを実行しているスレッドの名前も示している。例えば、スレッドT1はトレース0xCCを実行しており、スレッドT2はトレース0xBBを実行している。一方、スレッドT5は無効になったトレース0xEEを実行している。しかしながら、DBT30(図1参照)はそのことを絶対に知り得ない。DBT30はコードキャッシュ内の各スレッドが実行している場所を明示的に追跡しないからである。このように、コードキャッシュ内のどこをスレッドが実行しているかを特定する効率の良いメカニズムがないため、グローバル同期が必要とされる。
図3は、このようなグローバル同期について示した図である。(a)は、オリジナルコードキャッシュ10に記憶されているオリジナルバイナリコードのトレース0xEEの命令列11を示す。この命令列11において、下線で示したように、スレッドT5がSMCによりアドレス「0x402F38」を書き換えたものとする。これにより、図2に示したように、トレース0xEEは無効になる。(b)は、動作している全てのスレッドT1〜T5に対して、グローバル同期を行うことを示している。(c)は、グローバル同期を行った後に取り除くべき、最適化コードキャッシュ20に記憶されている最適化バイナリコードのトレース0xEEの命令列21を示す。即ち、逐次一貫性を強化するために、DBT30(図1参照)は、全てのスレッドに対してグローバル同期を行い、無効なトレースを取り除く。しかしながら、グローバル同期を行うと、全てのスレッドを停止させる必要があるので、処理が遅くなる。
また、グローバル同期を行おうとすると、無限の待ち状態に陥る可能性がある。例えば、スレッドの1つは条件付きの変数で待っているが、他のスレッドは同期ポイントで待っているといった状態である。つまり、スレッドの1つが、ある変数の値が1になるのを待っていたとする。その場合、このスレッドは、他のスレッドがグローバル同期で停止すると、その変数の値が1になるのを待ち続けるので、グローバル同期は実現できなくなってしまう。
[本実施の形態の概要]
そこで、本実施の形態では、SMCによる書き換えを発生させたスレッドを用いて、無効になったトレースに対して、ソフトウェア割込み命令を書き込む修正を行う。本実施の形態では、この修正のことを「ポイズニング」と呼ぶ。
図4は、このようなポイズニングについて示した図である。(a)は、オリジナルコードキャッシュ10に記憶されているオリジナルバイナリコードのトレース0xEEでSMCによる書き換えが発生すると、最適化コードキャッシュ20に記憶されている最適化バイナリコードのトレース0xEEの命令列21が特定されることを示す。(b)は、最適化バイナリコードの無効なトレース0xEEに対してポイズニングを行った後の命令列22を示している。ここで、ソフトウェア割込み命令とは、例えば、x86におけるint3命令である。(c)は、トレース0xEEに対してポイズニングを行った後の命令列22をスレッドT4が実行することにより割込みが発生することを示している。このようにすれば、動作している全てのスレッドT1〜T5の中から、トレース0xEEを実行したスレッドを特定できるようになるので、グローバル同期を行う必要はなくなる。その後、DBT30(図1参照)は、トレースポインズニングが行われたトレース0xEEに代えて、新たなトレース0xEEを呼び出すように変更する。
図5は、この新たなトレースの呼び出しの変更に先立って行われる無効なトレース0xEEへの分岐の切り離し等について示した図である。DBT30のランタイム50は、無効なトレース0xEEへ入って来る全ての分岐を切り離す。図中、トレース0xDDからトレース0xEEへの矢印上の「×」がこの切り離しを表している。また、ランタイム50は、全てのトレースの開始アドレスを記憶しているので、無効なトレース0xEEの開始アドレスを、新たなトレース0xEEの開始アドレスに置き換える。図中、ランタイム50からトレース0xEEへの矢印上の「×」がこの開始アドレスの置き換えを表している。全てのスレッドがSMCによる書き換えの発生後に少なくとも1回トレースから抜け出たことをランタイム50が認識した場合、トレースは安全に取り除かれる。
[本実施の形態におけるランタイムの機能構成]
図6は、以上のような概略動作を行うランタイム50の機能構成例を示した図である。図示するように、このランタイム50は、SMC検出部51と、マッピング処理部52と、フラグ設定部53と、トレース特定部54と、トレース修正部55と、スレッド実行制御部56とを備える。
SMC検出部51は、オリジナルコードキャッシュ10にページ保護をかけ、オリジナルバイナリコードのあるトレースに含まれる命令がSMCにより書き換えられようとしたことを検出する。また、オリジナルバイナリコードのページをマッピング処理部52がマッピングした仮想ページを介して、オリジナルバイナリコードのSMCによる書き換えを許可する。本実施の形態では、第1のバイナリコードの一例として、オリジナルバイナリコードを用いており、第1のバイナリコードの部分である第1の部分として、オリジナルバイナリコードのトレースを用いている。また、第1の部分の自己書き換えコードによる書き換えの発生を検出する検出部の一例として、SMC検出部51を設けている。
マッピング処理部52は、オリジナルバイナリコードのSMCによる書き換えを可能とするために、オリジナルバイナリコードのページを、ページ保護がかかっておらず使用されていない仮想ページにマッピングする。ここで、マッピングするページは、トレースの少なくとも一部が記憶されたメモリ領域であってSMCにより書き換えられた命令を含むメモリ領域であればよい。また、マッピングは、トレース特定部54がトレースを特定し、トレース修正部55がトレースを修正し、SMC検出部51がSMCによる書き換えを許可した後に解除する。本実施の形態では、ページがマッピングされた状態を維持する維持部の一例として、マッピング処理部52を設けている。
フラグ設定部53は、オリジナルバイナリコードがSMCにより書き換えられようとしたことをSMC検出部51が検出すると、SMC処理中フラグを設定する。具体的には、初期状態では、SMC処理中フラグをオフとし、あるトレースに含まれる命令がSMCにより書き換えられようとしたことをSMC検出部51が検出すると、そのトレースに対するSMC処理中フラグをオンにし、オプティマイザ40も参照可能なメモリに保持しておく。そして、オプティマイザ40が実行する全てのスレッドは最適化を行う前にこのSMC処理中フラグをチェックする。これは、読込みロック又は書込みロックで実装できる。即ち、通常の最適化を行う場合は読込みロックが保持されるが、SMCによる書き換えが発生した場合は書込みロックが保持される。最適化を行うコストは読込みロック又は書込みロックを保持するコストよりもはるかに大きいと思われる。これにより、他のスレッドは、SMC処理中フラグがオンになっている場合は、最適化を行わないようにする。
トレース特定部54は、オリジナルバイナリコードのSMCにより書き換えられようとしたトレースに対応する最適化バイナリコードのトレースを特定する。本実施の形態では、第1のバイナリコードを変換して得られた第2のバイナリコードの一例として、最適化バイナリコードを用いており、第2のバイナリコードの第1の部分に対応する部分である第2の部分の一例として、最適化バイナリコードのトレースを用いている。また、第2の部分を特定する特定部の一例として、トレース特定部54を設けている。
トレース修正部55は、トレース特定部54により特定された最適化バイナリコードのトレースに含まれる全ての命令をソフトウェア割込み命令で上書きすることにより、ポイズニングを行う。或いは、オリジナルバイナリコードのSMCにより書き換えられようとした命令に対応する命令列のみをソフトウェア割込み命令で上書きしてもよいが、本実施の形態では、トレースに含まれる全ての命令をソフトウェア割込み命令で上書きするものとして説明する。本実施の形態では、第2のバイナリコードの第2の部分を修正する修正部の一例として、トレース修正部55を設けている。
スレッド実行制御部56は、複数のスレッドによる最適化バイナリコードの実行を制御する。また、トレース修正部55が書き込んだソフトウェア割込み命令を実行したスレッドが例外を発生させた場合には、オリジナルバイナリコードのSMCにより書き換えられたトレースをそのスレッドが実行するように制御する。本実施の形態では、自己書き換えコードにより書き換えられた第1のバイナリコードの第1の部分を特定スレッドが実行するように制御する制御部の一例として、スレッド実行制御部56を設けている。
[本実施の形態におけるランタイムの動作]
図7は、本実施の形態におけるランタイム50の動作例を示したフローチャートである。
図示するように、ランタイム50では、まず、SMC検出部51が、オリジナルコードキャッシュ10に記憶されているオリジナルバイナリコードがSMCにより書き換えられようとしたことを検出する(ステップ501)。具体的には、オリジナルコードキャッシュ10に記憶されているオリジナルバイナリコードにページ保護をかける。この状態でSMCによりオリジナルバイナリコードが書き換えられようとすると、割込みが発生するので、オリジナルバイナリコードがSMCにより書き換えられようとしたことを検出できる。
すると、SMC検出部51は、オリジナルコードキャッシュ10に記憶されているオリジナルバイナリコードのSMCにより書き換えられようとした命令を特定する(ステップ502)。オリジナルバイナリコードがSMCにより書き換えられようとしたことを検出すると、書き換えられようとしたアドレスは分かる。一方で、命令とアドレスとの対応は命令コードの識別情報やレジスタ情報の取得、分岐先の修正等のために分析済みであるので、SMCにより書き換えられようとした命令は容易に特定できる。
次に、マッピング処理部52が、オリジナルコードキャッシュ10に記憶されているオリジナルバイナリコードのSMCにより書き換えられようとした命令を含むページを、ページ保護がかかっておらず使用されていない仮想ページにマッピングする(ステップ503)。ここで、使用されていない仮想ページは、LINUX(登録商標)では、「/proc/pid/maps」に問い合わせを行うことにより見つけることができる。また、WINDOWS(登録商標)では、「MapViewOfFileEx()」にNULLを渡すことにより見つけることができる。グローバル同期を行わずに書込みを行う場合、ページ保護ビットをオフにすることができないので、このような仮想ページへのマッピングが必要となる。
また、フラグ設定部53が、一連の処理が成功及び失敗の何れかになり、かつ、処理の途中で他からアクセスできないように、SMC処理中フラグをオンにする(ステップ504)。
このようにSMC処理中フラグがオンになった状態で、まず、トレース特定部54が、最適化コードキャッシュ20に記憶されているトレースのうち、オリジナルバイナリコードのSMCによる書き換えの影響を受ける全てのトレースを見つける(ステップ505)。
次に、トレース修正部55が、ステップ505で見つけたSMCによる書き換えの影響を受ける全てのトレースに対してソフトウェア割込み命令を書き込む修正(ポイズニング)を行う(ステップ506)。これにより、ポイズニングが行われたトレースを実行したスレッドは、割込みを発生させる。
次いで、SMC検出部51が、オリジナルコードキャッシュ10に記憶されているオリジナルバイナリコードのステップ502で特定した命令に対し、命令を分析した情報を用いて、SMCによる書き換えを行う(ステップ507)。これにより、ステップ506に対応して割込みを発生させたスレッドが、オリジナルバイナリコードのSMCにより書き換えられたトレースを実行するよう、スレッド実行制御部56が制御する。その際、スレッド実行制御部56は、図5に示したように、最適化バイナリコードの無効なトレースへの他のトレースからのリンクを切り離した後に、オリジナルバイナリコードのSMCにより書き換えられたトレースをスレッドが実行するよう、制御する。
これらの処理が終了すると、フラグ設定部53が、ステップ504でオンにしたSMC処理中フラグをオフにする(ステップ508)。ここで、ステップ505からステップ507の重要な部分は短くなることが期待される。
また、マッピング処理部52は、ステップ503で行ったオリジナルバイナリコードのページの仮想ページへのマッピングを解除する(ステップ509)。SMCに関する処理を行っている途中で、別のスレッドが同じページに対してSMCによる書き換えを行った場合においても、これを高速に処理できるよう、このタイミングまでマッピングした状態を維持している。
尚、この動作例では、オリジナルバイナリコードのSMCにより書き換えられたトレースをステップ507の直後に実行できることを述べたが、ステップ509の処理の終了後にそのトレースを実行するようにしてもよい。
ところで、本実施の形態において、ポイズニングが行われたトレースを実行したスレッドは、オリジナルバイナリコードのSMCにより書き換えられたトレースを実行するようにしたが、この限りではない。オリジナルバイナリコードのSMCにより書き換えられたトレースを再度最適化することにより、最適化バイナリコードのトレースを生成し、この最適化バイナリコードのトレースを実行するようにしてもよい。
また、本実施の形態では、オリジナルバイナリコードに対して最適化する変換を行うバイナリ変換装置1に本発明を適用した場合について説明したが、この限りではない。オリジナルバイナリコードに対して如何なる変換を行うバイナリ変換装置1であっても本発明は適用可能である。
以上述べたように、本実施の形態では、オリジナルバイナリコードがSMCにより書き換えられると、オリジナルバイナリコードを変換して得られた変換バイナリコードの影響を受けるトレースを特定し、そのトレースを実行したスレッドが例外を発生するようにそのトレースを修正するようにした。これにより、SMCによる書き換えが発生したことによって変換バイナリコードの一部が使用できなくなった状態から復帰する処理のパフォーマンスを向上させることが可能となった。
[本実施の形態の電子書籍表示装置のハードウェア構成]
図8は、本実施の形態におけるDBT30のハードウェア構成例を示した図である。図示するように、DBT30は、演算手段であるCPU(Central Processing Unit)30aと、M/B(マザーボード)チップセット30bを介してCPU30aに接続されたメインメモリ30cと、同じくM/Bチップセット30bを介してCPU30aに接続された表示機構30dとを備える。また、M/Bチップセット30bには、ブリッジ回路30eを介して、ネットワークインターフェイス30fと、磁気ディスク装置(HDD)30gと、音声機構30hと、キーボード/マウス30iと、フレキシブルディスクドライブ30jとが接続されている。
尚、図8において、各構成要素は、バスを介して接続される。例えば、CPU30aとM/Bチップセット30bの間や、M/Bチップセット30bとメインメモリ30cの間は、CPUバスを介して接続される。また、M/Bチップセット30bと表示機構30dとの間は、AGP(Accelerated Graphics Port)を介して接続されてもよいが、表示機構30dがPCI Express対応のビデオカードを含む場合、M/Bチップセット30bとこのビデオカードの間は、PCI Express(PCIe)バスを介して接続される。また、ブリッジ回路30eと接続する場合、ネットワークインターフェイス30fについては、例えば、PCI Expressを用いることができる。また、磁気ディスク装置30gについては、例えば、シリアルATA(AT Attachment)、パラレル転送のATA、PCI(Peripheral Components Interconnect)を用いることができる。更に、キーボード/マウス30i、及び、フレキシブルディスクドライブ30jについては、USB(Universal Serial Bus)を用いることができる。
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム(装置又は機器)、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ(CD−ROM)、コンパクトディスク−リード/ライト(CD−R/W)及びDVDが含まれる。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
10…オリジナルコードキャッシュ、20…最適化コードキャッシュ、30…DBT、40…オプティマイザ、50…ランタイム、51…SMC検出部、52…マッピング処理部、53…フラグ設定部、54…トレース特定部、55…トレース修正部、56…スレッド実行制御部

Claims (8)

  1. 複数のスレッドによるバイナリコードの実行を制御する装置であって、
    第1のバイナリコードの部分である第1の部分の自己書き換えコードによる書き換えの発生を検出する検出部と、
    前記第1の部分の前記自己書き換えコードによる書き換えの発生の検出に応じて、前記第1のバイナリコードを変換して得られた第2のバイナリコードの当該第1の部分に対応する部分である第2の部分を特定する特定部と、
    前記複数のスレッドのうちの前記第2のバイナリコードの前記第2の部分を実行した特定スレッドが例外を発生するように当該第2の部分を修正する修正部と
    を含む、装置。
  2. 前記修正部は、前記第2の部分に含まれる複数の命令のうち、前記第1の部分に含まれる前記自己書き換えコードにより書き換えられた命令に対応する少なくとも1つの命令を、割り込み命令で置き換えることにより、当該第2の部分を修正する、請求項1の装置。
  3. 前記例外が発生した際に、前記自己書き換えコードにより書き換えられた前記第1のバイナリコードの前記第1の部分を前記特定スレッドが実行するように制御する制御部を更に含む、請求項1又は請求項2の装置。
  4. 前記制御部は、前記第2のバイナリコードの前記第2の部分以外の部分から当該第2の部分へのリンクを切り離した後に、前記第1のバイナリコードの前記第1の部分を前記特定スレッドが実行するように制御する、請求項3の装置。
  5. 前記第1の部分の少なくとも一部が記憶されたメモリ領域であって前記自己書き換えコードにより書き換えられた命令を含むメモリ領域であるページが、ページ保護がかかっておらず使用されていない仮想ページにマッピングされた状態を、前記特定部が前記第2の部分を特定し、前記修正部が当該第2の部分を修正する間、維持する維持部を更に含む、請求項1乃至請求項4の何れかの装置。
  6. 複数のスレッドによるバイナリコードの実行を制御する装置であって、
    オリジナルバイナリコードを最適化することにより、最適化バイナリコードを生成する生成部と、
    前記最適化バイナリコードを複数のスレッドが実行中に、前記オリジナルバイナリコードの部分である第1の部分の自己書き換えコードによる書き換えの発生を検出する検出部と、
    前記第1の部分の前記自己書き換えコードによる書き換えの発生の検出に応じて、前記最適化バイナリコードの当該第1の部分に対応する部分である第2の部分を特定する特定部と、
    前記複数のスレッドのうちの前記最適化バイナリコードの前記第2の部分を実行した特定スレッドが例外を発生するように当該第2の部分を修正する修正部と、
    前記例外が発生した際に、前記自己書き換えコードにより書き換えられた前記オリジナルバイナリコードの前記第1の部分を前記特定スレッドが実行するように制御する制御部と
    を含む、装置。
  7. 複数のスレッドによるバイナリコードの実行を制御する方法であって、
    第1のバイナリコードの部分である第1の部分の自己書き換えコードによる書き換えの発生を検出するステップと、
    前記第1の部分の前記自己書き換えコードによる書き換えの発生の検出に応じて、前記第1のバイナリコードを変換して得られた第2のバイナリコードの当該第1の部分に対応する部分である第2の部分を特定するステップと、
    前記複数のスレッドのうちの前記第2のバイナリコードの前記第2の部分を実行した特定スレッドが例外を発生するように当該第2の部分を修正するステップと
    を含む、方法。
  8. 複数のスレッドによるバイナリコードの実行を制御する装置として、コンピュータを機能させるプログラムであって、
    前記コンピュータを、
    第1のバイナリコードの部分である第1の部分の自己書き換えコードによる書き換えの発生を検出する検出部と、
    前記第1の部分の前記自己書き換えコードによる書き換えの発生の検出に応じて、前記第1のバイナリコードを変換して得られた第2のバイナリコードの当該第1の部分に対応する部分である第2の部分を特定する特定部と、
    前記複数のスレッドのうちの前記第2のバイナリコードの前記第2の部分を実行した特定スレッドが例外を発生するように当該第2の部分を修正する修正部と
    して機能させる、プログラム。
JP2014055409A 2014-03-18 2014-03-18 バイナリコードの実行を制御する装置及び方法 Active JP6103541B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2014055409A JP6103541B2 (ja) 2014-03-18 2014-03-18 バイナリコードの実行を制御する装置及び方法
US14/634,018 US9430205B2 (en) 2014-03-18 2015-02-27 Controlling execution of binary code
US14/746,875 US9626169B2 (en) 2014-03-18 2015-06-23 Controlling execution of binary code
US15/057,340 US9760357B2 (en) 2014-03-18 2016-03-01 Controlling execution of binary code
US15/437,530 US10241768B2 (en) 2014-03-18 2017-02-21 Controlling execution of binary code

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014055409A JP6103541B2 (ja) 2014-03-18 2014-03-18 バイナリコードの実行を制御する装置及び方法

Publications (2)

Publication Number Publication Date
JP2015179318A true JP2015179318A (ja) 2015-10-08
JP6103541B2 JP6103541B2 (ja) 2017-03-29

Family

ID=54142176

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014055409A Active JP6103541B2 (ja) 2014-03-18 2014-03-18 バイナリコードの実行を制御する装置及び方法

Country Status (2)

Country Link
US (4) US9430205B2 (ja)
JP (1) JP6103541B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7483950B2 (ja) 2020-06-22 2024-05-15 アップル インコーポレイテッド バイナリ変換を実行するためのシステム及び方法

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6103541B2 (ja) 2014-03-18 2017-03-29 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation バイナリコードの実行を制御する装置及び方法
EP3931330A4 (en) 2019-02-25 2023-03-15 Ginkgo Bioworks, Inc. BIOSYNTHESIS OF CANNABINOIDS AND CANNABINOID PRECURSORS

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001519955A (ja) * 1997-08-11 2001-10-23 トランスメタ・コーポレーション 先進のプロセッサのための変換メモリ保護装置
US20100333090A1 (en) * 2009-06-30 2010-12-30 Sun Microsystems, Inc. Method and apparatus for protecting translated code in a virtual machine
JP2012198657A (ja) * 2011-03-18 2012-10-18 Fujitsu Ltd 命令処理方法、命令処理装置、及び命令処理プログラム

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5896522A (en) 1996-12-31 1999-04-20 Unisys Corporation Selective emulation interpretation using transformed instructions
EP1151374B1 (en) 1999-01-28 2017-08-02 Advanced Silicon Technologies, LLC Executing programs for a first computer architecture on a computer of a second architecture
US6820255B2 (en) * 1999-02-17 2004-11-16 Elbrus International Method for fast execution of translated binary code utilizing database cache for low-level code correspondence
US20020016601A1 (en) * 2000-01-03 2002-02-07 Shadduck John H. Instruments and techniques for inducing neocollagenesis in skin treatments
US6820254B2 (en) * 2001-03-19 2004-11-16 International Business Machines Corporation Method and system for optimizing code using an optimizing coprocessor
CA2346766A1 (en) * 2001-05-07 2002-11-07 Ibm Canada Limited-Ibm Canada Limitee Efficient locking for thread-safe self-modifying code
US7934204B2 (en) 2003-07-15 2011-04-26 International Business Machines Corporation Partitioning code in program code conversion
US7707578B1 (en) * 2004-12-16 2010-04-27 Vmware, Inc. Mechanism for scheduling execution of threads for fair resource allocation in a multi-threaded and/or multi-core processing system
JP3938580B2 (ja) 2004-12-21 2007-06-27 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、情報処理方法、半導体装置、コンピュータプログラム
US7577826B2 (en) * 2006-01-30 2009-08-18 Sony Computer Entertainment Inc. Stall prediction thread management
US20080005269A1 (en) * 2006-06-29 2008-01-03 Knighton Mark S Method and apparatus to share high quality images in a teleconference
CA2557343C (en) * 2006-08-28 2015-09-22 Ibm Canada Limited-Ibm Canada Limitee Runtime code modification in a multi-threaded environment
GB2448523B (en) 2007-04-19 2009-06-17 Transitive Ltd Apparatus and method for handling exception signals in a computing system
US8850574B1 (en) * 2011-02-28 2014-09-30 Google Inc. Safe self-modifying code
US8813227B2 (en) * 2011-03-29 2014-08-19 Mcafee, Inc. System and method for below-operating system regulation and control of self-modifying code
US8856789B2 (en) * 2012-09-06 2014-10-07 Assured Information Security, Inc. Facilitating execution of a self-modifying executable
JP2014052969A (ja) 2012-09-10 2014-03-20 Renesas Electronics Corp クロック周波数制御装置、半導体装置
GB2518827A (en) 2013-09-30 2015-04-08 Ibm Reading from a tape storage medium
JP6103541B2 (ja) 2014-03-18 2017-03-29 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation バイナリコードの実行を制御する装置及び方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001519955A (ja) * 1997-08-11 2001-10-23 トランスメタ・コーポレーション 先進のプロセッサのための変換メモリ保護装置
US20100333090A1 (en) * 2009-06-30 2010-12-30 Sun Microsystems, Inc. Method and apparatus for protecting translated code in a virtual machine
JP2012198657A (ja) * 2011-03-18 2012-10-18 Fujitsu Ltd 命令処理方法、命令処理装置、及び命令処理プログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6017001941; 中島康彦,外3名: '動的命令変換手法によるMアーキテクチャ・エミュレーション' 情報処理学会論文誌 第38巻,第11号, 19971115, Pages:2309〜2320, 社団法人情報処理学会 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7483950B2 (ja) 2020-06-22 2024-05-15 アップル インコーポレイテッド バイナリ変換を実行するためのシステム及び方法

Also Published As

Publication number Publication date
US20160179492A1 (en) 2016-06-23
US20150293754A1 (en) 2015-10-15
US9430205B2 (en) 2016-08-30
US9760357B2 (en) 2017-09-12
US20170161041A1 (en) 2017-06-08
US20150268942A1 (en) 2015-09-24
JP6103541B2 (ja) 2017-03-29
US10241768B2 (en) 2019-03-26
US9626169B2 (en) 2017-04-18

Similar Documents

Publication Publication Date Title
US7757221B2 (en) Apparatus and method for dynamic binary translator to support precise exceptions with minimal optimization constraints
CN1103079C (zh) 用于高级微处理器的门控存储缓冲器
US8495337B2 (en) Translated memory protection
US5832205A (en) Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed
JP6006248B2 (ja) 命令エミュレーションプロセッサ、方法、およびシステム
US7596781B2 (en) Register-based instruction optimization for facilitating efficient emulation of an instruction stream
US8990786B2 (en) Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture
TWI733717B (zh) 從亂序處理器中的不良儲存-至-負載轉發復原的方法與設備
US8839218B2 (en) Diagnosing alias violations in memory access commands in source code
WO2019236294A1 (en) Storing incidental branch predictions to reduce latency of misprediction recovery
JP6103541B2 (ja) バイナリコードの実行を制御する装置及び方法
CN103942082A (zh) 一种消除冗余的内存访问操作的编译优化方法
JP3621116B2 (ja) 先進のプロセッサのための変換メモリ保護装置
JP2009134565A (ja) 仮想計算機システム及び仮想計算機システムの制御方法
US9383935B1 (en) Secondary CPU MMU initialization using page fault exception
US10922180B2 (en) Handling uncorrected memory errors inside a kernel text section through instruction block emulation
JP2001519954A (ja) 一時的にターゲット・プロセッサの状態を保持する装置を備えたホスト・マイクロプロセッサ
US8352714B2 (en) Executing watchpoint instruction in pipeline stages with temporary registers for storing intermediate values and halting processing before updating permanent registers
CN104166633B (zh) 用于存储器访问保护的方法和系统
US20100077145A1 (en) Method and system for parallel execution of memory instructions in an in-order processor
JP6300512B2 (ja) 判定装置、判定方法、及び、プログラム
JP2015115052A (ja) マイクロプロセッサ、コンピュータ、異常対応方法、及び異常対策プログラム
JP2005284647A (ja) 並列処理装置、命令再試行方法、およびプログラム
JP2005078131A (ja) プログラム実行方法およびマイクロコントローラ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161227

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20170131

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170221

R150 Certificate of patent or registration of utility model

Ref document number: 6103541

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150