Pregunta

Sé DLL contiene una o más funciones exportadas que se compilan, vinculados, y almacenados por separado ..

Mi pregunta es acerca de no sobre cómo crear .. pero es todo acerca de en qué forma se almacena .. ¿Va a ser en forma de 0 y de 1 de .. o en los comandos de montaje ADD, MUL, DIV, MOV, LLAMADA, el retorno etc .. También lo que hace que sea dependiente del procesador .. (como x86, x87, IBM 700 del conjunto de instrucciones) ..

Por favor alguien puede explicarlo brevemente poco ..!

¿Fue útil?

Solución

En primer lugar, todo en un equipo se encuentra en la forma de "0 de & 1". El hecho de que el equipo puede mostrar algunos de estos como texto, imágenes, sonidos, modelos 3D, etc., es sólo una cuestión de por qué las interpretan. Pero allá abajo, en el metal, todo es sólo "0 de & 1" (también conocidos como bits). Ten en cuenta que siempre se agrupan en grupos de 8, y estos son llamados "bytes". Es realmente en aras de la eficiencia, ya que opera con cada bit individual sería demasiado tedioso. En realidad, los ordenadores de hoy en día ni siquiera operan en bytes individuales más (o más bien - lo hacen muy raramente). Parcialmente se opera con 4 u 8 bytes a la vez, dependiendo de si usted tiene una CPU de 32 bits o 64 bits (que es en términos simples, en realidad es un poco más complicado que eso).

En cuanto a un archivo DLL - como un archivo .EXE, contiene bytes que describen las instrucciones que una CPU puede ejecutar. El CPU toma estos bytes directamente desde el .DLL / .EXE y los ejecuta sin modificaciones adicionales. Es por eso que estos archivos son específico de la CPU. En diferentes arquitecturas de CPU de la misma combinación de bytes no significa lo mismo, por lo que una DLL / EXE funcionará correctamente sólo en la CPU para la que fue diseñada. En otras CPUs estos bytes significarán una serie de instrucciones, y cuando se ejecuta, el programa lo más probable es hacer un poco de disparate y chocar de inmediato.

Los comandos de montaje que usted ha mencionado también merece una explicación. "Ensamblador" no es un lenguaje que una CPU puede entender. Es un lenguaje de un ser humano puede entender. Fue creado porque escribir directamente en código de máquina (los bytes que la CPU entiende en realidad) es muy difícil. Lo que se obtiene es un completo galimatías en la pantalla (prueba a abrir algún archivo .EXE en el Bloc de notas!) Pero cada bit tiene que ser fijado de manera precisa para que funcione.

Así que el lenguaje ensamblador es básicamente el mismo, excepto que estas instrucciones están escritas en el texto que los humanos pueden leer. Por cada código de máquina que una CPU puede entender, no hay instrucciones de la mañana con un nombre humano de usar. Un compilador de montaje simplemente lee estas instrucciones y los reemplaza con los bytes que representan las instrucciones reales para que la CPU ejecute. Es una relación 1: 1 operación. Todos los comandos en lenguaje ensamblador coincide con una sola instrucción de máquina (de nuevo, en términos simples).

Como puede ver, no hay ni siquiera un solo lenguaje ensamblador. Cada arquitectura de CPU tiene su propio lenguaje ensamblador, porque cada uno tiene diferentes instrucciones.

Tenga en cuenta que a pesar de todo esto se aplica a los archivos nativos DLL / EXE. NET archivos son diferentes - que no contienen código de máquina, sino más bien las instrucciones para una CPU abstracta, inexistente. Es como bytecodes Java. Cuando se ejecuta un .NET DLL / EXE, el tiempo de ejecución .NET lo traduce a partir de las instrucciones abstractas a las instrucciones que la CPU específica puede entender. Ellos utilizan una gran cantidad de trucos para hacer esto muy rápido, por lo que estos archivos se ejecutan archivos casi tan rápido como simples DLL / EXE.

¿Esto a aclarar las cosas? :)

Otros consejos

DLL nativos (no NET) por lo general contienen código máquina que sólo puede ejecutarse en una determinada plataforma. El código de máquina es una secuencia de bytes que las golosinas de procesador como instrucciones (ADD, MOV, etc.).

En Windows, DLL se almacenan en el formato PE que es básicamente una colección de secciones que contiene la información acerca de cómo asignar en la memoria. algunas secciones contiene el código del programa (que es de procesador supuesto dependiente), otros contiene los datos del programa, otras las funciones y exportados e importados así sucesivamente.

El código administrado se compila a un lenguaje intermedio que se JITed por el tiempo de ejecución, ya que se ejecuta. Por lo tanto, el archivo DLL no contiene ningún código dependiente del procesador y usted será capaz de ejecutar su programa en cualquier plataforma con el tiempo de ejecución correspondiente.

depende de su DLL. en general, una DLL contiene código ejecutable como un archivo EXE. aquellos DLL de código son depende del procesador ya que el código sólo puede ejecutarse en una plataforma específica. el código se almacena utilizando el mismo "formato" como un archivo EXE (código binario de máquina).

Sin embargo, una DLL puede a veces sólo contiene los datos: A continuación, se llaman "DLL de recursos" y no dependen en absoluto del procesador. actúan como un contenedor para los archivos de datos utilizados por las aplicaciones.

Tenga en cuenta que muchos archivos DLL son híbridos: contienen el código y los recursos. por ejemplo, la mayoría de los archivos DLL que comprende la parte de usuario del sistema operativo Windows son híbridos: se puede abrir utilizando Visual Studio o un Explorador de recursos para ver los recursos (los segmentos de datos) que contienen, o abrirlos con Dependency Walker o dumpbin a ver las funciones (los segmentos de código) que contienen.

(por supuesto, esta respuesta es muy específica de Windows, no sé para archivos .so que son el equivalente de Linux una DLL)

Tanto un DLL y un archivo EXE contienen código ejecutable.

En el caso de un archivo DLL que no tiene las piezas necesarias para ser directamente ejecutable. Debe ser llamado desde otro trozo de código ejecutable. Una DLL puede llamar a otro, pero todos en última instancia, debe ser llamado desde y EXE.

Así que las reglas acerca de lo que es compatible con lo que el procesador que se aplican a los archivos EXE también se aplican a las DLL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top