【问题标题】:Ptrace mprotect debugging troubleptrace mprotect 调试麻烦
【发布时间】:2011-10-14 13:34:36
【问题描述】:

我在一个研究项目上遇到了麻烦。 我想要的是使用 ptrace 来观察目标进程的执行。 在 ptrace 的帮助下,我将 mprotect 系统调用注入目标代码段(类似于断点)并将堆栈保护设置为 PROT_NONE。 之后我恢复原始指令并让目标继续。 当我得到一个无效的许可段错误时,我再次注入系统调用以再次取消保护堆栈,然后我执行导致段错误的指令并再次保护堆栈。

(这确实适用于简单的程序。)

我现在的问题是,通过这种设置,目标(相当)在库函数调用中随机崩溃(无论我使用动态链接还是静态链接)。 我的意思是崩溃,它要么尝试访问由于某种原因未映射的内存,要么它只是一直挂在函数 __lll_lock_wait_private 中(这是在 malloc 调用之后)。

让我再次强调,崩溃并不总是发生,也不总是发生在相同的位置。

这听起来像是一个同步问题,但据我所知(意思是我查看了 /proc/pid/tasks/)只有一个线程在运行。

那么你知道这可能是什么原因吗? 即使您不确定,也请告诉我您的建议,我的想法已经不多了...

【问题讨论】:

标签: c libc ptrace


【解决方案1】:

地址空间随机化也可能造成不确定性。 您可能希望禁用它以尝试使问题更具确定性。

编辑:

鉴于关闭 ASR 可以“解决”问题,那么潜在的问题可能是:

  1. 在应该有效的情况下认为 0 无效,或者反之亦然。 (我所拥有的)。
  2. 在另一次运行中使用一次运行的地址?

【讨论】:

  • 非常感谢,这确实使错误消失了,我终于可以继续我的项目了:)。但我仍然想知道为什么它在打开 aslr 的情况下不起作用。
  • @salbei 我已经添加了一些想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 2010-11-11
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多