2017-05-22 45 views
0

ptrace的得到改變內存可以得到寄存器和存儲器中的數據時進入/退出系統調用。但是,如果linux系統調用處理程序更改某些內存包含堆棧中的某個位置,如何才能知道哪些內存已更改。通過的ptrace系統調用

回答

0

你不能;但例如strace的(並且是使用ptrace的)發現,大多數(全部?)系統調用的語義,並且可以告訴你更改了內存。

例如,如果系統調用號爲0,strace知道,調用了read() -syscall,並且內核將寫入第二個參數中指定的地址。寫入的字節數等於系統調用的返回值。現在

,這些存儲單元的內容可以用PTRACE_PEEK*被讀取並顯示給你。

然而,當涉及到與未知或較少嚴格語義定製系統調用(例如,提出的系統調用write_to_random_memory_location());一般來說,您不能通過ptrace()確定內存更改(無論是從內核還是從用戶空間)。

根據需要實現什麼,一般的解決辦法只能是利用某種虛擬化技術(例如,在用戶空間所做的valgrind)和模擬/觀看所有內存訪問。

相關問題