Создание ловушек HANDLE в WOW64 - PullRequest
6 голосов
/ 23 марта 2012

Я пытаюсь устранить неполадки при медленном запуске стороннего двоичного файла (без источника). Это 32-битное приложение, работающее на 64-битной Windows 7.

Я использовал отладчик для взлома приложения, когда он загружен при загрузке процессора 0% при запуске, и он, похоже, ожидает возврата ReadFile. Первый аргумент ReadFile - это значение дескриптора 000000f0. Команда !handle windbg говорит мне:

Handle f0
  Type            File
  Attributes      0
  GrantedAccess   0x120189:
         ReadControl,Synch
         Read/List,ReadEA,ReadAttr,WriteAttr
  HandleCount     2
  PointerCount    4
  No Object Specific Information available

Я хочу знать, какому устройству это соответствует. Но Sysinternals Process Explorer не включает этот дескриптор в свой список дескрипторов процесса.

Я использовал windbg для отслеживания всех вызовов на ntdll!NtCreateFile и напечатал путь и возвращенный дескриптор: этот дескриптор среди них нет. Точки останова на kernel32!CreateNamedPipeW, kernel32!CallNamedPipeW и kernel32!WaitNamedPipeW никогда не срабатывают (что странно, потому что Process Explorer действительно показал другой дескриптор с путем \Device\NamedPipe\).

Для справки, вот команда для трассировки NtCreateFile (akak ZwCreateFile) в Windows x64:

bp ntdll!NtCreateFile "!ustr poi(@r8+10) ; r $t0 = @rcx ; gu ; dd @$t0 L1 ; gc"

Спасибо Скайвингу за то, что он указал мне правильное направление .

Откуда еще может быть РУЧКА типа File? Разве другие функции создания HANDLE не делегируют NtCreateFile для фактического системного вызова (я полагаю, нет)?

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Дескрипторы могут быть унаследованы, а также могут быть созданы DuplicateHandle (). Вы можете попытаться вызвать GetFileInformationByHandleEx для дескриптора и запросить FileNameInfo.

1 голос
/ 23 марта 2012

Похоже, что вы можете получить информацию о файле только при отладке ядра. Так что есть 3 варианта.

  1. Выполните отладку ядра локальной машины, это не должно быть проблемой, так как вам нужно только получить информацию о дескрипторе файла, и она останется статичной. Смотрите следующее: http://msdn.microsoft.com/en-us/library/windows/hardware/ff553382(v=vs.85).aspx
  2. Выполнить удаленную отладку ядра на машине с виртуальной машиной. «Безопаснее» в том смысле, что вы не можете взорвать свою машину.
  3. BSOD свою коробку и посмотри на дамп таким образом. Опять же, это не очень хорошая вещь для вашей коробки, но я делал подобные вещи в прошлом, когда мне нужно было иметь возможность выполнить полный анализ на машине без изменения состояния машины.
...