查看: 35|回复: 0

[转载图文] 调试器与被调试进程的拆离以及结束被调试进程的实现

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式
                                                                                        文章目录
  • 拆离调试器与被调试进程
  • 调试器退出时拆离被调试进程
  • 结束被调试进程
  网上很多帖子讲解调试器的理论、架构与实现,但是很少有帖子涉及到调试器与被调试进程的拆离以及如何结束被调试进程(换了百度、谷歌、必应均没有搜到相关的帖子)
我在这里简单说一下实现
拆离调试器与被调试进程  调用windowsAPI   DebugActiveProcessStop   停止调试器调试指定的进程
BOOL DebugActiveProcessStop(
  DWORD dwProcessId
);
  参数进程ID 可以在调试器创建进程时调用 CreateProcess 的最后一个参数 lpProcessInformation 中记录
创建完成调试进程后,别忘记调用 CloseHandle 关闭 lpProcessInformation 中的 进程与线程句柄
BOOL CreateProcessW(
  LPCWSTR               lpApplicationName,
  LPWSTR                lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL                  bInheritHandles,
  DWORD                 dwCreationFlags,
  LPVOID                lpEnvironment,
  LPCWSTR               lpCurrentDirectory,
  LPSTARTUPINFOW        lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation
);
typedef struct _PROCESS_INFORMATION {
  HANDLE hProcess;
  HANDLE hThread;
  DWORD  dwProcessId;
  DWORD  dwThreadId;
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
  拆离调试器与被调试进程别忘记修复断点,调用 ContinueDebugEvent 继续执行被调试线程
BOOL ContinueDebugEvent(
  DWORD dwProcessId,
  DWORD dwThreadId,
  DWORD dwContinueStatus
);
调试器退出时拆离被调试进程  windows默认调试器退出时终止被调试进程,
我们可以调用 DebugSetProcessKillOnExit 参数传入FALSE,来修改调试器退出时要执行的操作
可以多次调用此函数以根据需要更改操作
BOOL DebugSetProcessKillOnExit(
  BOOL KillOnExit
);
  KillOnExit  如果为TRUE,则线程将在退出时终止所有附加进程(请注意,这是默认设置);
KillOnExit  如果为FALSE,线程将与退出时正在调试的所有进程分离。
结束被调试进程  被调试进程只有与被调试进程拆离后,才可以正常的结束
调用 TerminateProcess 终止指定的进程及其所有线程
BOOL TerminateProcess(
  HANDLE hProcess,
  UINT   uExitCode
);
/* 例:*/
TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID), 0);
                                                                                                           
温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
微信公众号
快速回复 返回顶部 返回列表