首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ptrace PTRACE_GETREGS和PTRACE_PEEKUSER性能获取寄存器

使用ptrace PTRACE_GETREGS和PTRACE_PEEKUSER性能获取寄存器
EN

Stack Overflow用户
提问于 2020-05-12 04:35:51
回答 1查看 2K关注 0票数 2

如果我需要使用ptrace获取某些寄存器的值--例如,我需要r0、r1、pc寄存器--那么如何才能使我获得更好的性能:

int pc= ptrace(PTRACE_PEEKUSER,pid,60,0);

r0 = ptrace(PTRACE_PEEKUSER, pid, 0, NULL);

r1 = ptrace(PTRACE_PEEKUSER, pid, 4, NULL);

还是使用PTRACE_GETREGS获取所有寄存器,然后只使用我需要的值?

那是怎么实现的?PTRACE_GETREGS是否在PTRACE_PEEKUSER上实现为循环,所以如果我不需要所有的寄存器,最好的方法是使用PTRACE_PEEKUSER作为我需要的寄存器的数量?

性能是否取决于体系结构(x86/Arm)?

EN

回答 1

Stack Overflow用户

发布于 2020-05-20 15:16:48

是如何实现的?

我们依赖弓。

对于linux内核中的arm,ptrace.c实现是(arch/arm//ptrace.c)[https://elixir.bootlin.com/linux/latest/source/arch/arm/kernel/ptrace.c#L784]

--如果我不需要所有的寄存器,最好的方法是使用PTRACE_PEEKUSER作为我需要的寄存器的数量?

按照上面的代码。PTRACE_GETREGS不是PTRACE_PEEKUSER上的迭代。因此,按照@Nate的评论,PTRACE_GETREGS似乎是一个更好的选择。多个syscall的成本比获得注册服务器要高。

的性能是否取决于体系结构(x86/Arm)?

是的,ptrace代码是不同的,所以它会产生影响,寄存器的数量也会改变,读取寄存器的程序集指令也会有所不同。

这是最好的答案。如果你有更多的问题/疑问/澄清

最后,我的2分钱关于性能

性能取决于各种因素,因此,随着优化编码,实际的测试比较是更好的方式。使用代码创建多个测试,并执行它们以验证您的假设。很多事情发生在硬件和编译器的优化中,所以

在arm和x86上测试您的代码,以了解在特定情况下性能的正确答案。

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

https://stackoverflow.com/questions/61743912

复制
相关文章

相似问题

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