達成するために考えた特定のメカニズムではなく、達成しようとしていることを説明できれば、この質問に答えるのがはるかに簡単になります。
実行中の実行可能ファイルの変更は、通常、最新のオペレーティング システムによって防止されており、正当な理由 (セキュリティ、整合性など) により防止されています。また、同様の理由から、ディスク上の実行可能ファイルを変更することもお勧めできません。自己変更コードに頼らずに、あなたが望むものを達成する他の方法があると確信しています。
「hello world」に初期化された文字配列を持つ ac コードがあります。コードを実行するたびに、この文字配列を他のランダムな文字列に再初期化する可能性があるかどうかを知りたいです。
はい、可能ですが、実行可能ファイルへの書き込みアクセス権をユーザーに付与し、バイナリで正しいオフセットを見つけ、ファイルにパッチを適用してアトミックにそのまま保存する必要があります。これには多くの方法があります。違う。このようにしないでください。
実行可能ファイル自体に静的に割り当てられた文字列の代わりに、文字列とその他の必要な状態を含む別のリソース ファイルを用意します。このリソース ファイル (INI ファイル、データ ファイルなど) を変更して、必要に応じて文字列を変更できます (または削除することもできます)。セキュリティを確保するために、ファイルにデジタル署名を付けることができます。これにより、コンテンツが正当であることを確認できます。署名に失敗すると、ソフトウェアは動作を拒否できます。コンテンツを暗号化して、好奇心旺盛なユーザーが読み取れないようにすることもできます。(デバッガが便利でない限り!)
C でない場合、そのような実装が他のプログラミング言語で可能かどうかを教えてもらえますか?
これは主に OS の制限であり、通常のユーザーがシステム フォルダーにインストールされたアプリに書き込むことができること (通常は許可したくないもの) が含まれます。そして、C でできないのなら、おそらく他の言語ではできないでしょう!
このコードを 1 回実行した後、char 配列 c を他のランダムな文字列 (「hello world」ではなく) に自動的に初期化する必要があり、これは永続的な変更である必要があります。…そんなことが可能かどうか知ってもいいですか?
確かにそうですが、上記のように別のファイルを使用してください。実行可能ファイル自体を変更しないでください。
この必要性は、セキュリティ上の理由からです。
そもそも自己変更コードが許可されていない理由は、セキュリティ上の理由からです。ある種のコピー保護を実装しようとしている場合は、既存の方法とツール、およびベスト プラクティスを調査し、場合によっては既製のソリューションを使用することをお勧めします。これは難しいことであり、最も洗練された保護スキームを除いてすべてを簡単に回避できる楽しみのためにソフトウェアをクラックする人々がいます.
そうでない場合、コードを一度実行した後にコードを自己破壊させることが可能かどうかを教えてください。
実行可能ファイル自体を削除できる場合もありますが、これには通常、昇格された権限も必要です。
リソース ファイルの署名をチェックするようにプログラムを取得し、有効でない場合は実行を拒否するだけです。