csapp 実験用バイナリ爆弾

この実験をしたことを記録するためにこのブログを書いていますが、最初は楽しかったのですが、今では一問一答できたときの達成感はありますが、とても疲れました。
これで、コードで goto が使用されたり、変数名が標準化されていなかったりすると、どれほどひどいことになるか想像できます (笑)。
2 番目のバージョンを作成しましたが、公式 Web サイトからダウンロードした 3 番目のバージョンが実行できない理由がわかりません。見た

http://wdxtub.com/2016/04/16/thick-csapp-lab-2/

、トピックは少し異なりますが、非常に役立ちます。
各質問のアイデア:
1. そのメモリ アドレスに格納されている文字列の内容を直接確認します。
2. 数回押して、それが階乗であることがわかります。
3. 多くの分岐がありますが、1 つを選択するだけです。
4. 再帰関数、 5. 理解するためにオンラインで答えを
検索しました. 入力文字の下位 4 ビットは文字配列にマッピングされ、特定のシーケンスをマッピングする必要があります。
6. コードが長すぎます。飛び回ってめまいがします...
7. 隠しレベルはもうやりません。次回振り返って勉強します。
ここに画像の説明を書きます

要約する

ソース コードの前処理 (#include ファイルの挿入、#define の置き換え)
コンパイラはアセンブリ コードをコンパイルして生成します。 gcc -S main.c アセンブラ
はアセンブリ コードをバイナリ オブジェクト コード ファイルに変換します。 gcc -c main.c
リンカはオブジェクト コードを変換します。 file ライブラリ関数を実装するコードとマージして、最終的な実行可能ファイルを生成します。 gcc -o prog main.c



objdump -d は、アセンブリ コードを逆アセンブルして表示できます。コンパイルするときは、 gcc -Og -c main.c -Og を使用するのが最善です。 -Og は、元の C 言語の全体的な構造に準拠する最適化レベルのマシン コードを生成するようにコンパイラに指示します。より高度な最適化を使用すると、理解は難しくなりますが、パフォーマンスは向上します。


すごいですね、プログラムコードを逆アセンブルすると分かりにくいですが…
これを学んで何の役に立つのでしょう?今はまだ理解できていませんが、時間があるときにとても面白いので勉強していきたいと思います。
csapp の本は本当に強力です。これもわかりにくいです、まだ第3章を読んでいます。

付録の
回答
ここに画像の説明を書きます

おすすめ

転載: blog.csdn.net/ZhaoBuDaoFangXia/article/details/71659983