你这么描述后,便可以知道其中的原委了。无论是你的内存填充命令还是eb命令,都把WRITE_PORT_UCHAR函数“废掉了”,而这个函数对于系统和内核调试来说都是离不开的,调试引擎也需要它来发送数据给调试器。你的命令送给调试引擎后,便执行了,执行了后,通信的通道便断了,所以调试器收不到数据就一直BUSY了。这好比是把电闸拉了后,灯自然就不亮了。
下面是内核调试引擎的WRITE_PORT_UCHAR函数的反汇编,可以看到,它调用的就是HAL中的WRITE_PORT_UCHAR:
kd> u kdcom!WRITE_PORT_UCHAR
kdcom!WRITE_PORT_UCHAR:
f9f4ccf2 ff2504c3f4f9 jmp dword ptr [kdcom!_imp__WRITE_PORT_UCHAR (f9f4c304)]
kd> dd kdcom!_imp__WRITE_PORT_UCHAR l1
f9f4c304 806cce68
kd> u 806cce68
hal!WRITE_PORT_UCHAR:
806cce68 8b542404 mov edx,dword ptr [esp+4]
806cce6c 8a442408 mov al,byte ptr [esp+8]
806cce70 ee out dx,al
806cce71 c20800 ret 8
|