簡體   English   中英

如果僅停止一個線程,則ptrace能否從多線程進程中讀取/寫入數據?

[英]Can ptrace read/write data from a multithreaded process given that one and only one thread is stopped?

ptrace的文檔對我來說有點模糊。 它說:

首先需要將示蹤劑連接到示蹤劑。 附件和后續命令是針對每個線程的:在多線程進程中,每個線程可以單獨地附加到(可能不同的)跟蹤器,或者不附加就可以調試。 因此,“ tracee”始終表示“(一個)線程”,而不是“(可能是多線程)進程”。

也:

在以下請求中,pid指定要作用的跟蹤的線程ID。 對於除PTRACE_ATTACH,PTRACE_SEIZE,PTRACE_INTERRUPT和PTRACE_KILL以外的請求,必須停止跟蹤。

因此,如果我們有一個多線程進程,並且使用PTRACE_SEIZE附加到單個線程並使用PTRACE_INTERRUPT停止它,我們是否能夠使用PTRACE_PEEKTEXT,PTRACE_PEEKDATA,PTRACE_POKETEXT或PTRACE_POKEDATA讀取/寫入整個進程的全局數據?

次要問題:如果主要問題的答案是肯定的,那么為什么需要停止線程? 我當時認為,停止是實現某種鎖定機制所必需的,但是如果停止單個線程,則其他線程可以寫入ptrace試圖自由讀取/寫入的內存。

是的,您可以讀取全局內存,但是如果有正在運行的線程同時修改內存,則結果可能不一致。 此外,只能為跟蹤的,已停止的線程獲取線程上下文 (寄存器和標志)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM