一个删除自身的程序源代码

#include #include /* 1.如果有文件的HANDLE打开,文件删除就会失败,所以, CloseHandle(HANDLE(4));是十分巧妙的一手.HANDLE4是OS的 硬编码,对应于EXE的IMAGE.在缺省情况下,OS假定没有任何调 用会关闭IMAGE SECTION的HANDLE,而现在,该HANDLE被关闭了. 删除文件就解除了文件对应的一个句柄. 2.由于UnmapViewOfFile解除了另外一个对应IMAGE的HANDLE, 而且解除了IMAGE在内存的映射.所以,后面的任何代码都不可 以引用IMAGE映射地址内的任何代码.否则就OS会报错.而现在 的代码在UnmapViewOfFile后则刚好没有引用到任何IMAGE内的代码. */ main() { printf("这是一个删除自身的程序\n"); HMODULE hm = GetModuleHandle(0); char buf[MAX_PATH]; GetModuleFileName(hm, buf, sizeof(buf)); CloseHandle((HANDLE)4); __asm { lea eax, buf push 0 push 0 push eax push ExitProcess push hm push DeleteFile push UnmapViewOfFile ret } return 0; } 
posted @ 2012-07-15 22:58  adodo1  Views(99)  Comments(0Edit  收藏  举报