2009-07-29 77 views

回答

6

如果您知道存儲環境的虛擬地址,則可以使用OpenProcessReadProcessMemory來讀取其他進程以外的環境。但是,要查找虛擬地址,您需要在其中一個進程的線程的Thread Information Block四處尋找。

爲了達到這個目的,您需要致電SuspendThread()後致電GetThreadContext()。但爲了調用這些線程,您需要一個線程句柄,您可以通過調用CreateToolhelp32SnapshotTH32CS_SNAPTHREAD標誌來創建進程的快照,Thread32First以獲取進程中第一個線程的線程ID,並獲得OpenThread線程的句柄。

+0

+1偉大的答案。你仍然需要仔細研究一下以找到線程上下文結構的定義。新臺幣DDK和葡萄酒是這種事情的好地方。看起來也許這是從結構開始的第8個指針? – 2009-07-30 00:30:46

1

使用工具:

您可以使用Process Explorer

右鍵單擊該進程,去屬性...並且有一個環境選項卡,其中列出了該進程的環境變量。

隨着代碼:

似乎沒有成爲一個Win32 API調用直接做到這一點,但顯然你擺弄的GetProcessStrings結果以訪問這些信息。 This CodeProject article有一些代碼讓你開始。

+0

謝謝,但應該澄清尋找一種方法來做到這一點從代碼... – jalex 2009-07-29 20:11:20