DLSYM 3 C Función

DLSYM 3 C Función
“Linux ha presentado muchas de sus funciones únicas para realizar tareas de rutina. La función dlsym () es una de ellas. El objetivo de la función dlsym () es encontrar la dirección de un símbolo definido especificado en una DLL (biblioteca de enlace dinámico) que se ha hecho accesible a través de una llamada de función dlopen (). Después de cargar el archivo dinámico de objeto compartido (biblioteca de enlaces comunes) indicado por el nombre de archivo de cadena nulo terminado, la función dlopen () genera una "conexión" anónima para el objeto cargado. El símbolo con nombre se ve en la Biblioteca de enlaces dinámicos (DLL) que ha sido obtenido por el método dlopen (). En este artículo, hablaremos sobre el uso de dlsym ().

Si el símbolo deseado no está presente en esa dll, las dlls dependientes de esa dll se buscarán, después de cualquier dependencia de ellos, y así sucesivamente de una manera de amplitud hasta que se encuentre el símbolo deseado o todas las dlls tienen ha sido buscado para este propósito. Aunque la secuencia en la que se buscan DLLS dependientes en el mismo nivel no se determina, esta orden de búsqueda determina cómo se identificarán los símbolos de duplicación en DLL distintos DLL. Tenga en cuenta que las bibliotecas dinámicas dependientes descargadas no se cargarán como consecuencia de una búsqueda dlsym () de DLLS dependientes dependientes. Solo se escanearán los DLL que se cargaron como un componente de los DLL dependientes de la llamada Dlopen ()."

Rtld_now: Si la colección completa de DLL dependientes debe estar disponible para las llamadas posteriores a la función dlsym (), este indicador se utiliza para invocar bibliotecas de enlaces dinámicos.

Rtld_lazy: Cuando usamos este indicador, no podemos encontrar qué bibliotecas de enlaces dinámicos dependientes se cargan se conoce.

RTLD Global: Las bibliotecas recién cargadas pueden usar los símbolos especificados por este paquete para la determinación de símbolos.

Rtld_local: Dado que ninguna bandera se menciona, esto es lo opuesto a RTLD Global y el valor predeterminado.

Aquí está la sintaxis del comando dlsym ():

#incluir
# void *dlsym (void *__ Restrict__ Handler, const char *__ restrict__ symbol_name);

El archivo de encabezado donde se define la función dlsym () . "Symbol_name" es la cadena de caracteres que es una representación del nombre del símbolo, y "Handler" es el valor obtenido por una llamada a dlopen () (que aún no ha sido devuelta por solicitud a dlclose ()).

Se devuelve el valor nulo, si el mango no apunta a una DLL apropiada que fue abrida por Dlopen (). El valor nulo se devuelve mediante la función dlsym () si no dll vinculado con el controlador coincide con el símbolo nombrado (nombre del símbolo).

Crear el dlsym.Cile C usando VIM Editor o cualquier editor de su elección, que puede incluir Nano etc.

Escriba el código dado en la pantalla a continuación en el archivo C creado en el paso anterior. Los archivos de encabezado se incluyen en las primeras cuatro líneas de código en el código de ejemplo a continuación. Después de eso, se inicia la función principal, y dentro de la función principal, se crea un puntero del controlador del tipo vacío. La línea de código anterior declara un puntero codificado por carácter de tipo vacío.

Usando eso, invocamos el método Dlopen y suministramos la bandera perezosa RTLD junto con la ubicación del .Entonces el archivo (que es un archivo compartido dinámico en Linux). La variable del controlador mantendrá los resultados de Dlopen. Al regresar 1, la siguiente línea determina si el Dlopen cargó con éxito la biblioteca de enlaces dinámicos. En caso de falla, el error se ha escrito en la pantalla, y la función principal ha terminado.

Después de la expresión condicional, ahora llamamos al método dlerror () para corregir el error existente. Tan pronto como agregamos 1 entero ASCII al símbolo codificado del tipo de caracteres que hemos definido, tendrá el valor "Ponga."La longitud de la cadena se calculó en la siguiente línea y se guardó en la variable de longitud codificada, que luego se empleó en el bucle para decodificar. Usamos el símbolo final "0" para finalizar el código después del bucle for For. Después de eso, ejecutamos el método dlsym (), pasando el controlador y los parámetros del código decodificado, y la variable de salida incluyó los resultados.

Al invocar la función dlsym () para compilar un archivo C, el proceso de compilación en un compilador C difiere de un comando de compilación estándar. Crearía el programa utilizando el siguiente comando si estuviera en un archivo llamado "dlsym.C":

$ GCC -rdynamic -o foo dlsym.C -LDL

Después de una compilación exitosa, se crea el archivo de salida y se le da el nombre dlsym.afuera. Simplemente ingrese el comando./dlsym.salir y presionar la tecla ENTER para ejecutar el archivo de salida. La salida del archivo se mostrará en la pantalla del terminal en un sistema operativo similar a UNIX o Linux.

Usando el editor VIM, hemos hecho un pequeño ajuste a las últimas líneas de códigos del archivo C. La instrucción de impresión al final de la función principal debe sustituirse con la salida, que se ha transformado en la función PUTS. En las marcas de doble cotización de la pantalla, se ha agregado el texto.

Ahora compile el código nuevamente y vea la salida en la pantalla del terminal; Sin usar la instrucción de impresión, obtenemos la salida en la pantalla usando nuestro valor de salida que se cambia a la función PUTS. Aquí está la salida de este archivo de código en particular que se muestra arriba.

Conclusión

Dentro del párrafo introductorio de este artículo, hemos discutido el uso de la función dlsym () 3 C para descubrir la dirección de algún símbolo definido especificado en dll. Hemos discutido y elaborado dos ejemplos claros de C en el sistema operativo Kali Linux para esto. Ambos ejemplos son muy simples pero muy eficientes simultáneamente y demuestran el uso de la función dlsym () muy claramente para una mejor comprensión.