能力值:
( LV2,RANK:10 )
|
-
-
2 楼
有过这方面代码经验的求指教。。。这bug调了很久才知道是这个函数不兼容,而且用windbg都无法调试,只能使用!analyze -v来分析蓝屏代码。。。很纠结
|
能力值:
( LV11,RANK:190 )
|
-
-
3 楼
xp下直接读取对象头,win7(32位)下可以搜索ObTypeIndexTable变量,之后*(&ObTypeIndexTable + *(PBYTE)(ADDRESS- 0xC));
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
好吧,我试下这个方法。之前觉得搜索这个数组很麻烦,windows7提供了自带的函数直接通过索引获得类型比较简单点。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
对了问句这个变量是否是导出变量?是导出变量的话应该直接声明就可以用了把?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
感谢三楼,给了我灵感,分全部给你把!也没有别人。下面贴出我的方法,以后有人遇到同样的问题可以搜索的到。
首先是三楼的回答:
xp下直接读取对象头,win7(32位)下可以搜索ObTypeIndexTable变量,之后*(&ObTypeIndexTable + *(PBYTE)(ADDRESS- 0xC));
我自己的解决方法:
没有搜索ObTypeIndexTable这个表,因为感觉挺复杂的,首先要搜索这个变量,而且也不知道从哪个地方开始搜索。所以我仍然使用的是ObGetObjectType这个windows7提供的函数。但是这次不是直接使用导出函数,因为使用导出函数会导致windows xp系统的不兼容。所以我通过一个GetAddress函数动态获得这个函数地址。代码如下:
typedef PVOID(NTAPI *OBGETOBJECTTYPE)(PVOID);
OBGETOBJECTTYPE OBGetObjectType;
VOID GetAddress()
{
PUCHAR addr;
UNICODE_STRING pslookup;
RtlInitUnicodeString(&pslookup,L"ObGetObjectType");
addr=(PUCHAR)MmGetSystemRoutineAddress(&pslookup);
OBGetObjectType=(OBGETOBJECTTYPE )addr;
return;
}
代码我就不解释了,留给后面同样出现这种问题的童鞋把!这个bug解决了很久,很菜,还望莫笑
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
感谢楼主无私分享,学习了。
|
|
|