我想将新的环境变量引入流程(特别是,相当于set COMPLUS_HeapVerify=1
来调试.Net流程)。怎么在WinDbg中做到这一点?有没有办法在不重新启动调试会话的情况下执行此操作?
答案 0 :(得分:1)
environment is part of PEB Peb->ProcessParamenters->Environment
。
在debugee 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 at
0x11412 正确null终止最后一个环境字符串
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 HACKENVVAR
中设置cmd.exe
并执行cmd.exe以使用set H命令打印环境 var
hackenv:\>cdb -c "ezu 11412 \"HACKENVVAR=1337\";g;q" cmd /c set HACK | grep -i 1
337$
HACKENVVAR=1337