ディスアセンブルとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > デジタル大辞泉 > ディスアセンブルの意味・解説 

ディスアセンブル【disassemble】

読み方:でぃすあせんぶる

逆アセンブル


ディスアセンブル

別名:逆アセンブル
【英】disassemble

ディスアセンブルとは、0と1で表現される機械語によって書かれプログラム記述オブジェクトコード)を、より人間の言語に近い英数字記述であるアセンブリ言語による記述ソースコード)に変換することである。なお、ディスアセンブルを行うためのプログラムディスアセンブラと呼ぶ。

元のソースコード含まれている変数名などが、アセンブル行った際になくなっているため、ディスアセンブルによって、完全に元のソースコード復元することは難しい。ただし、CPUメモリ対する処理動作記述したソースプログラム作成されるため、ソフトウェア解析手段として用いられるまた、通常、プログラムデバッガは、逆アセンブル機能備えているため、メモリ領域指定することで、必要な部分逆アセンブルが可能である。

なお、ソフトウェアの利用規定などで著作権保護観点から、ディスアセンブルを禁止している場合もあるので注意が必要である。

ソフトウェアのほかの用語一覧
プログラミング:  シンプソン係数  ステップ  ディスアセンブラ  ディスアセンブル  デコンパイラ  デコンパイル  統合開発環境

逆アセンブラ

(ディスアセンブル から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/02/15 09:57 UTC 版)

逆アセンブラ(ぎゃくアセンブラ、: disassembler; ディスアセンブラ)とは、逆コンパイラの一種であるが、実行ファイルまたはオブジェクトファイル機械語コード(とシンボルテーブルなどの付随情報)を基に、アセンブリ言語のソースコードを生成する、すなわちアセンブラの逆の作用をするものを特に指す。一般の(高水準言語コードを生成するような)逆コンパイラよりも比較的容易である。

概要

コンピュータのプロセッサCPUGPUなど)が直接実行できるプログラムは数値の羅列(バイナリ)である機械語であり、人間が直接理解することは困難である。コンピュータの性能が低く、プログラムの規模が極めて小さかった時代では、機械語そのものや機械語に1対1で対応する命令を持つアセンブリ言語(低水準言語)でプログラムが直接書かれていたこともあったが、このようなプログラミング形態はメンテナンス性や再利用性が極めて低かった。コンピュータの性能が向上し、プログラムが大規模化するにつれて、PascalC言語、あるいはそれらから発展した各種の派生言語のような、人間に分かりやすい高水準言語で書かれることが主流となっていった。機械語は、最終的にプロセッサが直接実行できるネイティブコードであることには変わりないが、低水準言語または高水準言語で書かれたソースコードを、アセンブラコンパイラリンカといったソフトウェアによって機械的に変換して得られたものに過ぎないので、プログラマはソースコードを理解してソフトウェアを開発・メンテナンスすればよい。

すでに機械語に変換されており、元のソースコードも手に入らない場合は、アセンブルとは逆の手順をたどる(逆アセンブルする)ことで擬似的にソースコードを復元することができる可能性がある。ただしプログラミング言語から機械語への変換は一般に不可逆変換であり、APIABIとしてモジュール外部に公開される一部のメタ情報を除いて、ソースコード内に書かれてあったコメントや、内部的な実装に使われているローカル変数の名前、条件分岐やループの実装に使用されていた構文[注釈 1]といったような高度な情報はほとんど失なわれてしまうため、機械語から元のソースコードを完全に復元することは不可能である。

リバースエンジニアリングツールとしての逆アセンブラ

秘匿されている、紛失したなどの理由によりソースコードが入手できないプログラムの動作を知りたい場合、プログラムの機械語を人間が直接理解することは困難であるため、より人間に理解しやすいニーモニックに変換して解析の手助けとするために逆アセンブラを利用する。

人間に理解しやすいといっても、それはあくまでも機械語と比べて、という意味である。逆アセンブル結果からプログラムの内部動作を知り、元のソースコードを推定するまでの作業は一種の暗号解読のような困難な作業であり、非常に高度な技能を持つ技術者が膨大な手間と労力をかけて初めて達成されるものである。

ただし、プログラムの動作を解析されると様々な利害が絡むこともあるため、商用ソフトウェアのライセンスには逆アセンブルなどによるリバースエンジニアリングを禁止する文言があることが多く、また契約の場合にも同様である。

しかし、ソフトウェア特許の侵害を立証するために行われる逆アセンブルについては、これを禁止する契約の効力は及ばない。また、ライセンスや契約でリバースエンジニアリングを禁止する法理について日本では、2008年(平成20年)の時点で文化庁でも検討中である[1]

