to: laiyiling(最熟悉的陌生人)进程如何在运行的时候,自己删除自己的.exe文件,———————— 我要的是删除了自己还要自己在运行, 而不是删除了自己再结束,或者一定要等到结束了才能删除...也就是文件删除了,但程序还在运行...__________________________ 我所要的从来没有出现过...
是不是像UNIX中的僵尸进程一样。
No idea! 变通下到想得到,就是copy到人家的进程地址上运行,删除自己
to 楼主 你回的第一帖都说人家sb 了还说自己没有不友好的意思,真有道理啊谈问题本身: 运行时不能删除是因为文件加载器把整个exe做了个文件映象,所以删除之前必须解除这个映象,但是解除了映象之后exe的代码会被移出内存,所以看我前面帖的代码最后部分deletefile exitprocess 都是将地址放在了栈里,在ret时直接返回到的这两个函数内.要做到运行时删除自己然后接着运行我认为可以做到,首先,把exe文件的内容读一份到内存,接着对这份内容进行重定位,然后直接jmp到这里去,在这里面解除文件映象并删文件.最麻烦的是怎么重定位,这好比写一个PE文件加载器.
BOOL DeleteSelfEx()
{
HMODULE module = GetModuleHandle(0);
char buf[MAX_PATH];
GetModuleFileName(module, buf, sizeof buf); OSVERSIONINFO os_info;
os_info.dwOSVersionInfoSize=sizeof(os_info);
if(!GetVersionEx(&os_info))//版本相关
return FALSE;
LPVOID pCloseSelf;
switch(os_info.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT:
CloseHandle((HANDLE)4);
pCloseSelf = UnmapViewOfFile;
break;
case VER_PLATFORM_WIN32_WINDOWS:
pCloseSelf = FreeLibrary;
break;
default:
return FALSE;
} __asm
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push [pCloseSelf]
ret
}
return TRUE;//不可能到达此句
}
http://community.csdn.net/Expert/topic/3108/3108243.xml?temp=.2523157
而不是删除了自己再结束,或者一定要等到结束了才能删除...bs那些看问题不经大脑乱贴代码和地址带星的分又多自以为了不起的sb——————————————
我所要的从来没有出现过...
版主看到请删了我所有回复
------------------------------
如题,即,进程如何在运行的时候,自己删除自己的.exe文件,上面两句话的意思差别很大吗??????????????????
我要的是删除了自己还要自己在运行,
而不是删除了自己再结束,或者一定要等到结束了才能删除...也就是文件删除了,但程序还在运行...__________________________
我所要的从来没有出现过...
变通下到想得到,就是copy到人家的进程地址上运行,删除自己
你回的第一帖都说人家sb 了还说自己没有不友好的意思,真有道理啊谈问题本身:
运行时不能删除是因为文件加载器把整个exe做了个文件映象,所以删除之前必须解除这个映象,但是解除了映象之后exe的代码会被移出内存,所以看我前面帖的代码最后部分deletefile exitprocess 都是将地址放在了栈里,在ret时直接返回到的这两个函数内.要做到运行时删除自己然后接着运行我认为可以做到,首先,把exe文件的内容读一份到内存,接着对这份内容进行重定位,然后直接jmp到这里去,在这里面解除文件映象并删文件.最麻烦的是怎么重定位,这好比写一个PE文件加载器.