Глючат системные библиотеки
От: PanychY  
Дата: 21.12.16 14:16
Оценка:
Приветствую

Есть система 8.1 Enterprise(обновлено из 8 Enterprise).
Всё вроде работало но периодический напарываюсь на приложения которые тупо не работают. Вскрытие показывает что случается это по такому странному поводу:
1. Одна из прикладных DLL приложения(foo.dll) зависит от системных библиотек user32.dll kernel32.dll advapi32.dll msvcrt.dll (ничего необычного).
2. В своем тестовом приложении пытаюсь делать LoadLibraryW("foo.dll") получаю NULL GetLastError() = 126(MODULE_NOT_FOUND) O_o
3. Вооружаюсь DependencyWalker-ом, смотрю на foo.dll, и что я вижу:
FOO.DLL
 + USER32.DLL
 | + API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL (не найден модуль)
 | + API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL (не найден модуль)
 + ADVAPI32.DLL
   + API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL (не найден модуль)

Вот тут у меня ступор: как не найдено? Часть системных компонент куда делось? Пошел искать руками. Нашел кучу подобных файлов %systemroot%\system32 но пациентов среди них не оказалось, оказались братья в имени которых в конце -L1-1-0 вместо -L1-1-1. Пошел искать дальше. Пациенты нашлись в %systemroot%\system32\downlevel. Но система их не видит.
Вопрос: что не так?
Ладно, попробовал "исправить" путем прописывания %systemroot%\system32\downlevel в PATH. Лучше не стало. DepWalker теперь находит модули, но матерится на отсутствующие символы в них.
Microsoft Redistributable for Visual C++ 20xx ставил все какие мог — не помогало.
Пробовал запускать тестовое приложения в различных режимах совместимости(8, 7, Vista) — ноль на массу.

Кто знает как лечить? (без переустановки) Надо работать с этими модулями программно. Да и если на клиенте такая фигня случится, хочется знать что крутить.
winapi dll
Re: Глючат системные библиотеки
От: Pavel Dvorkin Россия  
Дата: 21.12.16 15:39
Оценка:
Здравствуйте, PanychY, Вы писали:

Посмотри здесь, похожая проблема

https://answers.microsoft.com/en-us/windows/forum/windows8_1-performance/32-bit-application-fails-to-start-after-81-upgrade/b825723e-e2a2-4c8f-bd1f-10446a5d7059
With best regards
Pavel Dvorkin
Re[2]: Глючат системные библиотеки
От: PanychY  
Дата: 21.12.16 16:51
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, PanychY, Вы писали:


PD>Посмотри здесь, похожая проблема


PD>https://answers.microsoft.com/en-us/windows/forum/windows8_1-performance/32-bit-application-fails-to-start-after-81-upgrade/b825723e-e2a2-4c8f-bd1f-10446a5d7059


Да, да. Меня уже тошнит от похожих проблем Гуглить умею. Там чувак вылечил путем доустановки redist-а, что я уже пытался делать не раз. Это спасало в своё время на ХР, когда эту фигню только добавили(инсталятор видел что он на ХР и доустанавливал эти компоненты в систему), но тут номер не проходит.

Да, у меня 64битное приложение/библиотеки.
Re[3]: Глючат системные библиотеки
От: Pavel Dvorkin Россия  
Дата: 21.12.16 17:15
Оценка:
Здравствуйте, PanychY, Вы писали:

PY>Да, да. Меня уже тошнит от похожих проблем Гуглить умею. Там чувак вылечил путем доустановки redist-а, что я уже пытался делать не раз. Это спасало в своё время на ХР, когда эту фигню только добавили(инсталятор видел что он на ХР и доустанавливал эти компоненты в систему), но тут номер не проходит.


Вообще-то то, что происходит, как-то не очень понятно. Нет ведь у твоей foo.dll прямых импортов из этих жутких DLL, только от user32.dll. А ей и разбираться в своих импортах. Как вообще система работает, если у user32.dll неразрешенные импорты ?

