実行可能なバイナリ ファイルに文字を挿入すると、ファイルが「破損」するのはなぜですか?
また、コンパイルされたプログラムを壊さずに文字を追加する方法はありますか?
バックグラウンド
16 進エディタを使用して、コンパイル済みの実行可能ファイルのコードを変更し、通常どおり実行できることは長い間知っていました...
例
以下のアプリケーションの例として、Facebook
を に変更してLacebook
も、プログラムは問題なく実行されます。
しかし、それは新しいキャラクターで壊れます
また、新しいキャラクターを追加すると、プログラムが壊れて実行されなくなったり、すぐにクラッシュしたりすることも承知しています。たとえば、My
の前に追加すると、次のようにFacebook
なります。
私が知っていること
- 私はいくつかの作業を行い、コードが人間が読める形式で記述され、コンパイルされ、実行可能ファイルにリンクされている
C
ことを理解しています。 - アセンブリ言語の初歩的な研究を行い、移動するデータ、コマンド、およびポインターに関する概念を理解しています。
- Windows、Mac、Linux 用の小さなプログラムを作成しました
わからないこと
- オペレーティング システムと実行可能ファイルの関係がよくわかりません。プログラムの名前を入力してリターンキーを押すと、基本的にオペレーティングシステムにそのファイルを「実行」するように指示していると思います。これは、基本的に、ファイルをメモリにロードし、プロセッサのポインタをそれに設定し、それを伝えることを意味します'行け!'
- バイナリ ファイルのテキスト文字列に余分な文字が含まれていると問題が発生する理由を理解しています
知りたいこと
- 余分な文字が原因でプログラムが壊れるのはなぜですか?
- プログラムが壊れていると判断するのは何ですか? OS?また、OS はこのプログラムをサンドボックス化して、最近システム全体をクラッシュさせないようにしていますか?
- コンパイルされたプログラムのテキスト文字列に 16 進エディタを使用して余分な文字を追加し、アプリケーションが壊れないようにする方法はありますか?