【发布时间】:2012-10-31 02:42:00
【问题描述】:
我和ptrace 玩了一段时间。我遵循了一些教程,例如 this one 或 this one。到目前为止,当我有一个ptrace-d 子进程时,我能够:
- 检测系统调用并浏览寄存器。
- 借助
ptrace的PTRACE_PEEKDATA选项,获取寄存器指向的地址中包含的字符串。 - 借助
ptrace的PTRACE_POKEDATA选项,更改这些寄存器的值并更改子进程用户空间中的内存值。
我的问题如下:假设我刚刚检测到一个open 系统调用。由于存储在 ebx 寄存器中的地址,我可以修改要打开的文件的文件名。但是,我想知道是否可以将文件名更改为任何我想要的任何大小。如果我要更改的名称非常大(假设是原始文件名长度的 50 倍),我不会弄乱一些我不应该写的内存吗?我应该在孩子的记忆空间中“分配”一些记忆吗?如果是这样,该怎么做?
请注意,子进程是用execve执行的某个程序,我无法访问它的源代码。
【问题讨论】:
标签: memory-management system-calls ptrace