请教关于Write_Port_uchar的一个问题

Windows内核调试

请教关于Write_Port_uchar的一个问题


初学者 2009-03-21, 14:28 下午
VM里面手工windbg改Hal的Write_Port_uchar,为什么会导致windbg假死?写sys改也导致vm假死,请问是什么原因?

Re: 请教关于Write_Port_uchar的一个问题


格蠹老雷 2009-03-22, 21:37 下午
这样的问题让人摸不着头脑。麻烦楼主,能把问题写的清楚些么?改成了什么样?

Re: 请教关于Write_Port_uchar的一个问题


初学者 2009-03-23, 04:46 上午
0: kd> u Write_port_uchar
hal!WRITE_PORT_UCHAR:
806ebaac 8b542404 mov edx,dword ptr [esp+4]
806ebab0 8a442408 mov al,byte ptr [esp+8]
806ebab4 ee out dx,al
806ebab5 c20800 ret 8

继续手工输入f WRITE_PORT_UCHAR L9 0x90,Windbg就显示一直Busy,失去响应,不知道是什么原因,eb 806ebab4 0x90也一样,Windbg直接假死了

Re: 请教关于Write_Port_uchar的一个问题


格蠹老雷 2009-03-23, 23:03 下午

你这么描述后,便可以知道其中的原委了。无论是你的内存填充命令还是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

Re: 请教关于Write_Port_uchar的一个问题


初学者 2009-03-24, 01:40 上午
原来如此,谢谢Raymond 老师

Powered by Community Server Powered by CnForums.Net