Subrutina knlist

Finalidad

Convierte nombres a direcciones en el sistema en ejecución.

Sintaxis

#include <nlist.h>
int knlist( NList,  NumberOfElements,  Size)
struct nlist *NList;
int NumberOfElements;
int Size;

Descripción

La subrutina knlist permite que un programa busque las direcciones de los símbolos exportados por las extensiones de kernel y kernel.

El campo n_name de la estructura nlist especifica el nombre de un símbolo para el que se solicita la dirección. Si se encuentra el símbolo, su dirección se guarda en el campo n_value y los campos restantes no se modifican. Si no se encuentra el símbolo, todos los campos, distintos de n_name, se establecen en 0.

En un programa de 32 bits, el campo n_value es un campo de 32 bits, que es demasiado pequeño para algunas direcciones de kernel. Para permitir que se obtengan las direcciones de todos los símbolos especificados, los programas de 32 bits deben utilizar la estructura nlist64 , que contiene un campo n_value de 64 bits. Por ejemplo, si NList64 es la dirección de una matriz de estructuras nlist64 , se puede llamar a la subrutina knlist tal como se muestra en el ejemplo siguiente:
rc = knlist((struct nlist *)Nlist64,
                  NumberOfElements,
                  sizeof(structure nlist64));

Las estructuras nlist y nlist64 incluyen los campos siguientes:

Elemento Descripción
char *n_name Especifica el nombre del símbolo para el que se va a recuperar la dirección.
long n_value La dirección del símbolo, rellenada por la subrutina knlist . Este campo se incluye en la estructura nlist .
long long n_value La dirección del símbolo, rellenada por la subrutina knlist . Este campo se incluye en la estructura nlist64 .
El archivo nlist.h lo incluye automáticamente el archivo a.out.h para la compatibilidad. Sin embargo, no incluya el archivo a.out.h si sólo necesita la información necesaria para utilizar la subrutina knlist . Si incluye el archivo a.out.h , siga la sentencia #include con la línea siguiente:
#undef n_name
Nota:
  1. Si se van a incluir los archivos nlist.h y netdb.h , el archivo netdb.h se debe incluir antes del archivo nlist.h para evitar un conflicto con el miembro de estructura n_name . Del mismo modo, si se van a incluir los archivos a.out.h y netdb.h , el archivo netdb.h se debe incluir antes del archivo a.out.h para evitar un conflicto con la estructura n_name .
  2. Si se incluye el archivo netdb.h y el archivo nlist.h o syms.h ,n_namese definirá como_n._n_name. Esta definición le permite acceder a lan_nameen la estructura nlist o Syn . Si necesita acceder a lan_nameen la estructura netent , desdefina eln_nameentrando en:
    #undef n_name
    antes de acceder aln_nameen la estructura netent . Si necesita acceder a lan_nameen una estructura Syn o nlist después de desdefinirla, redefina lan_namecon:
    #define n_name _n._n_name

Parámetros

Elemento Descripción
NLIST Apunta a una matriz de estructuras nlist o nlist64 .
NumberOfElements Especifica el número de estructuras en la matriz de estructuras nlist o nlist64 .
Tamaño Especifica el tamaño de cada estructura. Los únicos valores permitidos son sizeof(struct nlist) o sizeof(struct nlist64).

Valores de retorno

Tras la finalización satisfactoria, la subrutina knlist devuelve un valor de 0. En caso contrario, se devuelve un valor de -1 y se establece la variable errno para indicar el error.

Códigos de error

La subrutina knlist falla cuando una de las siguientes es verdadera:

Elemento Descripción
EINVAL El parámetro " NumberOfElements " es menor que 1 o el parámetro " Talla " no es ni " sizeof(struct nlist) ni " sizeof(struct nlist64).
EFAULT

El parámetro NList no es una dirección válida.

No se han encontrado uno o más símbolos en la matriz especificada por el parámetro Nlist .

La dirección de uno de los símbolos no cabe en el campo n_value . Esto sólo es posible si el llamante es un programa de 32 bits y el parámetro Tamaño es sizeof(struct nlist)).