「逆アセンブラ」の版間の差分
削除された内容 追加された内容
Peachberry (会話 | 投稿記録) m編集の要約なし |
|||
1行目:
'''逆アセンブラ'''('''ぎゃくアセンブラ
アセンブリ言語以外の[[高級言語]]等への変換を行う[[プログラム (コンピュータ)|プログラム]]は[[逆コンパイラ]]
==概要==
コンピュータが直接実行できるプログラムは数字の羅列である機械語であり、人間が直接理解することは困難である。この機械語は、人間にわかりやすい[[ソースコード]]を、[[アセンブラ]]や[[コンパイラ]]、[[リンケージエディタ|リンカ]]といったソフトウェアによって機械的に変換して得られたものに過ぎないので、プログラマはソースコードを理解してソフトウェアを開発すればよい。しかし、以下のような場合には、プログラマはソースコードではなく機械語を理解する必要に迫られる。
===[[リバースエンジニアリング]]ツールとしての逆アセンブラ===
秘匿されている、紛失したなどの理由によりソースコードが入手できないプログラムの動作を知りたい場合、プログラムの機械語を人間が直接理解することは困難であるため、より人間に理解しやすいニーモニックに変換して解析の手助けとするために逆アセンブラを利用する。
人間に理解しやすいといっても、それはあくまでも機械語と比べ
但し、プログラムの動作を解析されるとノウハウの流出となるほか様々な利害が絡むこともあるため、商用ソフトウェアでは使用契約によって逆アセンブルなどによるリバースエンジニアリングを禁止していることが普通である。一方で、ソフトウェア[[特許]]の侵害を立証するためには逆アセンブルが不可欠であるから、このような場合には逆アセンブル
===デバッガとしての逆アセンブラ===
18 ⟶ 19行目:
高級言語は機械語に[[コンパイル]]することによって実行形式を得るが、時として、[[プログラマ]]が意図した高級言語のコーディングと、コンパイラが意図したコンパイル結果が一致しない事がある。また、あまり市場に出回っていないマイナーなコンパイラには[[バグ]]も多いため、時として間違ったコンパイルを行うことがある。このような場合は、コンパイル前のソースコードをいくら眺めてもバグの原因を見極める事は困難であるため、実行コードである機械語を直接検証する必要がある。しかし前述の通り、機械語を人間が直接理解することは困難なので、機械語と一対一で対応するニーモニックに変換して表示する逆アセンブル機能をデバッガが提供している。
デバッグシンボル情報が実行形式に付加されている場合は、デバッガは逆アセンブル結果と一緒にソースコードも表示できるため、プログラマがその意味を理解することは比較的易しい。開発中のソフトウェアにはデバッグシンボル情報が付加されているが、デバッグシンボル情報は巨大なファイルであるため、市場にリリースするソフトウェアからは除去するのが普通である。残念ながら除去したデバッグシンボル情報を保管しておく習慣のある開発組織はほとんどない(ソフトウェア開発環境の[[ブラックボックス]]化が進んだため、そもそもデバッグシンボル情報が何かを理解している開発者が少ない)ため、市場で発生したバグを逆アセンブルによって解析することは、時として他人が開発したソフトウェアを逆アセンブルによってリバースエンジニアリングする
==関連項目==
|