逆アセンブラのソースを表示
←
逆アセンブラ
移動先:
案内
、
検索
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
'''逆アセンブラ'''('''ぎゃくアセンブラ'''、disassembler ディスアセンブラ)とは、コンピュータ([[CPU]])が解釈可能な[[機械語]]を、人間から見て解釈しやすい[[ニーモニック]]([[アセンブリ言語]])に変換するプログラムをいう。技術者の間では'''逆アセ'''と呼ばれる事もある。 アセンブリ言語以外の[[高級言語]]等への変換を行う[[プログラム (コンピュータ)|プログラム]]は[[逆コンパイラ]](decompiler デコンパイラ)と呼ばれ区別される。 ==概要== コンピュータが直接実行できるプログラムは数字の羅列である機械語であり、人間が直接理解することは困難である。この機械語は、人間にわかりやすい[[ソースコード]]を、[[アセンブラ]]や[[コンパイラ]]、[[リンケージエディタ|リンカ]]といったソフトウェアによって機械的に変換して得られたものに過ぎないので、プログラマはソースコードを理解してソフトウェアを開発すればよい。しかし、すでに機械語に変換されており、元のソースコードも手に入らない場合は、アセンブリとは逆の手順をたどる(逆アセンブリする)ことで擬似的にソースコードを復元することができる。 ===リバースエンジニアリングツールとしての逆アセンブラ=== 秘匿されている、紛失したなどの理由によりソースコードが入手できないプログラムの動作を知りたい場合、プログラムの機械語を人間が直接理解することは困難であるため、より人間に理解しやすいニーモニックに変換して解析の手助けとするために逆アセンブラを利用する。 人間に理解しやすいといっても、それはあくまでも機械語と比べて、という意味である。逆アセンブル結果からプログラムの内部動作を知り元のソースコードを推定するまでの作業は一種の暗号解読のような困難な作業であり、非常に高度な技能を持つ技術者が膨大な手間と労力をかけて初めて達成されるものである。 但し、プログラムの動作を解析されると様々な利害が絡むこともあるため、商用ソフトウェアの[[ライセンス]]には逆アセンブルなどによる[[リバースエンジニアリング]]を禁止する文言があることが多く、また[[契約]]の場合にも同様である。 しかし、ソフトウェア[[特許]]の侵害を立証するために行われる逆アセンブルについては、これを禁止する契約の効力は及ばない。また、リバースエンジニアリングを禁止する[[著作権法]]上の法理については、平成20年の時点で文化庁でも検討中である( http://www.bunka.go.jp/chosakuken/singikai/housei/h20_07/shiryo_1.html )。 ===デバッガとしての逆アセンブラ=== 高級言語により作成されたソフトウェアの[[デバッグ]]の手段として逆アセンブラを用いることがある。 このためには独立した逆アセンブラを利用することもあるが、[[デバッガ]]の機能の一部として提供される、ソースコードと機械語と逆アセンブル結果を混合して表示する「混合モード」(Mixモードとも言う)を利用することも多い。 高級言語は機械語に[[コンパイル]]することによって[[実行ファイル|実行形式]]を得るが、時として、[[プログラマ]]が意図した高級言語のコーディングと、コンパイラが意図したコンパイル結果が一致しない事がある。また、あまり市場に出回っていないマイナーなコンパイラには[[バグ]]も多いため、時として間違ったコンパイルを行うことがある。このような場合は、コンパイル前のソースコードをいくら眺めてもバグの原因を見極める事は困難であるため、実行コードである機械語を直接検証する必要がある。しかし前述の通り、機械語を人間が直接理解することは困難なので、機械語と一対一で対応するニーモニックに変換して表示する逆アセンブル機能をデバッガが提供している。 デバッグシンボル情報が実行形式に付加されている場合は、デバッガは逆アセンブル結果と一緒にソースコードも表示できるため<ref>この機能を持つデバッガを特にシンボリックデバッガまたはソースレベルデバッガと呼ぶ。</ref>、プログラマがその意味を理解することは比較的易しい。開発中のソフトウェアにはデバッグシンボル情報が付加されているが、デバッグシンボル情報は巨大なファイルであるため、市場にリリースするソフトウェアからは除去するのが普通である。除去したデバッグシンボル情報を保管しておく習慣のある開発組織はほとんどない<ref>ソフトウェア開発環境の[[ブラックボックス]]化が進んだため、そもそもデバッグシンボル情報が何かを理解している開発者が少ない</ref>ため、市場で発生したバグを逆アセンブルによって解析することは、時として他人が開発したソフトウェアを逆アセンブルによってリバースエンジニアリングするのと同様の困難を伴う。 ==脚注== <references/> ==関連項目== *[[クリーンルーム設計]] *[[アセンブラ]] *[[コンパイラ]] *[[逆コンパイラ]] *[[機械語]] *[[アセンブリ言語]] *[[高級言語]] *[[ニーモニック]] *[[データフロー解析]] *[[制御フローグラフ]] *[[binutils | GNU Binary Utilities]] ==外部リンク== *[http://www.vector.co.jp/vpack/filearea/win/prog/asm/index.html アセンブラ・逆アセンブラ] [[Vector]]のダウンロードページ [[Category:ソフトウェア開発ツール|きやくあせんふら]] [[Category:バグ|きやくあせんふら]]
逆アセンブラ
に戻る。
案内メニュー
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
その他
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
新しいページ
最近の更新
おまかせ表示
sandbox
commonsupload
ヘルプ
ヘルプ
井戸端
notice
bugreportspage
sitesupport
ウィキペディアに関するお問い合わせ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報