2010-01-30 7 views
6

Recientemente me encontré con una DLL instalada en mi sistema que Dependancy Walker (y cada otra utilidad que probé) dice que tiene cero exportaciones por nombre u ordinal, sin embargo, el archivo es de aproximadamente 4mb de tamaño. Pensé que el único propósito de una DLL era exportar funciones para su uso por otro código, entonces, ¿cuál sería el propósito de una DLL sin exportaciones visibles?¿Cómo puede una DLL tener cero exportaciones?

Respuesta

4

Una forma de pensar en una DLL es como contenedor de funciones. Exportar una función desde una DLL hace que esas funciones sean visibles para las personas que llaman fuera de la DLL. Si bien la exportación de funciones desde un DLL es quizás la forma más común de proporcionar acceso a ellos, muchas plataformas ofrecen otras formas de acceder a funciones que no se han exportado, como la reflexión en .NET Framework y Java, y (creo) LoadLibtary/GetProcAddress en Win32

razones para hacer esto son variadas, a menudo es porque es beneficioso para el desarrollador que tienen funciones en una biblioteca, pero indeseable para esas funciones a ser llamadas desde aplicaciones externas

+0

Oh, eso tiene sentido. Nunca me di cuenta (o incluso pensé) que podría haber formas de usar una DLL que no sea a través de la tabla de exportación si la escribió. –

3

sólo de recursos DLL, tal vez? Esos se utilizan con bastante frecuencia para fines de localización, por ejemplo.

EDITAR: también es posible tener una DLL con código que hace algo en DllMain() para hacer de alguna manera que su funcionalidad esté disponible. La DLL puede registrarse con algún despachador global, por ejemplo, o crear objetos kernel con nombre ...

Cuestiones relacionadas