[ad_1]
一目瞭然。 これはどのように作動しますか?
MinGW コンパイラと CMD を使用して、別の C コードから派生したアセンブリ コードがあります。 (なぜそれを導き出したかは聞かないでください。)
私の目標は、逆コンパイラなどの任意のアプリケーションを使用して、このアセンブリ コードを C/C++ コードに変換することですか?
私が試したこと:
そのプログラムの CMD コード:
gcc -s -o main.s main.c
現在、.s ファイル (アセンブリ ファイル) を持っていますが、変換できない限り、これはまったく役に立たないようです。
ところで、デコンパイラが最も正確ではないことは知っていますが、それは出発点です。そうです、アセンブリから C へのコンバーターは役に立たないようです。
私の目標のために、実行可能な解決策をいくつか提供していただければ幸いです。 私の質問やこのプログラムのロジックに誤りがありましたら、ご容赦ください。
解決策 3
問題は、自動変換を使用すると、結果のコードが魔法のように以前よりも読みやすくならないことです。 データ構造が何であるかを理解し、アルゴリズムとサブルーチンのパターンを認識し、一般的なデータとプログラムの構造を導き出すには、多大な努力と優れた分析が必要です。 その知識があれば、適切な C/C++ データ構造を作成でき、場合によってはそのタスクを自動化するスクリプトを作成することもできます。
次に、関数を識別し、学んだことに従って適切な名前を付けるか、不明な場合は一時的な名前を付けることができます。 関数の開始時と終了時にコール スタックの構築と破棄を識別するのは難しくありません。次にそれを行います。
実際のコードの大部分は、おそらく 1 対 1 で変換できます。少なくとも、少しスクリプトを作成するだけで自動化できます。 しかし、簡単に翻訳できない部分が残ります。 おそらく、それらのそれぞれを個別に調べる必要があります。
ただし、大きな問題は、変換後にそれをどうしたいか、そしてこれがすべての努力に値するかどうかです。
1. コードの機能を単純に理解したい場合は、アセンブリに固執し、その機能を調べて、ドキュメントを追加することをお勧めします。
2. 何らかの方法で動作を調整したい場合は、アセンブリ コードを変更することをお勧めします。少なくともコード全体を理解する必要はなく、変更する部分だけを理解する必要があります。
3. 別のプラットフォームに移植する場合は、代わりに最初から書き直すことを検討してください。そのほうがはるかに簡単です。
解決策 1
解決策 2
もちろん、最善の解決策はオリジナルにアクセスすることです C
アセンブリが「派生」したコード形式。
アセンブリ コードを他の (C
) ソースファイル、 gcc
両方のタイプを扱います。
最後のオプションは最も難しいものです。アセンブリ コードが何をするのかを理解し、そのような機能を C
プログラム。
解決策 9
void checkTriangle(int x1, int y1, int x2,
int y2、int x3、int y3)
{
int a = x1 * (y2 – y3) + x2 * (y3 – y1) + x3 * (y1 – y2);
もし (a == 0)
cout << "いいえ";
それ以外
cout << "はい";
}
[ad_2]
コメント