Не могу воспроизвести. Скрипт запускал в виде отдельно приложения.
Система: windows win7 x64, IE9
python 2.6 + pykd 0.2.0.29 OK
python 2.7 + pykd 0.3.0.3 OK
Хочу заметить, что в принципе, есть кооректный случая, который даст такой Exception: переоткрытие директории по хендлу. В этом случае в OBJECT_ATTRIBUTES будет задано поле RootDirectory. Если при этом в поле ObjectName будет передана структура { 0, 0, NULL }, т.е пустая строка - для системы это корректное поведение. Выловить ее можноп проверив поле Length.
Попробуйте переписать callback функцию следующим образом:
Система: windows win7 x64, IE9
python 2.6 + pykd 0.2.0.29 OK
python 2.7 + pykd 0.3.0.3 OK
Хочу заметить, что в принципе, есть кооректный случая, который даст такой Exception: переоткрытие директории по хендлу. В этом случае в OBJECT_ATTRIBUTES будет задано поле RootDirectory. Если при этом в поле ObjectName будет передана структура { 0, 0, NULL }, т.е пустая строка - для системы это корректное поведение. Выловить ее можноп проверив поле Length.
Попробуйте переписать callback функцию следующим образом:
def NtUseFile(id):
nt = module("ntdll")
oa = nt.typedVar( "_OBJECT_ATTRIBUTES", ptrDWord(reg('esp') + 4 * 3) )
print loadUnicodeString( oa.ObjectName )
Тут есть промах по производительности: каждый раз будет происходит поиск информации о типе. Этого можно избежать, если заранее инициализировать глобальную переменнуюOBJECT_ATTRIBUTES = nt.typeInfo(""_OBJECT_ATTRIBUTES")
def NtUseFile(id):
oa = typedVar( OBJECT_ATTRIBUTES , ptrDWord(reg('esp') + 4 * 3) )
print loadUnicodeString( oa.ObjectName )