首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gdb会临时给页面写权限吗?

问gdb会临时给页面写权限吗?
EN

Stack Overflow用户
提问于 2011-09-28 19:29:23
回答 1查看 1.1K关注 0票数 5

我在一个Linux应用程序中调试了一个seg错误,该错误是由一个程序试图更改静态常量数组结构引起的(因此数据位于ELF的只读部分,随后被加载到一个页面中,该页面随后被授予只读权限)。

在GDB中,我在执行错误存储的汇编程序行上放置了一个断点,当它停在那里时,我使用GDB手动执行了等效的写操作。GDB做到了这一点,没有任何抱怨,读回来的值证明它确实是写的。我查看了/proc/thepid/map,那个特定的页面仍然被标记为“不可写”。

所以我的问题是: GDB会在只读页面上临时设置写权限,执行写操作,然后重置权限吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-28 21:59:17

会临时设置GDB的写权限吗

不是的。

在Linux/*86上,ptrace() ( GDB用来读写下级进程内存)允许读写下级进程内存不可读/写的页面,这就导致了您所描述的混乱。

这可以被认为是内核中的一个bug。

应该注意的是,内核必须允许ptrace写入通常不可写的.text部分,以便调试器能够植入断点(这是通过使用断点/陷阱指令-- int3通过PTRACE_POKETEXT请求覆盖原始指令来完成的)。

内核不需要为POKE_DATA做同样的事情,但是man ptrace说:

代码语言:javascript
复制
PTRACE_POKETEXT, PTRACE_POKEDATA
   Copies the word data to location addr in the child's memory.
   As above, the two requests are currently equivalent.

我相信正是这种等价性导致了目前的行为。

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

https://stackoverflow.com/questions/7582534

复制
相关文章

相似问题

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