首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试器:软断点

调试器:软断点
EN

Stack Overflow用户
提问于 2012-12-06 15:40:29
回答 1查看 272关注 0票数 4

我目前正在学习调试器。我读过调试器有软件断点(显然,这是最常用的断点)。这些方法是将操作码的第一个字节替换为Int 3 (opcode 0xcc)。

我读过一个程序的文本(/code)段是只读的(如果这个段不需要被读,那么停止代码来修改它自己的指令,自我修改代码)。我的问题是调试器如何能够修改指令时,它是只读的。我是不是漏掉了什么。对此的任何评论或对这方面的理论的指点都将受到欢迎。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-07 14:47:10

在Windows桌面和服务器平台上,可以使用kernel32.dll导出的VirtualProtect函数更改内存页保护。因此,例如,如果调试器希望在某个地址写入0xcc,但该地址驻留在标记为只读的页中,则调试器可以将该页的保护设置为读-写(假设它具有足够的特权),然后写入该值。

这样做的一个副作用是,它会导致内存页的写副本(COW)错误,现在调试器进程将拥有它自己的页面物理副本。这将防止在共享该物理页的所有进程中设置断点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13747156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档