У меня все эти 1-1 версии есть, но у меня Windows 10. Кстати, не в самом system32, а в его downlevel, в самом system32 таких вообще нет
With best regards
Pavel Dvorkin
Отредактировано 21.12.2016 17:19 Pavel Dvorkin . Предыдущая версия .
Re[4]: Глючат системные библиотеки
От: PanychY  
Дата: 21.12.16 20:28
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Вообще-то то, что происходит, как-то не очень понятно. Нет ведь у твоей foo.dll прямых импортов из этих жутких DLL, только от user32.dll. А ей и разбираться в своих импортах. Как вообще система работает, если у user32.dll неразрешенные импорты ?

А черти что там делается. Об остальных моих квестах я промолчу. Их особо много было при установке MSVS 2015 Update 3. Судя по гуглу очевидно что страдает старый софт(завязанные на старые msvcrt.dll, которые смотрят на удаленные символы). Прикол в том что эта фигня с разбиением системных библиотек на кусочки началась совсем недавно(WinRT что-ли), и они придумали/заиспользовали какой-то механизм частичной загрузки библиотек что-ли. Черт их знает.

PD>У меня все эти 1-1 версии есть, но у меня Windows 10. Кстати, не в самом system32, а в его downlevel, в самом system32 таких вообще нет

Да, да, я об этом и написал. Не знаю что там у 10, но думаю что от 8.1 отличаться не должно.
Что интересно, уговорил коллегу попробовать у себя провести тест — тот же результат(только у меня 8 Ent -> 8.1 Ent, а у него 8 Pro ->8.1 Pro). В downlevel лежат те же файлы, и т.д. (да, я мог сломать систему себе, но коллеге то не мог же! значит сломало что-то другое)

Что гадать то Качните отсюда, распакуйте и попробуйте вот таким кодом:
#include <windows.h>
int main(int argc, char* argv[]) {
  if(!LoadLibraryW(L"path-to-libstdc++-6.dll")) {
    MessageBoxA(NULL, "error", "error", 0 );
    return 1;
  }
  return 0;
}
Это частный случай, но такого прилично
Re: Глючат системные библиотеки
От: VTT http://vtt.to
Дата: 21.12.16 21:12
Оценка:
Здравствуйте, PanychY, Вы писали:

PY>msvcrt.dll (ничего необычного)


Это очень подозрительно, скорее всего вам надо раздобыть и подсунуть оригинальную msvcrt.dll с которой может работать данная библиотека, а не пытаться использовать системную.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[2]: Глючат системные библиотеки
От: PanychY  
Дата: 21.12.16 21:36
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>Здравствуйте, PanychY, Вы писали:


PY>>msvcrt.dll (ничего необычного)


VTT>Это очень подозрительно, скорее всего вам надо раздобыть и подсунуть оригинальную msvcrt.dll с которой может работать данная библиотека, а не пытаться использовать системную.


Вот какраз она впорядке. Не в порядке USER32.DLL(и вообще)

Вот дамп depwalkera libstdc++-6.dll
Re[5]: Глючат системные библиотеки
От: CEMb  
Дата: 22.12.16 02:13
Оценка:
Здравствуйте, PanychY, Вы писали:

PY> Черт их знает.


MS хитрым образом отучает нас от прямого использования WinAPI
Re[3]: Глючат системные библиотеки
От: кт  
Дата: 22.12.16 09:04
Оценка:
Здравствуйте, PanychY, Вы писали:

PY>Не в порядке USER32.DLL(и вообще)


Может и глупый вопрос, а антивирус какой-то установлен?

Я к чему. Спрашиваю у коллег, а как вообще сейчас работают антивирусы? В смысле физически чего делают с Win? Никто не знает. Ну работают и работают. Тебе какое дело?
А я получал от пользователей скриншоты из серии "то, чего не может быть". Виноват оказался Семантик, у которого чего-то там полетело...
Re[4]: Глючат системные библиотеки
От: PanychY  
Дата: 22.12.16 11:41
Оценка:
Здравствуйте, кт, Вы писали:

кт>Может и глупый вопрос, а антивирус какой-то установлен?


кт>Я к чему. Спрашиваю у коллег, а как вообще сейчас работают антивирусы? В смысле физически чего делают с Win? Никто не знает. Ну работают и работают. Тебе какое дело?

