C言語で実現する自己破壊コードの作り方
C言語では、実行後に自分自身の実行ファイルを削除する「自己破壊コード」を作成することができます。自己破壊コードとは、プログラムを実行した後、その実行ファイル自体を削除してしまう仕組みを持つコードのことです。
自己破壊コードの仕組み
このタスクの実装は非常にシンプルです。ポイントは、削除対象となる実行ファイルの名前を取得することです。ここで活用できるのがコマンドライン引数です。
C言語では、main関数の第2引数であるargv[0]に実行ファイル名が格納されます。この値を使えば、自分自身のファイルパスを特定できます。あとは標準ライブラリのremove()関数を呼び出すだけで、そのファイルを削除することが可能です。
なぜ削除後も処理が続行されるのか?
サンプルプログラムを見ると、ファイルを削除した後にもう1行の出力処理が実行されていることがわかります。「ファイルが存在しないのに、なぜ次の行が実行されるのか?」と疑問に思う方も多いでしょう。
答えは簡単です。プログラムを実行する際、コンパイル済みのコード全体があらかじめ主記憶(メモリ)上にコピーされています。OSが実行時に直接参照しているのはディスク上のファイルではなく、メモリ上に展開された内容だからです。そのため、元のファイルが削除されていても、メモリから次の命令を読み出して処理を続けることができます。
サンプルコード
#include<stdio.h>
int main(int c, char *argv[]) {
printf("After completing this, the file will be removed\n");
remove(argv[0]); // argv[0](実行ファイル名)を削除
printf("Removed\n");
return 0;
}実行結果
After completing this, the file will be removed Removed
このように、わずか数行のコードで自己破壊的な動作を実現できます。argv[0]によるファイル名取得とremove()関数による削除、そしてメモリ上で実行が継続されるという仕組みを理解すれば、応用も容易になるでしょう。
-
【解決済み】DllUnregisterServerがエラーコード0x80040200で失敗する問題の対処法
一部のWindowsユーザーの間で、DLLファイルの登録・登録解除を試みた際、あるいはDLLファイルを自動的に登録するアプリケーションのインストール中に、「DllUnregisterServer failed with error code 0x80040200(DllUnregisterServerがエラーコード0x80040200で失敗しました)」というエラーが発生するという報告が寄せられています。この問題は、Windows 7、Windows 8.1、Windows 10の各環境で発生することが確認されています。このエラーが発生する最も一般的な原因は、アクセス権限(パーミッション)の問題
-
ファイルコピー時のエラーコード0x80070052を修正する方法【原因と解決策を徹底解説】
フラッシュドライブや外付けHDDなどのリムーバブルメディアにファイルをコピーしようとした際、「0x80070052(ディレクトリまたはファイルを作成できません)」というエラーが発生するケースがあります。多くの場合、この問題は写真や動画(特にファイル名が20文字を超えるもの)で報告されています。リムーバブルドライブに古いファイルシステム(FAT16など)を使用している場合、ルートフォルダに保存できるファイル数には制限があります。この場合は、サブフォルダにファイルを貼り付けることで、エラーを完全に回避できます。また、古いファイルシステムを使い続けているのであれば、ドライブをフォーマットして新しいフ