簡體   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