首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mprotect:如何获取导致保护违规的指令?

mprotect:如何获取导致保护违规的指令?
EN

Stack Overflow用户
提问于 2013-10-31 11:05:17
回答 1查看 267关注 0票数 0

我正在使用mprotect将一些内存页设置为写保护。当在该存储器区域中尝试任何写入时,程序得到SIGSEGV信号。从信号处理程序中,我知道写入是在哪个内存地址尝试的,但我不知道如何找出哪条指令导致写保护冲突。因此,在信号处理程序中,我正在考虑读取程序计数器(PC)寄存器以获取错误指令。有什么简单的方法可以做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2013-10-31 13:17:18

如果使用带有SA_SIGINFO标志的sigaction安装信号处理程序,则信号处理程序的第三个参数的类型为void *,但指向ucontext_t类型的结构,而该结构又包含mcontext_t类型的结构。mcontext_t的内容是由实现定义的,通常是特定于cpu架构的,但是您可以在这里找到保存的程序计数器。

编译器的内置(我认为是带有非零参数的__builtin_return_address)和展开表也可能能够跟踪整个信号处理程序。虽然这在某些方面更通用(它显然不是cpu-arch特定的),但我认为它也更脆弱,它是否真正有效可能是cpu-arch和ABI特定的。

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

https://stackoverflow.com/questions/19697768

复制
相关文章

相似问题

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