「逆アセンブラ」の版間の差分

削除された内容 追加された内容
m Category:バグを除去; Category:デバッグを追加 (HotCat使用)
編集の要約なし
1行目:
{{出典の明記|date=2014年11月}}
'''逆アセンブラ'''('''ぎゃくアセンブラ'''、{{lang-en-short|disassembler}}; ディスアセンブラ)は、[[逆コンパイラ]]の一種であるが、[[実行ファイル]]ないし[[オブジェクトファイル]]の[[機械語]]コード(とシンボルテーブルなどの付随情報)を基に、[[アセンブリ言語]]ソースコードを生成する、すなわちアセンブラの逆の作用をするものを特に指す。技術者の間では俗に'''逆アセ'''などとも略される。一般の([[高水準言語]]コードを生成するような)逆コンパイラよりも比較的容易である。
 
==概要==
6行目:
 
===リバースエンジニアリングツールとしての逆アセンブラ===
秘匿されている、紛失したなどの理由によりソースコードが入手できないプログラムの動作を知りたい場合、プログラムの機械語を人間が直接理解することは困難であるため、より人間に理解しやすい[[ニーモニック]]に変換して解析の手助けとするために逆アセンブラを利用する。
 
人間に理解しやすいといっても、それはあくまでも機械語と比べて、という意味である。逆アセンブル結果からプログラムの内部動作を知り元のソースコードを推定するまでの作業は一種の暗号解読のような困難な作業であり、非常に高度な技能を持つ技術者が膨大な手間と労力をかけて初めて達成されるものである。
12行目:
但し、プログラムの動作を解析されると様々な利害が絡むこともあるため、商用ソフトウェアの[[ライセンス]]には逆アセンブルなどによる[[リバースエンジニアリング]]を禁止する文言があることが多く、また[[契約]]の場合にも同様である。
 
しかし、ソフトウェア[[特許]]の侵害を立証するために行われる逆アセンブルについては、これを禁止する契約の効力は及ばない。また、ライセンスや契約でリバースエンジニアリングを禁止する法理については、平成20年の時点で文化庁でも検討中である( http://www.bunka.go.jp/chosakuken/singikai/housei/h20_07/shiryo_1.html {{リンク切れ|date=2019-07}})。
 
===デバッガとしての逆アセンブラ===
18行目:
このためには独立した逆アセンブラを利用することもあるが、[[デバッガ]]の機能の一部として提供される、ソースコードと機械語と逆アセンブル結果を混合して表示する「混合モード」(Mixモードとも言う)を利用することも多い。
 
高級言語は機械語に[[コンパイル]]することによって[[実行ファイル|実行形式]]を得るが、時として、[[プログラマ]]が意図した高級言語のコーディングと、コンパイラが意図したコンパイル結果が一致しない事がある。また、あまり市場に出回っていないマイナーなコンパイラには[[バグ]]があること多いためあり、時として間違ったコンパイルを行うことがある<ref>規模にもよるが、バグが一切ないソフトウェアはほとんどない。コンパイラもソフトウェアの一種であり、例外ではない。処理系自体の知名度を問わず、複雑な仕様の言語コンパイラや、テストが十分なされていないコンパイラにはバグが混入しやすい。</ref>。このような場合は、コンパイル前のソースコードをいくら眺めてもバグの原因を見極める事は困難であるため、実行コードである機械語を直接検証する必要がある。しかし前述の通り、機械語を人間が直接理解することは困難なので、機械語と一対一で対応するニーモニックに変換して表示する逆アセンブル機能をデバッガが提供している。
 
デバッグシンボル情報が実行形式に付加されている場合は、デバッガは逆アセンブル結果と一緒にソースコードも表示できるため<ref>この機能を持つデバッガを特にシンボリックデバッガまたはソースレベルデバッガと呼ぶ。</ref>、プログラマがその意味を理解することは比較的易しい。開発中のソフトウェアのバイナリには通例デバッグシンボル情報が付加されているが、デバッグシンボル情報は巨大なファイルであり、またリバースエンジニアリングに役立つ情報も含まれているため、市場にリリースするソフトウェアのバイナリからは除去するのが普通である。除去したデバッグシンボル情報を保管しておく習慣のある開発組織は、ほとんどない<ref>{{独自研究範囲|date=2019-07|皮肉なことだが、それが必要になるような組織であればあるほど、保存していないだろう(保存しているような組織であれば、そもそも逆アセンブルが必要になるようなこと自体が起きない)。}}</ref><ref>ソフトウェア開発環境の[[ブラックボックス]]化が進んだため、そもそもデバッグシボル情報が何かを理解している開発者が少ない</ref>ため、市場ドユーザー環境で発生したバグを逆アセンブルによって解析することは、時として他人が開発したソフトウェアを逆アセンブルによってリバースエンジニアリングするのと同様の困難を伴う。
 
==脚注==
<references/>
 
==関連項目==
*[[クリーンルーム設計]]