社区
Windows SDK/API
帖子详情
如何结束被调试的进程
cenjoyer
2008-01-30 09:23:10
请问大家
如果发现一个进程被调试,如何去强制结束它?哪怕连调试器也结束都行。
网上看到些判断父进程PID的方法,但不好用,因为那个进程可能不是被调试器调入装载的,如在任务管理器中右击鼠标,选调试(有调试器的情况下),被调试的进程的父进程PID并不是调试器!
另外,用ProcessExplorer工具可以暂停某个进程,暂停之后,那个进程也无法通过任务管理器去结束了,直接来说,就是无法通过TerminateProcess来结束,又该如何解决?
...全文
389
12
打赏
收藏
如何结束被调试的进程
请问大家 如果发现一个进程被调试,如何去强制结束它?哪怕连调试器也结束都行。 网上看到些判断父进程PID的方法,但不好用,因为那个进程可能不是被调试器调入装载的,如在任务管理器中右击鼠标,选调试(有调试器的情况下),被调试的进程的父进程PID并不是调试器! 另外,用ProcessExplorer工具可以暂停某个进程,暂停之后,那个进程也无法通过任务管理器去结束了,直接来说,就是无法通过TerminateProcess来结束,又该如何解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ddvd
2010-05-25
打赏
举报
回复
看看什么高招
coffeemay
2008-07-02
打赏
举报
回复
提升自身进程到debug以上权限以后就能关闭调试中的进程
function EnableDebugPriv: Boolean;
var
hToken: THandle;
tp: TTokenPrivileges;
rl: Cardinal;
begin
Result := false;
//打开进程令牌环
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
hToken);
//获得进程本地唯一ID
if LookupPrivilegeValue(nil, 'SeDebugPrivilege', tp.Privileges[0].Luid) then
begin
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
//调整权限
Result := AdjustTokenPrivileges(hToken, false, tp, SizeOf(tp), nil, rl);
end;
end;
关于 OpenProcessToken() 和 AdjustTokenPrivileges() 两个 API 的简单介绍:
OpenProcessToken():获得进程访问令牌的句柄.
function OpenProcessToken(
ProcessHandle: THandle; //要修改访问权限的进程句柄
DesiredAccess: DWORD; //指定你要进行的操作类型
var TokenHandle: THandle//返回的访问令牌指针
): BOOL;
AdjustTokenPrivileges() :调整进程的权限.
function AdjustTokenPrivileges(
TokenHandle: THandle; // 访问令牌的句柄
DisableAllPrivileges: BOOL; // 决定是进行权限修改还是除能(Disable)所有权限
const NewState: TTokenPrivileges;
{ 指明要修改的权限,是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,
数据组的每个项指明了权限的类型和要进行的操作; }
BufferLength: DWORD;
//结构PreviousState的长度,如果PreviousState为空,该参数应为 0
var PreviousState: TTokenPrivileges;
// 指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息
var ReturnLength: DWORD //实际PreviousState结构返回的大小
) : BOOL;
SeSecurityPrivilege
SeBackupPrivilege
SeRestorePrivilege
SeSystemtimePrivilege
SeShutdownPrivilege
SeRemoteShutdownPrivilege
SeTakeOwnershipPrivilege
SeDebugPrivilege
SeSystemEnvironmentPrivilege
SeSystemProfilePrivilege
SeProfileSingleProcessPrivilege
SeIncreaseBasePriorityPrivilege
SeLoadDriverPrivilege
SeCreatePagefilePrivilege
SeIncreaseQuotaPrivilege
SeChangeNotifyPrivilege
SeUndockPrivilege
SeManageVolumePrivilege
SeImpersonatePrivilege
SeCreateGlobalPrivilege
SeInteractiveLogonRight
SeNetworkLogonRight
SeRemoteInteractiveLogonRight
.....
权限定义可以查表
knowledge_Is_Life
2008-05-01
打赏
举报
回复
没遇到过这种情况.
cenjoyer
2008-01-31
打赏
举报
回复
mabaoyes
你说的要结束调试器是可以,但是,我如何得知哪个调试器在进行调试呢?必竟未必只有VC一种调试器啊,
另外,被processExplorer暂停时也不知道怎么好.
我要做的是,不让我的进程被"暂停"(调试),
麻烦大家了.
cenjoyer
2008-01-31
打赏
举报
回复
ntsd -c q -p PID
我知道PID怎么取。
如果是一般情况下,是可以结束掉,但
使用这条命令的时候,VC++已经在调试那个进程中。
mabaoyes
2008-01-31
打赏
举报
回复
试了:
VC++已经在调试那个进程中
这时用
ntsd -c q -p 1768
返回如下:
Microsoft(R) Windows 2000 Debugger
Version 5.00.2184.1
Copyright (C) Microsoft Corp. 1981-1999
CommandLine:
NTSD: cannot debug pid 1768 (error = 5)
NTSD: exiting - press enter --->
要结束pid =1768 的进程
通过结束 MSDEV.EXE 可以实现(因为被调试器附着的进程会随调试器一起退出,可能你要去取你的调试器PID
,这里的调试器是vc 既 MSDEV.EXE)直接在任务管理器中就可以结束MSDEV.EXE .
同时试了.net 2003调试器 既devenv.exe,结束它,也就结束被它调试的进程。
mabaoyes
2008-01-31
打赏
举报
回复
lz是不是先要结束VC++的调试啊?
看来你的环境,和我很不一样啊,可否说清楚你具体在做什么?
雪狼__
2008-01-31
打赏
举报
回复
F2?
mabaoyes
2008-01-30
打赏
举报
回复
ntsd -c q -p PID
把最后那个PID,改成你要终止的进程的ID。如果你不知道进程的ID,任务管理器->进程选项卡->查看->选择列->勾上"PID(进程标识符)",然后就能看见了。
因为被调试器附着的进程会随调试器一起退出,可能你要去取,你的调试器PID.
cenjoyer
2008-01-30
打赏
举报
回复
没反应
cenjoyer
2008-01-30
打赏
举报
回复
老大,不行啊。我试过了。icesword,ntsd都不行。
mabaoyes
2008-01-30
打赏
举报
回复
1.使用Windows XP/2000自带的工具
从Windows 2000开始,Windows系统就自带了一个用户态调试工具Ntsd,它能够杀掉大部分进程,因为被调试器附着的进程会随调试器一起退出,所以只要你在命令行下使用Ntsd调出某进程,然后退出Ntsd即可终止该进程,而且使用Ntsd会自动获得Debug权限,因此Ntsd能杀掉大部分的进程。
操作方法:单击“开始”/程序/附件/命令提示符,输入命令:ntsd -c q -p PID(把最后那个PID,改成你要终止的进程的PID)。在进程列表中你可以查到某个进程的PID,例如我们要关闭图1中的Explorer.exe进程,输入:ntsd -c q -p 408即可。
以上参数-p表示后面跟随的是进程PID, -c q表示执行退出Ntsd的调试命令,从命令行把以上参数传递过去就行了。
2. 使用专门的软件来杀进程
任务管理器杀不掉的进程,你可以使用专门的软件关闭。有很多软件可以杀进程,例如进程杀手、IceSword、柳叶擦眼、系统查看大师、Kill process等。
Win7/Win10 x64 中VC6 安装卡死、无法单步
调试
、
调试
退出
进程
没有
结束
在Windows 7或Windows 10 x64操作系统上,用户可能会遇到Visual C++ 6.0(简称VC6)安装过程中的各种问题,包括安装卡死、无法进行单步
调试
以及
调试
结束
后
进程
未正常
结束
等。这些问题主要是由于系统兼容性、缺少组件...
VC6在64位Windows7下
调试
的时候,再
结束
调试
,程序无法退出.rar
该
进程
不能被
结束
,即使我使用任务管理器,也不可以。这时如果我再次
调试
,任务栏上会留下两个这样的图标,这两个
进程
都可以在任务管理器上看到。
结束
该
进程
的唯一的办法是:关闭VC6,并重新开启. 解决方法: 在vc...
Ollydbg 1.1.0 终结版, 具有很强的反反
调试
能力
通常的OD
调试
某些具有反
调试
能力的加壳的程序的时候,OD容易被发现,导致一打开就会退出/自动关闭.只能望程序兴叹. 类似的加壳类型, safengine licensor, themida winlicense 2.x等都是这样. 现在这个OD经过了一些修改...
WinCE6.0下的驱动
调试
助手
其中,驱动程序的
调试
是开发过程中的关键环节。针对这一需求,出现了"WinCE6.0驱动
调试
助手",它集成了一系列实用工具,极大地提高了开发者的工作效率。 驱动
调试
助手主要包含以下几个模块: 1. **
进程
管理器**:...
请关闭
调试
或监控工具解决 通常电脑开挂出现的问题
调试
工具可能允许用户修改游戏内部逻辑,而监控工具则可能对游戏
进程
进行过多的跟踪,影响其性能。 描述进一步明确了这个问题是针对“玩游戏开挂”的常见现象。开挂是指在游戏中使用非法或非官方认可的程序,以获得...
Windows SDK/API
1,184
社区成员
22,328
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章