Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];

Вниз

LoadLibrary   Найти похожие ветки 

 
dll   (2008-06-04 13:08) [0]

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

Скажите, это вообще правомочно или нет?


 
guav ©   (2008-06-04 13:22) [1]

С 32 вообще-то сравнивают результат ShellExecute.

Но ошибки при сравнении с 32 результата LoadLibrary нет. Т.к. HMODULE это адрес или NULL, единственное возможное значение меньшее 32 это 0, оно как раз свидетельствует об ошибке.


 
Anatoly Podgoretsky ©   (2008-06-04 14:14) [2]

> dll  (04.06.2008 13:08:00)  [0]

Правомочно, но неправильно. сравнение на 32 относится к Windows 3.1


 
dll   (2008-06-04 14:23) [3]

в общем почему спросил-то.
столкнулся с ситуацией, когда в программе используется динамический импорт функций из библиотек. При установке на машину клиента все работает, за исключением функционала, вынесенного в dll.

а при просмотре кода обнаружилось нечто подобное:

загружаем либу №1, если результат меньше 32 выходим
выполняем getprocaddress"ы
загружаем либу №2, если результат меньше 32 выходим
выполняем getprocaddress"ы

в результате при обращении к импортированным функциям получаем av.


 
Игорь Шевченко ©   (2008-06-04 17:12) [4]


> в результате при обращении к импортированным функциям получаем
> av.


Может неправильно обращаешься ?


 
dll   (2008-06-04 17:23) [5]

да вроде нет. это какой-то локальный глюк. в сотне других мест этот же самый код работает. длл пробовал класть везде откуда они могут быть загружены.
из вредоносного по только нод32 стоит (у меня тоже).
что же может блокировать загрузку?


 
DiamondShark ©   (2008-06-04 18:35) [6]


> выполняем getprocaddress"ы

Возвращаемый адрес, конечно, не проверяем.


> что же может блокировать загрузку?

Инопланетяне.

hModule := LoadLibrary(...);
Win32Check(hModule <> 0);
pProc := GetProcAddress(hModule, ...);
Win32Check(pProc <> nil);

И сразу увидишь, кто.


 
dll   (2008-06-04 19:33) [7]

Возвращаемый адрес, конечно, не проверяем.

на 99 машинах в одной и той же длл процедура есть, а на сотой вдруг нет?
длл туда попадают вместе с инсталлятором.


 
DiamondShark ©   (2008-06-04 20:02) [8]


> dll   (04.06.08 19:33) [7]

Ну, продолжай гадать на кофейной гуще, вместо того, чтобы система сама тебе сказала, что не так.


 
dll   (2008-06-04 21:29) [9]

я не гадаю.
я спрашиваю, что может помешать вызову loadlibrary если библиотека лежит в папке с exe либо в папке system32 на xp sp2.
то, что getprocadress ничего не возвращает либо вообще не вызывается по причине что getmodulehandle меньше 32 это и так понятно.


 
Игорь Шевченко ©   (2008-06-04 22:26) [10]


> я спрашиваю, что может помешать вызову loadlibrary если
> библиотека лежит в папке с exe либо в папке system32 на
> xp sp2.


Параметр реестра safedllsearchmode


 
Плохиш ©   (2008-06-05 11:10) [11]


> dll   (04.06.08 21:29) [9]
> я не гадаю.

Тогда читай [6] до полного просветления.


 
dll   (2008-06-05 12:13) [12]

Тогда читай [6] до полного просветления.
Открыл америку ....Я и так знаю, что либа не загрузилась.

В общем более подробное инфо:
тестовый проект на флешке.
делается loadlibrary, затем выводится getmodulehandle для трех библиотек.
на машинах пациенов хендлы нулевые.
при завершении приложения с флешки защищенной от записи некий процесс выводит окно с текстом типа не могу записать на диск бла бла бла.
само тестовое приложение ничего не пишет на диск.
амон нода был отключен. предварительно флешка была просканирована этмм же нодом.
кроме нода из вредоносных программ замесена еще 1с


 
dll   (2008-06-05 12:14) [13]

кто может перехватывать загрузку длл?


 
Anatoly Podgoretsky ©   (2008-06-05 12:23) [14]


> Я и так знаю, что либа не загрузилась.

Тогда сообщи нам код ошибки.


 
clickmaker ©   (2008-06-05 12:49) [15]

> [13] dll   (05.06.08 12:14)
> кто может перехватывать загрузку длл?

DLL может статически прилинковывать другие DLL и импортировать функцию, которой на сотой машине не оказалось


 
dll   (2008-06-05 12:54) [16]

про импорт третьих библиотек из загружаемых щас проверяю.

но если в загружаемых длл есть статик импорт недостающих, то разве при загрузке не будет явного сообщения?


 
dll   (2008-06-05 13:18) [17]

GetlastError = 14001


 
Сергей М. ©   (2008-06-05 13:18) [18]


> разве при загрузке не будет явного сообщения?
>


Не будет.

Вот если бы твоя dll грузилась статически, то тогда было бы.


 
clickmaker ©   (2008-06-05 13:25) [19]

> [17] dll   (05.06.08 13:18)
> GetlastError = 14001

ShowMessage(SysErrorMessage(GetLastError))


 
Anatoly Podgoretsky ©   (2008-06-05 14:10) [20]

> dll  (05.06.2008 13:18:17)  [17]

По этой ошибке есть только это

14001 ERROR_SXS_CANT_GEN_ACTCTX

The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail.


 
dll   (2008-06-05 14:51) [21]

dependency walker показал, что есть зависимость от
msvcp80.dll
msvcr80.dll

