0
ptrace的得到改變內存可以得到寄存器和存儲器中的數據時進入/退出系統調用。但是,如果linux系統調用處理程序更改某些內存包含堆棧中的某個位置,如何才能知道哪些內存已更改。通過的ptrace系統調用
ptrace的得到改變內存可以得到寄存器和存儲器中的數據時進入/退出系統調用。但是,如果linux系統調用處理程序更改某些內存包含堆棧中的某個位置,如何才能知道哪些內存已更改。通過的ptrace系統調用
你不能;但例如strace的(並且是使用ptrace的)發現,大多數(全部?)系統調用的語義,並且可以告訴你更改了內存。
例如,如果系統調用號爲0,strace知道,調用了read()
-syscall,並且內核將寫入第二個參數中指定的地址。寫入的字節數等於系統調用的返回值。現在
,這些存儲單元的內容可以用PTRACE_PEEK*
被讀取並顯示給你。
然而,當涉及到與未知或較少嚴格語義定製系統調用(例如,提出的系統調用write_to_random_memory_location()
);一般來說,您不能通過ptrace()
確定內存更改(無論是從內核還是從用戶空間)。
根據需要實現什麼,一般的解決辦法只能是利用某種虛擬化技術(例如,在用戶空間所做的valgrind)和模擬/觀看所有內存訪問。