Я хочу ввести новую переменную среды в процесс (в частности, эквивалент set COMPLUS_HeapVerify=1
для отладки процесса. Net). Как это сделать в WinDbg? Есть ли способ сделать это без перезапуска сеанса отладки?
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
конец duly null terminating the last string
.
the end in example below is at
0x11412, нулевое завершение последней строки среды
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 выполняется для печати var environement с помощью команды set H
hackenv:\>cdb -c "ezu 11412 \"HACKENVVAR=1337\";g;q" cmd /c set HACK | grep -i 1
337$
HACKENVVAR=1337