デバッガとしての逆アセンブラ

高水準言語により作成されたソフトウェアのデバッグの手段として逆アセンブラを用いることがある。このためには独立した逆アセンブラを利用することもあるが、デバッガの機能の一部として提供される、ソースコードと機械語と逆アセンブル結果を混合して表示する「混合モード」(Mixモードとも言う)を利用することも多い。

高水準言語は機械語(または仮想機械向けの中間表現)にコンパイルすることによって実行形式を得るが、時としてプログラマが意図した高水準言語のコーディングと、コンパイラが生成したコンパイル結果が一致しないことがある。これは主に、C言語やC++の言語仕様で未定義動作とされている危険なコードを誤って記述してしまったときに、コンパイラの最適化工程におけるアグレッシブな仮定によって発生しやすい。また、コンパイラにはバグがあることもあり、時として間違ったコンパイルを行うことがある[注釈 2]。このような場合は、コンパイル前のソースコードをいくら眺めてもバグの原因を見極めることは困難であるため、実行コードである機械語を直接検証する必要がある。しかし前述の通り、機械語を人間が直接理解することは困難なので、機械語と1対1で対応するニーモニックに変換して表示する逆アセンブル機能をデバッガが提供している。

デバッグシンボル情報が実行形式に付加されている場合は、デバッガは逆アセンブル結果と一緒にソースコードも表示できるため[注釈 3]、プログラマがその意味を理解することは比較的易しい。開発中のソフトウェアのバイナリには通例デバッグシンボル情報が付加されるが、デバッグシンボル情報は巨大なファイルであり、またリバースエンジニアリングに役立つ情報も含まれているため、市場にリリースするソフトウェアのバイナリからは除去するのが普通である。除去したデバッグシンボル情報を保管しておく習慣のある開発組織は、ほとんどないため、エンドユーザー環境で発生したバグを逆アセンブルによって解析することは、時として他人が開発したソフトウェアを逆アセンブルによってリバースエンジニアリングするのと同様の困難を伴う。

サンプル

オンライン逆アセンブルサイト[2][3]を利用すると、個別CPUの命令とみなした逆アセンブルを試すことができる。

例えば、00Z80 CPUの機械語として逆アセンブルするとnopVAX CPUの機械語として逆アセンブルするとhaltとなり、i8086 CPUの機械語として逆アセンブルすると00というデータ(命令とはみなされない)となる。00 00AVR CPUの機械語として逆アセンブルするとnopV850 CPUの機械語として逆アセンブルするとnopとなり、ARM CPUの機械語として逆アセンブルするとmovs r0, r0i8086 CPUの機械語として逆アセンブルするとadd %al,(%bx,%si)i386 CPUの機械語として逆アセンブルするとadd BYTE PTR [eax], alMIPS16英語版 CPUの機械語として逆アセンブルするとaddiu s0,sp,0となる。00 00 00 00MIPS CPUの機械語として逆アセンブルするとnopMC68000 CPUの機械語として逆アセンブルするとorib #0,%d0となり、Alpha CPUの機械語として逆アセンブルするとhaltとなる。

脚注

注釈

  1. ^ 例えばCの場合、ループを実現する制御文にはfor文while文do-while文があり、プログラマは状況や好みによって使い分けるが、これらは本質的には糖衣構文にすぎず、機械語に変換すると同じ結果が生成されることが多い。さらにCには原始的なgoto文if文を用いてループを書くという選択肢すらある。
  2. ^ 規模にもよるが、バグが一切ないソフトウェアはほとんどない。コンパイラもソフトウェアの一種であり、例外ではない。処理系自体の知名度を問わず、複雑な仕様の言語コンパイラや、テストが十分なされていないコンパイラにはバグが混入しやすい。
  3. ^ この機能を持つデバッガを特にシンボリックデバッガまたはソースレベルデバッガと呼ぶ。

出典

  1. ^ リバース・エンジニアリングに係る法的課題についての論点”. 2022年10月4日閲覧。
  2. ^ Online Disassembler” (英語). onlinedisassembler.com. 2021年1月13日閲覧。
  3. ^ Online Assembler and Disassembler” (英語). shell-storm.org. 2024年5月17日閲覧。

関連項目

ツール群

外部リンク



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ディスアセンブル」の関連用語

ディスアセンブルのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ディスアセンブルのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【ディスアセンブル】の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの逆アセンブラ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS