2017-05-22 48 views
0

ptrace的得到改变内存可以得到寄存器和存储器中的数据时进入/退出系统调用。但是,如果linux系统调用处理程序更改某些内存包含堆栈中的某个位置,如何才能知道哪些内存已更改。通过的ptrace系统调用

回答

0

你不能;但例如strace的(并且是使用ptrace的)发现,大多数(全部?)系统调用的语义,并且可以告诉你更改了内存。

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

,这些存储单元的内容可以用PTRACE_PEEK*被读取并显示给你。

然而,当涉及到与未知或较少严格语义定制系统调用(例如,提出的系统调用write_to_random_memory_location());一般来说,您不能通过ptrace()确定内存更改(无论是从内核还是从用户空间)。

根据需要实现什么,一般的解决办法只能是利用某种虚拟化技术(例如,在用户空间所做的valgrind)和模拟/观看所有内存访问。

相关问题