首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ptrace设置RIP的奇怪行为

使用ptrace设置RIP的奇怪行为
EN

Stack Overflow用户
提问于 2016-06-24 05:39:25
回答 1查看 858关注 0票数 2

基本上,我使用ptrace向远程进程注入shell代码以供执行。但我发现了一些关于RIP注册的奇怪行为。

我所做的就是将我的shell代码复制到程序映射的起始地址。然后,我将使用ptrace的RIP设置为起始地址所在的地址。然后继续执行代码的目标进程。一旦shell代码完成(通过运行int3),我将获得信号并恢复我刚刚修改的代码。

它可以正常工作,除非远程进程在系统调用(如sleep )中被阻塞。如果在附加进程时,远程进程在系统调用中被阻塞,则在将RIP设置为要执行shell代码的位置,然后继续目标进程之后,我将观察到RIP实际上比我在ptrace调用中输入的地址少2。例如,如果我将RIP设置为0x4000,一旦恢复RIP,RIP就变成0x3ffe。很明显,通常情况下,它会因为段故障而崩溃。但是,如果我在没有恢复进程的情况下设置了寄存器,那么RIP就是我刚刚设置的值。目前,我通过在shell代码前面插入2个nop指令来解决这个问题,并且在设置RIP时总是添加2。我只想知道,在设置RIP时,我是否错过了什么,或者我的整个注入代码的方法是完全不稳定的?

我的开发框是Ubuntu14.04,内核是3.13.0-45-泛型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-24 09:14:13

如果我记得,如果您在syscall中阻塞进程时中断进程,则程序计数器值在继续时将由内核减去sizeof(syscall指令)。因此,一旦您执行了一个PTRACE_DETACH,该过程将重新执行被中断的syscall。

我克服这个问题的方式和你一样(总是添加一个微小的nop雪橇和递增的RIP)。

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

https://stackoverflow.com/questions/38006277

复制
相关文章

相似问题

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