私はインターネットを検索しましたが、なぜdecompilersが元のソースコードを生成できないのかという具体的な答えは見つかりませんでした。私は満足できる答えを得ていない。どこかに問題を止めるのに似ていると書かれていましたが、どのように伝えられていますか。では、完璧なデコンパイラを作成する上での理論的、技術的限界は何でしょうか。Decompilerが理論的に元のコードを生成できない理由
答えて
多分、多対1の問題です。例えば、Cで:コンパイラとオプティマイザが終わったら
b++;
と
b+=1;
と
b = b + 1;
は、すべての操作の同じセットにコンパイルされることがあります。それは物事を並べ替え、有効な操作をなくし、コードのセクション全体を書き換えます。それが完了するまでに、あなたが書いたことはまったく分かりません。生CPU(またはvCPU)レベルで、あなたが何を起こそうとしていたかはかなり良いアイデアです。
必要とされていない変数を除去するのに十分であってもスマートです:
{
a=5;
b=func();
c=a+b;
d=func2(c);
}
## gets rewritten as:
REGISTERA=func()
REGISTERA+=5
return(func2(REGISTERA))
まず、プログラムのコンパイル時に変数名が保持されることはありません。 ...できるだけ最高ですあなたの再構成されたプログラム全体で無意味な変数名を使用することです。コンパイルは、一般に一方向変換です(一方向ハッシュ関数のように)。ハッシュと同じように、同じ値にハッシュする可能性のあるものを生成することは可能ですが、逆コンパイルされたプログラムは元のものとまったく同じではありません。
コンパイラは、情報を捨てます。ソースコード内のすべての情報がコンパイルされたコード内にあるわけではありません。たとえば、コンパイルされたJavaでは、情報がコンパイラによってのみ使用されるため、パラメータ化されていないジェネリック型とパラメータ化されていないジェネリック型の違いを知ることはできません。一部の注釈はコンパイル時にのみ使用され、コンパイルされた出力には含まれません。つまり、逆コンパイルによって何らかのソースコードを取得できないというわけではありません。それは実際のソースコードと一致しておらず、有益でもありません。
通常、ソースコードとコンパイルコードの間には1対1の対応はありません。基本的に無限の数のソースが同じオブジェクトコード(無制限の変数名の長さなど)をもたらす可能性がある場合、デコンパイラはどのようなものを吐き出すのでしょうか?
- 1. Jax-WS論理ハンドラにWebServiceContextを挿入できない理由
- 2. 論理式と中間コードの生成
- 3. IE6/7バグ:論理的な理由のない空白があります
- 4. 自然な三元論理?
- 5. 次のコードでオブジェクトが例外を生成する理由
- 6. djangoで投稿を作成したときに私のスラッグが自動的に生成されない理由
- 7. 排他的論理和のJavaコード
- 8. Pythonの論理的なパラドックス?
- 9. ブラウザが次のコードを解析できない理由
- 10. GUI作成コードのレイアウト理論?
- 11. 論理的な問題は
- 12. 推論の型が制約から型を決定できない理由
- 13. JavaScriptファイルの論理パスを正しく生成しないスプロケット
- 14. Thread.exclusiveが "スコープ"引数を取らない論理的な理由はありますか?
- 15. 再帰的降下パーザが左回帰を処理できない理由
- 16. Cコードの行の論理
- 17. TriggerCompleteイベントが発生しない理由
- 18. マルチスレッド理論的シナリオ
- 19. Sympy:論理式のCコード
- 20. 2次元論理に詰まった
- 21. FPSが元のカメラアプリと同じでない理由
- 22. ハンドルバーテンプレート内の論理論理
- 23. アドレス帳のクラッシュが論理的でない
- 24. Subversion - コード生成の処理
- 25. Resource.Designer.csが作成されない理由
- 26. jQueryセレクタが論理でない
- 27. サブジェクトと復元力の論理ワークフロー
- 28. データベースの論理的な問題
- 29. アンドロイドアプリの論理的な問題
- 30. iOSクラウドバックエンドイベントリスニングの一般的な理論
何か、コメントなどありますか?実行された可能性があるすべての最適化はどうですか?それらを元に戻すだけですか?冷凍庫に入れて数分茹でた卵から生の卵を得ることができないのはなぜですか? – asawyer
@asawyer:類推を愛してください。 – Gerrat