0x01AA Ответов: 1

Ntdll.dll сбой для приложения W32 на windows 10/64, еще один раз


Привет, эксперты, я заблудился...

У меня есть проблема с устаревшим приложением W32. Я знаю, что подобное было задано здесь несколько раз, и все ответы не помогли.

Один пример сообщения об ошибке в журнале событий Windows
Имя неисправного приложения: MyApp.exe, версия: 2.0.0.0, отметка времени: 0x00000000 имя модуля сбоя: ntdll.dll, версия: 10.0.14393.3630, отметка времени: 0x5e8d42d1 код исключения: 0xc0000005 смещение ошибки: 0x00039c0b идентификатор процесса сбоя: 0x130 время запуска приложения сбоя: 0x01d621cd3cb9571c путь приложения сбоя: C:\Program файлы (x86)\MyPgm\MyApp\MyApp.exe путь к неисправному модулю: C:\Windows\Папка System32\ntdll.dll идентификатор отчета: 5dbb6dd5-7f90-401f-ac03-659bb0fffa9d Faulting package полное имя: Faulting package-относительный идентификатор приложения:

Аналогичные журналы в журнале событий Windows для следующих DLL-файлов
ntdll.dll
KERNELBASE.dll
user32.dll

операционная система: Windows 10 LTSB 64Bit

Заранее
Я не могу воспроизвести эту ошибку в своей тестовой среде
У меня нет возможности отладить это на проблемной системе

Чего я не понимаю и наконец мой вопрос
Почему для приложения W32 все сообщения об ошибках для связанных с windows dll имеют путь "C:\Windows\Папка System32\" а не "C:\Windows\SysWOW64, его"?


Извините, что не могу быть более конкретным. Любой намек приветствуется.
Заранее Вам большое спасибо.

Что я уже пробовал:

Пробовал воспроизвести и Гугл для подобных случаев

ZurdoDev

Я не думаю, что это действительно имеет значение, говорит ли он SYSTEM32 или SysWOW64, не так ли?

Но этот сайт предназначен для вопросов кода. Я не уверен, что ты получишь большую помощь. Тем более, что дальше идти не на что.

Если бы я был на вашем месте, я бы больше беспокоился о том, что мое приложение рушится, а не о том, что показывает путь трассировки стека.

0x01AA

Спасибо за ваш комментарий.
"Я не думаю, что это действительно имеет значение, говорит ли он SYSTEM32 или SysWOW64, не так ли?": я только ищу разумное объяснение, почему приложение W32 в конечном итоге выходит из строя в 64-битной Dll.

Richard MacCutchan

Я предлагаю вам попробовать Microsoft. По крайней мере, они могут быть в состоянии определить, какая функция в ntdll вызывалась.

1 Ответов

Рейтинг:
1

KarstenK

Вас должен больше всего интересовать код ошибки 0xc0000005, который означает нарушение доступа и поэтому указывает на ошибку в вашем коде. Таким образом, ваша программа пытается получить доступ к какому-то плохому, заблокированному или не предоставленному ресурсу, часто это память. У меня был опыт, что такое бывает только в выпускных сборках, потому что отладочные сборки имеют некоторые отладочные биты в начале и в конце выделенной памяти.

Одно из возможных решений состоит в том, чтобы сделать некоторые статическая отладочная сборка или напишите какой-нибудь дорогой лог-файл, чтобы найти код, в котором происходит сбой.

Мой совет-это некоторые свободные или удаленные операции, математика указателей или доступ к дескрипторам. Поэтому сначала я бы проверил, что освобожденные указатели и закрытые дескрипторы обнулены и поэтому не используются повторно по ошибке. Надеюсь, ваш устаревший код не слишком грязный ;-)


0x01AA

Спасибо за ваш ответ. Но почему только на одной из множества установок? И почему приложение W32 заканчивается, например, на system32\ntdll.dll исключение? Хорошо, позже, возможно, только сообщение inacurrate или, скорее всего (?) SysWOW64\ntdll.использование dll system32\ntdll.dll который в конце концов терпит крах...

[Редактировать]
"Мой совет-это некоторые свободные или удаленные операции, математика указателей или доступ к дескрипторам": большинство кодов используют TPointer (означает, что как только вы покинете область действия, TPointer удалит выделенный класс). И насколько я могу судить, все остальное чисто с использованием try/finally. Но да, конечно, есть шанс, что найденный фрагмент кода (возможно, также в одной из используемых библиотек) не является полностью безопасным.