そこには、 C / C + +のコードが実行可能プログラムに変換するdecompilerの任意の希望はありますか?
このFAQに答えるボブスタウトが断片からの抜粋です。
あなたの息を止めてはいけません。 それについて考えて... 一decompilerは正しく、どちらか1 )すべてのコンパイラは、実質同一のコードを生成するには、完全な最適化もしていただろうかがオンになっ2 )全てのコンパイラのコードジェネレータの出力は、個々の作業を認識する必要があります。
最初のケースの場合は、正確であるとされ、そこには、コンパイラのベンチマークごとに1つ増やす必要があるので、同じ仕事とされる。 2番目のケースについては、すべての新しいコンパイラのリリースで変更することが非常に複雑なプログラムで必要となる事実である。
それでは、特定のコンパイラの特定のdecompilers - decompilerについてのみコード、言うのBC + + 4.5で生成さ動作するように設計と言うかこの権利は再び我々の最適化問題になる。 コードを明確にするために書かれたと非効率よく理解されています。 コードの最大性能(速度やサイズ)のために書かしばしばあいまいです(最高の状態で! )このような事実は、すべてのモダンなコンパイラの最適化を有効にするには、スイッチの最適化技術を避けるために制御するための多数を追加します。 一番下の行は、合理的に大規模、複雑な信号源モジュールの場合、単純に最適化モジュールのスイッチを変更することで、これを自動的に認識することができますdecompilerはdeoptimizerが必要になるさまざまなオブジェクトのコードを生成しているコンパイラを得ることですがコンパイル時に最適化の戦略が有効になっていた。
のさらなる簡素化して、あなたが1つだけ、特定のコンパイラをサポートするようにしたい場合は、最も論理ソースコードへの最適化を解釈しようとせずに逆コンパイルするように指定させてください。 何を? オプティマイザは、実質的に良いので、自分自身のdecompilerされ、謎めいたいないだけ出るが、お使いのコードの内部を書き換えることができますが、多くの場合、後藤文や他の良いコーディングなしの練習だらけ。 この時点で、ソースをデコンパイルしているが、それはいいですか?
ソースモジュールへの参照も慎重に注意してください。 Cの1つの特徴を簡単に維持可能な限りソースモジュール( 。 cファイル)に分かれ、主読めなくなることです。 どのようにすることでdecompiler対応するのか? のいずれかをいくつかの巨大なmain ( )関数には、全体のプログラムを逆コンパイルするには、すべてのモジュールを失ってできる、または、独自のファイルにそれぞれの場所と呼ばれる機能を試みる可能性がある。 カオスを生成すると使用できなくなる2番目の問題になると1つ目の方法は、複数の機能を静的なデータおよび/または1つまたは複数の機能を1つまたは複数の静的関数を使用して呼び出すと、元のソース倒角ファイル。 のdecompiler (すでに)は受け入れられない、静的データおよび/または機能が、世界的な費用や、読みやすさをするだけで可能性がある。
最後に、多くの場合は、商用アプリケーションではほとんど不可能アセンブラは、 Cと同等にデコンパイルすることが最も難しいかを証明するタイムクリティカルな機能のコードを覚えています。
今言ったように、あなたの息を止めることはありません。 技術がdecompilers 、オプティマイザーや言語を実行可能になる場合がありますし、 ( c改善+ + 、たとえば、 Cよりも大幅に強化デコンパイルするための言語)を共謀する可能性も少ないだろう。
年間のUnixアプリケーションのソース形式(マシンではなく、人間の読める-すべてのコメントと空白OOIIOIOIなど) 、これは著者の権利を守ることを意味しているのは、非常に適切な形式で、変数名をすべて削除包まれている分散されている。 が非常にdecompiler出力も可能性として読み取れるのソース包まれている。
アップデート: Decompiler技術はまだ非常に困難ですが、この書かれて以来、大幅に進歩されている。
読むdecompiler何ですか? decompilerプロジェクトの更新情報があります。
|
ブックマークそこには 、 C / C + +のコードが実行可能プログラムに変換するにdecompilerの任意の希望はありますか?
最新のブログの投稿
- 乾燥方法は 、 携帯電話を連絡先に水で 、 是非のに
- 最高のクリスマスプレゼントは 、 技術の

