首页 电脑 电脑学堂 查看内容

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

2004-9-29 20:05 688 0

摘要: #include #include /*1.如果有文件的HANDLE打开,文件删除就会失败,所以,CloseHandle(HANDLE(4));是十分巧妙的一手.HANDLE4是OS的硬编码,对应于E...
关键词: nbsp HANDLE push IMAGE UnmapViewOfFile 代码 文件 会报 一个 CloseHandle

#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;}
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部