- ベストアンサー
アセンブリ言語について。
アセンブリ言語と機械語は一対一で対応しているので、実行ファイルがあれば逆アセンブルすると 完全に元のアセンブリコードが復元できるのでしょうか?教えていただけないでしょうか?すみません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>どんなアセンブリ言語なら逆アセンブルで完全復元できるアセンブリコードの例を教えていただけないでしょうか?すみません。 先ほども言った通り、 すべてのマシン語は逆アセンブルで元のニーモニックに戻ります。 アセンブラソースに戻らないだけです。 元々入っていないものは、当然復元は不可能ですから。 なお、この件、追いかけるより、 別のアプローチしたほうがいいかと思いますよ。 元々不可能な件を追いかけてるように見えます。 人生は1回しかないので、多数の方向性を同時に見たほうが いい結果につながりますよ!ではでは
その他の回答 (2)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>でも逆アセンブルすると完全復元できるアセンブリコードも存在するのですよね?教えていただけないでしょうか?すみません。 #1さんが、答えてる通りですよ。 ディスアセンブルですべてのマシン語はニーモニックに戻せます。 ですので、完全復元?ということであれば、これは完全復元です。 ただし、コメントなど、そもそもアセンブル時に不要な物は、 元々入っていないのですから、逆変換は無理だということです。 例えばジャンプ命令も、絶対アドレスと相対アドレスがあり、 相対の場合、そこがラベルなのは、番地なのかは、 どちらでもいい事です。 考える必要すらないのです。 なぜなら、実行するのに不要な情報だからです。 事前にマシン語が、コンピューターが動くのに必要な バイナリコードだと覚えたはず!なので、 コンピューターが実行するのに必要ではない情報が 混ざっているなら、もはや、マシン語ではないですからね。 なお、コンパイラーを使う言語でも、 普通はコメント類や関数名、変数名その他は、 入りませんので、この場合でも、捨てられます。 理由は、「コンピューターが実行するのに必要ではない情報」だからです。 「普通は」の逆が「デバッグ情報入り」なのですが、 ステップトレースをIDEの上で使用するもので、 通常入っていないと思って正しいですよ。 ということで回答は >実行ファイルがあれば逆アセンブルすると >完全に元のアセンブリコードが復元できるのでしょうか? 「アセンブリコード」は完全に復元できる。 しかし、アセンブラソースではなく、あくまで 逆アセンブルで得られる部分のみになる。 それと、もう1つ、 実行「ファイル」と書かれているので、気になりましたが。 実行ファイルの機械語と実行中の機械語には、 少々違いがあります。 実行リロケーションで変換されるエリアもあり、 必ずしも同じとは限らないので、ご注意を。
- neKo_quatre
- ベストアンサー率44% (735/1636)
アセンブリ言語の中で人間が分かりやすいようにラベルとか使ってるなら、ラベルやコメントは復元できません。 例えば、 Wikipedia - CASL#サンプルコード https://ja.wikipedia.org/wiki/CASL#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89 はCASL IIなんか久々に見る自分でもわかりやすいですが、 これをコードに変換、逆変換すると、ラベルが消えちゃって、例えば、 LD GR0,$1a4 LD GR1,$1a6 LD GR2,$1a8 LD GR3,$1aa CALL $10c RET CPA GR0,=1 JZE $14a SUBA GR0,=1 PUSH 0,GR2 ~ みたいな事になって、何やってるのか確認するのは大変です。
お礼
どんなアセンブリ言語なら逆アセンブルで完全復元できるアセンブリコードの例を教えていただけないでしょうか?すみません。
補足
でも逆アセンブルすると完全復元できるアセンブリコードも存在するのですよね?教えていただけないでしょうか?すみません。
補足
どんなアセンブリ言語なら逆アセンブルで完全復元できるアセンブリコードの例を教えていただけないでしょうか?すみません。