кт>А я получал от пользователей скриншоты из серии "то, чего не может быть". Виноват оказался Семантик, у которого чего-то там полетело...
Изкоробочный Windows Defender. И то я его отключил(да так что включить не могу — служба при запуске начинает активно "рипеть" винтом и так и не стартует). У коллеги тоже(но проблем он не имеет с его включением). Машина в домене(даже так, оно пережило миграцию между доменами), думаю мало на что влияет. Где-то выше я запостил пример анамнеза от Dependency Walker-а. Если есть желание можете попробовать у себя тестовым приложением.
Re: Глючат системные библиотеки
От: Lexey Россия  
Дата: 22.12.16 12:20
Оценка: +2
Здравствуйте, PanychY, Вы писали:

PY>3. Вооружаюсь DependencyWalker-ом, смотрю на foo.dll, и что я вижу:

PY>
FOO.DLL
PY> + USER32.DLL
PY> | + API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL (не найден модуль)
PY> | + API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL (не найден модуль)
PY> + ADVAPI32.DLL
PY>   + API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL (не найден модуль)
PY>

PY>Вот тут у меня ступор: как не найдено? Часть системных компонент куда делось? Пошел искать руками. Нашел кучу подобных файлов %systemroot%\system32 но пациентов среди них не оказалось, оказались братья в имени которых в конце -L1-1-0 вместо -L1-1-1. Пошел искать дальше. Пациенты нашлись в %systemroot%\system32\downlevel. Но система их не видит.

Забудь. Это проблемы dependency walker'а.
Вместо него попробуй Sxstrace использовать.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[5]: Глючат системные библиотеки
От: кт  
Дата: 22.12.16 12:41
Оценка:
Здравствуйте, PanychY, Вы писали:

PY> Если есть желание можете попробовать у себя тестовым приложением.


Увы, у меня даже не Win7 и менять не имею права
Подозрение было: не устанавливает ли самовольно антивирус какие-либо системные библиотеки...
Re[2]: Глючат системные библиотеки
От: PanychY  
Дата: 22.12.16 16:47
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Забудь. Это проблемы dependency walker'а.

L>Вместо него попробуй Sxstrace использовать.
Даже DepWalker о чем-то не в курсе, то при запуске тестового приложения его проблемы точно ни при чем.
А утилиту попробую, но пишет что 2012год, и я думаю она совсем не вкурит что тут не так.
*лядство в том, что даже если я это починю у себя(на машине разработчика), я не смогу заставить то-же самое сделать клиентов на своих машинах(если для этого нужно вывернуть кишки винды наружу, к чему относится трах с SXS). Тем более что то, чем я занимаюсь скорее приятный бонус для полноты картины(после портирования софта на x86_64) чем необходимость(2 года обходятся).
Re[3]: Глючат системные библиотеки
От: aloch Россия  
Дата: 23.12.16 08:18
Оценка: +1
Здравствуйте, PanychY, Вы писали:

Ты не понял. То, что Debends.exe не показывает все эти библиотеки виноват сам Depends.exe. Он их и у меня для любого приложения или DLL не показывает, но при этом все эти приложения и DLL работают.

Так что ищи проблему в другом месте.


Re[3]: Глючат системные библиотеки
От: Lexey Россия  
Дата: 23.12.16 12:23
Оценка:
Здравствуйте, PanychY, Вы писали:

PY>А утилиту попробую, но пишет что 2012год, и я думаю она совсем не вкурит что тут не так.


Механизм SxS давно был придуман. И едва ли там что-то менялось в 2012 года. Так что, не ясно, почему она должна "не вкурить"?

PY>*лядство в том, что даже если я это починю у себя(на машине разработчика), я не смогу заставить то-же самое сделать клиентов на своих машинах(если для этого нужно вывернуть кишки винды наружу, к чему относится трах с SXS). Тем более что то, чем я занимаюсь скорее приятный бонус для полноты картины(после портирования софта на x86_64) чем необходимость(2 года обходятся).


