在PROCESS没有结束前就将启动PROCESS的EXE文件删除

  • Post author:
  • Post category:其他


下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者.乃NT系统一等一的高手.下面就分析一些他的这段代码.

这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了.

int main(int argc, char *argv[])

{

HMODULE module = GetModuleHandle(0);

CHAR buf[MAX_PATH];

GetModuleFileName(module, buf, sizeof buf);

CloseHandle(HANDLE(4));

__asm {

lea     eax, buf

push    0

push    0

push    eax

push    ExitProcess

push    module

push    DeleteFile

push    UnmapViewOfFile

ret

}

return 0;

}

现在,我们先看一下堆栈中的东西

偏移 内容

24   0

20   0

16   offset buf

12   address of ExitProcess

8    module

4    address of DeleteFile

0    address of UnmapViewOfFile

调用RET返回到了UnmapViewOfFile,也就是栈里的偏移0所指的地方.当进入UnmapViewOfFile的流程时,栈里见到的是返回地址DeleteFile和HMODUL module.也就是说调用完毕



版权声明:本文为tlovexyj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。