запустил тестовый exe с этими dll, лежащими в папке с exe - ничего не изменилось.


 
dll   (2008-06-05 15:39) [22]

интересно вот что.
на моей машине эти msv*80.dll лежат в папках типа этой:

C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.163_x-ww_681e29fb

в путях ее нет, значит они как-то зарегистрированы?
чем и где?


 
Игорь Шевченко ©   (2008-06-05 15:42) [23]


> в путях ее нет, значит они как-то зарегистрированы?
> чем и где?


14001 ERROR_SXS_CANT_GEN_ACTCTX

Вот это сообщение как раз на эту тему.

манифест надо делать и указывать в нем ссылку на эти dll


 
dll   (2008-06-05 15:45) [24]

про манифест мне разработчик dll уже сказал.
ссылки на либы нашел в своем реестре в windows\current version\SideBySide
то есть видимо надо просто regsrv для них сделать?


 
dll   (2008-06-05 16:08) [25]

regsrv для них не прокатывает.
как их можно прикрутить-то к системе?


 
Anatoly Podgoretsky ©   (2008-06-05 16:16) [26]

> Игорь Шевченко  (05.06.2008 15:42:23)  [23]

Судя по WinSxS так и есть, это папка предшественница защиты Висты, на некоторых машинах превышает System32


 
dll   (2008-06-05 16:33) [27]

парни, как либы-то зарегистрировать в этом sxs?


 
Anatoly Podgoretsky ©   (2008-06-05 16:44) [28]

> dll  (05.06.2008 16:08:25)  [25]

Сложный вопрос, то что попало в эту папку - это особое, туда просто так не попадают.


 
Игорь Шевченко ©   (2008-06-05 16:56) [29]


> Судя по WinSxS так и есть, это папка предшественница защиты
> Висты, на некоторых машинах превышает System32


Собственно, не совсем предшественница, скорее Vista преемница. А ноги из .Net растут - борьба с DLL Hell


 
dll   (2008-06-05 16:59) [30]

ок. зайдем с другого бока.
назначение winSxS  - разрешение конфликта одноименных dll разных версий.

ситуация: три не моих длл импортируют несколько сишных рантайм библиотек. на "нормальном" компе все они лежат в WinSxS.

вопрос: почему не загружаются те три длл, если других версий msv*80.dll нет, а существующие лежат в путях?

еще вопрос:
в WinSxS длл попадают судя по описанию в результате кривых инсталяторов, если те пытаются заменить одноименные длл.

у меня три эти длл не инсталировались, а просто были распакованы из присланного архива. И все разботает.

На некоторых "неправильных" машинах не работает, даже если библиотеки *80.dll лежат вместе с теми тремя.

куда копать?


 
Игорь Шевченко ©   (2008-06-05 17:11) [31]


> три не моих длл импортируют несколько сишных рантайм библиотек


У них манифест есть в ресурсах ?


> в WinSxS длл попадают судя по описанию в результате кривых
> инсталяторов, если те пытаются заменить одноименные длл.
>


Нет


 
dll   (2008-06-05 17:16) [32]

На чистой, только что установленной машине нашел по две версии msvcp80.dll msvcr80.dll

лежат в папке windows\WinSxS\x86_Microsoft_бла_бла_бла_1433_бла бла

1433 нужный мне билд (при переименовании длл другого билда рабюотоспособность не теряется)
манифестов рядом с длл нет
Видимо они в windows\WinSxS\Manifests

как же мне на системах с отсутствующим номером билдов вклеить эти длл?


 
Игорь Шевченко ©   (2008-06-05 17:36) [33]


> У них манифест есть в ресурсах ?


 
dll   (2008-06-05 17:39) [34]

нету. лежат отдельно в виде файлов в папке манифестс


 
Игорь Шевченко ©   (2008-06-05 17:44) [35]


> три не моих длл импортируют несколько сишных рантайм библиотек.
>  на "нормальном" компе все они лежат в WinSxS.


У них манифест есть в ресурсах ? У трех не твоих dll


 
dll   (2008-06-05 17:48) [36]

наверное нету. как посмотреть?
ресурса версии точно нету.


 
dll   (2008-06-05 17:56) [37]

непонятно вот что:
"три" длл импортируют msvcp80 и msvcr80
на чистой машине убираю 1433 билд всех библиотек *80.dll
остается билд 762.
тест не работает.
откуда три длл знают, что им нужен 1433 билд?


 
Игорь Шевченко ©   (2008-06-05 20:11) [38]


> откуда три длл знают, что им нужен 1433 билд?


из манифеста


> как посмотреть?


tdump имя.dll


 
dll   (2008-06-05 22:03) [39]

Похоже нет там манифеста

http://rapidshare.com/files/120324370/ttt.txt


 
Игорь Шевченко ©   (2008-06-06 10:05) [40]


> http://rapidshare.com/files/120324370/ttt.txt


Resources:
Type          Name                   Lang Id
--------------------------------------------
[0 named entries, 1 ID entries]
type: Unknown (24)  (next directory @00000018)

Вот это и есть манифест, в котором прописано место, где искать MSVCR80.dll



Страницы: 1 2 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.009 c
4-1222287501
MasDen
2008-09-25 00:18
2009.11.22
Действия после закрытия окна


1-1225211215
leonidus
2008-10-28 19:26
2009.11.22
Кодирование кириллицы для использования в URL


11-1207992046
Фунтик
2008-04-12 13:20
2009.11.22
Delphi 7 + KOL, проблема


1-1225286061
DelphiLexx
2008-10-29 16:14
2009.11.22
Динамические типы в классах


3-1229664131
foriegn keys
2008-12-19 08:22
2009.11.22
ссылка таблицы самц на себя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский