sub-rotina knlist

Propósito

Traduzem nomes para endereços no sistema de execução.

Sintaxe

#include <nlist.h>

int knlist( NList, NumberOfElements, Size )
struct nlist *NList;
int NumberOfElements;
int Size;

Descrição

O subroutine knlist permite que um programa olhe para cima os endereços de símbolos exportados pelo kernel e extensões do kernel.

O campo n_name na estrutura nlist especifica o nome de um símbolo para o qual o endereço é solicitado. Se o símbolo for encontrado, seu endereço é salvo no campo n_value , e os campos restantes não são modificados. Se o símbolo não for encontrado, todos os campos, diferente de n_name, são configurados para 0.

Em um programa de 32-bit, o campo n_valor é um campo de 32-bit bits, que é muito pequeno para alguns endereços de kernel. Para permitir que os endereços de todos os símbolos especificados sejam obtidos, 32-bit programas devem utilizar a estrutura nlist64 , que contém um campo de 64-bit n_valor . Por exemplo, se NList64 for o endereço de uma matriz de estruturas nlist64 , a subroutine knlist pode ser chamada como mostrado no exemplo a seguir:
rc = knlist((struct nlist *)Nlist64,
                  NumberOfElements,
                  sizeof(structure nlist64));

As estruturas nlist e nlist64 incluem os seguintes campos:

Tabela 1. Campos
Item Descrição
char *n_name Especifica o nome do símbolo para o qual o endereço deve ser recuperado.
long n_value O endereço do símbolo, preenchido pela subroutine knlist . Este campo está incluído na estrutura nlist .
long long n_value O endereço do símbolo, preenchido pela subroutine knlist . Este campo está incluído na estrutura nlist64 .
O arquivo nlist.h é incluído automaticamente pelo arquivo a.out.h para compatibilidade. No entanto, não inclua o arquivo a.out.h se precisar apenas das informações necessárias para usar a sub-rotina knlist . Se você incluir o arquivo a.out.h , siga a instrução #include com a seguinte linha:
#undef n_name
Observação:
  1. Se ambos os arquivos nlist.h e netdb.h forem incluídos, o arquivo netdb.h deverá ser incluído antes do arquivo nlist.h para evitar um conflito com o membro da estrutura n_name . Da mesma forma, se os arquivos a.out.h e netdb.h forem incluídos, o arquivo netdb.h deverá ser incluído antes do arquivo a.out.h para evitar um conflito com a estrutura n_name .
  2. Se o arquivo netdb.h e o arquivo nlist.h ou syms.h forem incluídos, on_namecampo será definido como_n._n_name. Esta definição permite que você acesse on_namecampo na estrutura nlist ou syment . Se precisar acessar on_namecampo na estrutura netente , desdefinir on_namecampo inserindo:
    #undef n_name
    antes de acessar on_namecampo na estrutura netente . Se precisar acessar on_namecampo em uma estrutura syment ou nlist após desdefinit-lo, redefinir on_namecampo com:
    #define n_name _n._n_name

Parâmetros

Tabela 2.. Parâmetros
Item Descrição
NLIST Aponta para uma matriz de estruturas nlist ou nlist64 .
NumberOfElements Especifica o número de estruturas na matriz de estruturas nlist ou nlist64 .
Tamanho Especifica o tamanho de cada estrutura. Os únicos valores permitidos são sizeof(struct nlist) ou sizeof(struct nlist64).

Valores De Retorno

Após a conclusão bem-sucedida, a subroutine knlist retorna um valor de 0. Caso contrário, um valor de -1 é retornado e a variável errno é definida para indicar o erro.

Códigos De Erro

A subroutine knlist falha quando um dos seguintes é verdadeiro:

Tabela 3.. Códigos de erro
Item Descrição
EINVAL Os parâmetros NumberOfElements são menores que 1 ou o parâmetro Size não é ' sizeof(struct nlist) nem ' sizeof(struct nlist64).
EFAULT

O parâmetro NLista não é um endereço válido.

Um ou mais símbolos na matriz especificada pelo parâmetro Nlist não foram encontrados.

O endereço de um dos símbolos não se encaixa no campo n_valor . Isso só é possível se o caller for um programa de 32-bit bits e o parâmetro Size for sizeof(struct nlist)).