gpt4 book ai didi

c - ptrace 通过系统调用获取更改的内存

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:54 27 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

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

关于c - ptrace 通过系统调用获取更改的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44109196/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com