Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ С\С++ _ Про ошибки в DLL

Автор: Litkevich Yuriy 4.2.2019, 6:08

По поводу DLL-ок вопрос.

Положим есть DLL-ка и запущены 2 приложения использующие её.
А в DLL-ке баг, который в определённой ситуации приведёт к её падению.

Допустим одно приложение создало такую ситуацию, при этом оба приложения упадут и сама DLL-ка?

Как это работает?

Автор: Алексей1153 4.2.2019, 8:29

Litkevich Yuriy, насколько я понимаю, если одно приложение создало ситуацию, то упадёт только оно. А DLL падать не умеет.

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

Следовательно, если баг есть в DLL, то этот баг будет в любом приложении, которое загрузило себе эту DLL (будет сидеть и не проявляться, возможно. Или проявится, если косячный код вызовется)

Но если некий злой гений специально сделал какую-нибудь глобальную отслеживалку в DLL, которая при падении процесса заставляет во всех копиях dll тоже спровоцировать краш - тогда да :D


Автор: Iron Bug 7.2.2019, 4:24

в норме у современных ОСей каждый процесс имеет свою копию DLL'ки.
естественно, это не отменяет возможности использования внутри DLL каких-то общесистемных ресурсов (расшаренных системных ресурсов, общей памяти для каких-то глобальных данных и т.д.) и в этом случае, если возникли какие-то серьёзные нарушения доступа, то может упасть всё, вплоть до системы :) но такое редко встречается в DLL'ках.

Автор: Litkevich Yuriy 9.2.2019, 7:11

Цитата(Iron Bug @ 7.2.2019, 6:24) *
но такое редко встречается в DLL'ках
ну это зависит от того, как я её накастылю 😀

Автор: Алексей1153 9.2.2019, 8:22

Litkevich Yuriy, глобальный хук с рекурсией подойдёт :D

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)