找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6409|回复: 6

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

  [复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 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;
}

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

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-7-18 20:28:06 | 显示全部楼层
本帖最后由 Tesla.Angela 于 2010-7-18 20:50 编辑

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

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-7-18 20:44:57 | 显示全部楼层
代码着色工具在这里下载:http://www.m5home.com/bbs/thread-3939-1-1.html
本网站最菜的人 该用户已被删除
发表于 2010-7-18 21:05:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-7-21 11:37:32 | 显示全部楼层
回复 4# 本网站最菜的人


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

0

主题

5

回帖

0

精华

初来乍到

积分
11
发表于 2012-3-18 13:52:23 | 显示全部楼层
{:soso_e100:}

0

主题

23

回帖

0

精华

铜牌会员

积分
82
发表于 2012-5-9 00:58:33 | 显示全部楼层
这就是为什么汇编语言一直没有被淘汰的原因吧
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表