首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ptrace通过syscall获取更改的内存

问ptrace通过syscall获取更改的内存
EN

Stack Overflow用户
提问于 2017-05-22 17:20:18
回答 1查看 136关注 0票数 0

ptrace可以在进入/退出syscall时获取寄存器和内存数据。但是,如果linux系统调用处理程序更改了一些内存,包括堆栈中的某个位置,我如何才能知道更改了哪些内存。

EN

回答 1

Stack Overflow用户

发布于 2017-05-22 17:33:38

您不能;但是例如strace (它使用ptrace)知道大多数(all?)的语义。系统调用并可以向您显示已更改的内存。

例如,如果syscall--syscall为0,则strace知道调用了read()-syscall,并且内核将写入第二个参数中指定的地址。写入的字节数等于syscall的返回值。

现在,可以使用PTRACE_PEEK*读取这些内存位置的内容并将其显示给您。

但是,当涉及到具有未知语义或不太严格的语义的自定义syscall时(例如,建议的syscall write_to_random_memory_location());一般情况下,您不能使用ptrace()确定内存更改(无论是从内核还是从用户空间)。

根据您需要实现的功能,一般的解决方案只能是利用某种类型的虚拟化(例如,valgrind在用户空间中执行的操作),并模拟/观察所有内存访问。

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

https://stackoverflow.com/questions/44109196

复制
相关文章

相似问题

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