繁体   English   中英

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

[英]ptrace get changed memory by syscall

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

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

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

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

但是,当涉及具有未知语义或不太严格语义的自定义syscall时(例如,建议的syscall write_to_random_memory_location() ); 您通常无法通过ptrace()确定内存更改(既不能从内核,也不能从用户空间)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM