2014-05-18 155 views
1

我想將新的環境變量引入到進程中(尤其是調試.Net進程的set COMPLUS_HeapVerify=1的等效值)。如何在WinDbg中做到這一點?有沒有辦法做到這一點,而無需重新啓動調試會話?在WinDbg中設置環境變量

+0

您是否必須在*另一個*進程中設置環境?難道你不能僅僅在它開始的過程中設置它嗎? (在創建進程時,環境是從父進程複製的。) – Joey

+3

即使有辦法,它也不可能對您的特定情況有所幫助,因爲大多數「configure runtime behavior」設置在啓動時只讀一次... –

+0

@Јοеу在我的情況下,父進程是Visual Studio。關鍵是如何從WinDbg中完成它。此外,我想知道我是否可以在peb中引入_new_變量,而不僅僅是改變內存中的現有變量。 – user2341923

回答

1

environment is part of PEB Peb->ProcessParamenters->Environment

檢索指針環境,調試者的cmd.exe

hackenv:\>cdb -c "dt ntdll!_PEB -y proc->env @$peb;q" cmd.exe | grep Env 
     +0x048 Environment : 0x00010000 Void 

找到大小的內存塊爲檢索到的地址

hackenv:\>cdb -c "!address 0x10000;q" cmd.exe | grep -i size 
Region Size:   00003000 

找到最後一個字符串的這個地址區域

hackenv:\>cdb -c "s -[1]su 0x10000 L?3000;q" cmd | tail -n 3 
0x00011340 
0x000113d4 
quit: 

write the new Environemt String在最後一個字符串的末尾duly null terminating the last string

the end in example below is at0x11412妥空執行使用打印environement VAR終止最後環境串

hackenv:\>cdb -c "db 1140c l 10 ;q" cmd | grep 1140c 
0:000> cdb: Reading initial command 'db 1140c l 10 ;q' 
0001140c 49 00 20 00 00 00 00 00-00 00 00 00 00 00 00 00 I. ............. 

write your env string at this address

new enviroment string HACKENVVARcmd.exe和cmd.exe的設定下面的例子設置H命令

hackenv:\>cdb -c "ezu 11412 \"HACKENVVAR=1337\";g;q" cmd /c set HACK | grep -i 1 
337$ 
HACKENVVAR=1337 
+0

並希望你的緩衝區溢出不會破壞重要的東西。 –

+0

@ ben yes當沒有記錄或不支持的事情完成時,存在意外行爲的遠程可能性。 – blabb