В бета-тестировании новой версии моего программного обеспечения несколько пользователей сообщили об исключениях при запуске приложения. В обоих случаях это: «Приложение не смогло начать правильно (0xc0000142)». Я также видел его как 0xc0000005. Я также нашел локальную систему с этой ошибкой и обнаружил, что при запуске ее в отладчике «datamngr.dll» имел нарушение доступа и не выполнял выделение в куче. Я быстро обнаружил, что «datamngr.dll» является шпионским ПО и загружается, как и в AppInit системы.Почему любая DLL-инъекция вызывает сбои в хост-процессе?
После того, как я очистил ключ реестра AppInit, эта проблема исчезла. Я проверил его через Process Monitor, и всякий раз, когда эта DLL была введена, мое приложение разбилось. Я думал, что это просто плохо написанная программа-шпион, но с тех пор я нашел другие DLL-приложения, которые делают то же самое (например, acaptuser32.dll, что является законным программным обеспечением). Что странно для меня, так это предыдущая версия моего программного обеспечения не падает. Было много и много изменений между двумя версиями, поэтому трудно сказать, что это такое.
С чего начать? Некоторые онлайн-исследования показывают, что приложения, такие как Firefox, заменяют LoadLibrary на черный список DLL. Но я хотел бы начать с более простых - почему приложение теперь терпит крах, когда это не было раньше?
Я понимаю, что это очень расплывчато, но это в значительной степени неизбежно. Я надеюсь, что есть что-то очевидное в свойствах для проекта, который я делаю неправильно. Я пытался с ASLR включить и выключить, DEP включен и выключен ... Я пробовал загрузить загрузку user32.dll и вручную загружать его через LoadLibrary (с SetErrorMode установлен для игнорирования ошибок), и для меня ничего не работает. Мы видели это в Windows XP и Windows 7 (32 и 64-разрядных).
Любые указатели о том, с чего начать, будем очень благодарны. Я предоставлю как можно больше информации, если кому-то понадобятся другие детали.
Cheers
[Вы очень котенок] (http://blogs.msdn.com/b/oldnewthing/archive/2007/12/13/6648400.aspx) – Luke
Есть ли у вас контроль над версиями? Наиболее очевидной мерой устранения неполадок было бы определение точной точки, в которой было изменено поведение, хотя лично я начал бы перестраивать предыдущую версию из исходного кода, если это изменение в ваших инструментах построения, а не в самом источнике приложения. –
Сбой программы перед или после ввода основной функции вашего приложения? Как насчет основной функции библиотеки времени выполнения? –