code-injection - 编写一个非常基本的调试器

标签 code-injection

是否可以在Windows下编写程序,从而在到达预定义地址后导致远程进程线程中断(在该线程中停止执行)?

我一直在尝试Windows Debug API,但在设置断点方面似乎非常有限。 DebugBreakProcess函数似乎很有希望,但是我找不到有关如何使用此API调用的任何示例。

最佳答案

您需要使用WriteProcessMemory将断点(在x86上,操作码为0xCC)写入地址。
在x86上,当调试对象在代码中到达该点时,0xCC将生成一个int 3异常。这是由调试器的WaitForDebugEvent拾取的,将返回设置了EXCEPTION_DEBUG_EVENT的DEBUG_EVENT。

然后,您需要先将该地址修补回其原始代码,然后再继续。如果要再次中断,则需要单步执行,然后重新获取断点操作码。要单步执行,您需要在线程上下文的EFlag中设置单步标志。

DebugBreakProcess用于生成正在调试的进程的远程中断-不能用于在代码中的任意点处中断。

关于code-injection - 编写一个非常基本的调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/984031/

相关文章:

internet-explorer - 尝试编写一个 BHO 以将 iFrame 注入(inject)用户访问的每个网页,使用各种监听器,导致循环并且没有 iframe 出现

performance - @EJB 注入(inject)与查找 - 性能问题

php - PHP 中干净且安全的字符串

java - 使用 Spring util :list 注入(inject)不可变列表

php - 此 SQL 清理代码的说明

macos - 提升 mach_inject 的使用权限

php - 使用 MySQLi 时如何防止 SQL 注入(inject)?

JSF 应用范围实例化和注入(inject)

php - 在 MySQL 中存储 html 的 100% 安全方式

security - Spring + Tomcat URL白名单防止命令注入(inject)