Если у тебя проблема с версиями рантаймовых библиотек VC++ (что наиболее вероятно), то у клиентов она решается не трахом с Sxstrace, а установкой у него той же версии рантайма, с которой собиралось приложение. Или сборкой со статическим рантаймом.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[4]: Глючат системные библиотеки
От: PanychY  
Дата: 23.12.16 20:00
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Здравствуйте, PanychY, Вы писали:


PY>>А утилиту попробую, но пишет что 2012год, и я думаю она совсем не вкурит что тут не так.


L>Если у тебя проблема с версиями рантаймовых библиотек VC++ (что наиболее вероятно), то у клиентов она решается не трахом с Sxstrace, а установкой у него той же версии рантайма, с которой собиралось приложение. Или сборкой со статическим рантаймом.


Поопробовал, sxstrace промолачал.
=================
Begin Activation Context Generation.
Input Parameter:
    Flags = 0
    ProcessorArchitecture = AMD64
    CultureFallBacks = en-US;en
    ManifestPath = D:\Aspell\.new\TestAspellx64.exe
    AssemblyDirectory = D:\Aspell\.new\
    Application Config File = 
-----------------
INFO: Parsing Manifest File D:\Aspell\.new\TestAspellx64.exe.
    INFO: Manifest Definition Identity is (null).
INFO: Activation Context generation succeeded.
End Activation Context Generation.

При чем тут рантайм? user32.dll нифига не рантайм. Топик читали?
LIBASPELL-15.DLL
 + LIBSTDC++-6.DLL
   + USER32.DLL
     + API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL (не найден модуль)
     + API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL (не найден модуль)
     + API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL (не найден модуль)
Re[6]: Глючат системные библиотеки
От: Vain Россия google.ru
Дата: 02.01.17 15:14
Оценка:
Здравствуйте, CEMb, Вы писали:

PY>> Черт их знает.

CEM>MS хитрым образом отучает нас от прямого использования WinAPI
А не старые ли функции пробуют выкинуть?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: Глючат системные библиотеки
От: Vain Россия google.ru
Дата: 02.01.17 15:21
Оценка:
Здравствуйте, PanychY, Вы писали:

PY>При чем тут рантайм? user32.dll нифига не рантайм. Топик читали?

В старом понимании не рантайм.

PY> + API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL (не найден модуль)

PY> + API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL (не найден модуль)
PY> + API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL (не найден модуль)[/code]
^^^^^^^^^^^^^^^^^^^^^^^^^^^
а здесь уже версия указана, чем не рантайм?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: Глючат системные библиотеки
От: PanychY  
Дата: 02.01.17 15:38
Оценка:
Здравствуйте, Vain, Вы писали:
PY>>При чем тут рантайм? user32.dll нифига не рантайм. Топик читали?
V>В старом понимании не рантайм.
V>а здесь уже версия указана, чем не рантайм?

Линкуюсь прямо с user32.dll kernel32.dll advapu32.dll — WIN32 Platform API. Как оно дальше, какие там версии меня не особо интересует, главное чтобы работало
Re[7]: Глючат системные библиотеки
От: PanychY  
Дата: 02.01.17 15:53
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, CEMb, Вы писали:


PY>>> Черт их знает.

CEM>>MS хитрым образом отучает нас от прямого использования WinAPI
V>А не старые ли функции пробуют выкинуть?

Ничего там не выкинули. Поясняю:
Есть такая вещь называется GNU Aspell Spellchecker
С точки зрения пользователя это aspell.exe зависящий от LIBASPELL-15.DLL+LIBGCC_S_SEH-1.DLL+LIBICONV-2.DLL+LIBINTL-8.DLL+LIBSTDC++-6.DLL+KERNEL32.DLL+USER32.DLL+MSVCRT.DLL
С точки зрения разработчика это libaspell-15.dll зависящий от LIBINTL-8.DLL+LIBSTDC++-6.DLL+KERNEL32.DLL+USER32.DLL+MSVCRT.DLL

Так вот, запускаю aspell.exe — всё работает.
Из своего приложения гружу libaspell-15.dll — полный облом.
Вопрос: чем отличается выхлоп x86_64-w-mingw32(aspell.exe) от выхлопа MSVS 2015(TestAspellx64.exe — тестовое приложение). Чего ему не хватает то?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.