Программирование драйверов Windows

       

Программа w2k_mem


Консольное приложение для Windows NT, позволяющее просматривать дамп любых областей памяти, включая внутренние области ядра (системной памяти с адресами более 0x80000000), что недоступно для приложений пользовательского режима.

Предположим, вы воспользовались командой

w2k_mem #0x200 0x898F9094 >display_mem1.txt

тогда в файле display_mem1.txt вы сможете увидеть дамп памяти длиной 512 байт (то есть 0x200) по шестнадцатеричному адресу 0xF98F9094 — конечно же, только в том случае, если память по этому адресу в настоящий момент выделена какому-нибудь процессу. В противном случае, результат будет следующим:

F98F9094..F98F9293: 0 valid bytes Address | 04 05 06 07-08 09 0A 0B : 0C 0D 0E OF-10 11 12 13 | 456789ABCDEF0123 ---------|-------------------------:-------------------------|----------------- F98F9094 | - : - | F98F90A4 | - : - | F98F90B4 | - : - | F98F90C4 | - : - | F98F90D4 | - : - | F98F90E4 | - : - |

. . . . . . . . . . . . . . . . . . . . . . . .

Для успешно выполненной команды (в примере ниже по адресу 0x80DC5C88 существует занятая область памяти)

w2k_mem #0x200 0x80DC5C88 >display_mem2.txt

результат выглядит следующим образом:

80DC5C88..80DC6087: 256 valid bytes Address | 08 09 0A 0B-0C 0D 0E 0F : 10 11 12 13-14 15 16 17 | 89ABCDEF01234567 ---------|-------------------------:-------------------------|----------------- 80DC5C88 | 03 00 C4 00-00 00 00 00 : 48 56 F4 FE-00 00 00 00 | ..A.....HVo?.... 80DC5C98 | 00 00 00 00-00 00 00 00 : 00 00 00 00-40 00 00 00 | ............@... 80DC5CA8 | 00 00 00 00-00 00 00 00 : 40 5D DC 80-22 00 00 00 | ........@]U?"... 80DC5CB8 | 01 00 00 00-00 00 00 00 : 00 00 00 00-00 00 00 00 | ................ 80DC5CC8 | 00 00 00 00-00 00 00 00 : 00 00 00 00-00 00 00 00 | ................ 80DC5CD8 | 00 00 00 00-00 00 00 00 : 00 00 00 00-00 00 00 00 | ................ 80DC5CE8 | 14 00 14 00-EC 5C DC 80 : EC 5C DC 80-00 00 00 00 | ....i\U?i\U?.... . . . . . . . . . . . . . . . . . . . . . . . .

Строго говоря, подобных результатов можно добиться и при помощи отладчиков например, SoftIce. Тем не менее, у трех упомянутых программ имеется одно неоспоримое преимущество: методы, наработанные Свеном Шрайбером, могут быть включены в нужное место программного кода ваших приложений (к чему призывает и сам автор этих программ).

Наиболее очевидный способ получения стартовых адресов для путешествия по памяти режима ядра заключается в использовании вывода сообщений из отладочных версий драйверного кода, которые видны в рабочих окнах программ Debug View или Debug Print Monitor.



Содержание раздела