Tesla.Angela 发表于 2010-7-18 20:26:16

判断“普通进程”是否死亡的简单方法

本帖最后由 Tesla.Angela 于 2010-7-18 21:06 编辑

我说的“普通进程”,指的是没有进程保护,能获得PROCESS_ALL_ACCESS权限句柄的进程。
用ZwResumeProcess测试,如果进程已经死亡,会得到一个负数,如果进程没有死亡,会得到零。

BOOLEAN IsProcessDead(DWORD pid)
{
    HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,0,pid);
    PVOID pZwResumeProcess=GetProcAddress(LoadLibraryA("ntdll.dll"),"ZwResumeProcess");
    LONG ntst=0;
    __asm
    {
      push hProcess
      call pZwResumeProcess
      mov ntst,eax
    }
    CloseHandle(hProcess);
    if (ntst==0)
      return FALSE;
    else
      return TRUE;
}

代码没有测试过,应该是这样子吧。。。

Tesla.Angela 发表于 2010-7-18 20:28:06

本帖最后由 Tesla.Angela 于 2010-7-18 20:50 编辑

不知道对普通线程能不能如法炮制,感兴趣的人可以去尝试一下。
======
现在学了汇编之后,什么程序都想内嵌点汇编代码,否则心里不舒服。
其实大家在程序里使用ntdll.lib就能像调用普通api一样调用ntdll.dll里的api了。

Tesla.Angela 发表于 2010-7-18 20:44:57

代码着色工具在这里下载:http://www.m5home.com/bbs/thread-3939-1-1.html

本网站最菜的人 发表于 2010-7-18 21:05:19

Tesla.Angela 发表于 2010-7-21 11:37:32

回复 4# 本网站最菜的人


忽然发现有LoadLibrary没有FreeLibrary,也算是泄露吧。

熊猫正正 发表于 2012-3-18 13:52:23

{:soso_e100:}

wqs3568 发表于 2012-5-9 00:58:33

这就是为什么汇编语言一直没有被淘汰的原因吧
页: [1]
查看完整版本: 判断“普通进程”是否死亡的简单方法