Content-type: text/html Man page of knlist

knlist

Section: C Library Functions (3)
Index Return to Main Contents
 

NAME

knlist - Look up symbols in the currently running kernel  

LIBRARY

Standard C Library (libc.a, libc.so)  

SYNOPSIS

#include <nlist.h> int knlist(
          struct nlist namelist);  

PARAMETERS

On input, lists the symbol names for which you are requesting addresses.
On return, contains a list of symbol addresses (or 0 if the attempt to find the addresses was unsuccessful).
 

DESCRIPTION

The knlist() library routine looks up addresses of kernel symbols in the currently running kernel.

Communication with the knlist() routine occurs using an array of type struct nlist. The <nlist.h> header file declares that type as follows: struct nlist{
    char *n_name;
    unsigned long n_value;
    short n_type;               /* 0 if not there, 1 if found */
    short reserved; };

When your application calls knlist(), it passes the names of symbols in the n_name field of the structure.

For each symbol, the knlist() routine attempts to determine its current address in memory. If the routine can determine the address of the symbol, it returns that address in the n_value field, and it returns one (1) in the n_type field. If the routine cannot determine the address, it returns zero (0) in both the n_value field and the n_type field.

For BSD compatibility, the knlist routine allows symbol names to be preceded by an underscore. If it does not find a symbol that matches the name as specified, knlist attempts to locate the symbol name with the leading underscore removed.  

EXAMPLES

The following example illustrates the use of the knlist() routine: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <nlist.h> main () {
   struct nlist   nl[2];
   int            retval, i;
   nl[0].n_name = (char *)malloc(10);
   nl[1].n_name = (char *)malloc(10);


   /*******************************************************/
   /* Store names of kernel symbols in the nl array       */
   strcpy (nl[0].n_name, "ncpus");
   strcpy (nl[1].n_name, "lockmode");


   /*******************************************************/
   /* Call the knlist routine                             */
   retval = knlist(nl);


   /******************************************************/
   /* Display addresses if returned.  Otherwise, display */
   /* the appropriate error message.                     */
   if (retval == -1 )
      printf ("No kernel symbol addresses returned.);
   else
      if (retval >= 0 )
         for (i=0; i<2; i++)
             if (nl[i].n_type == 0)
                 printf ("Unable to return address of symbol %s,
                         nl[i].n_name);
             else
                 printf ("The address of symbol %s is %lx,
                         nl[i].n_name, nl[i].n_value);
   free (nl[0].n_name);
   free (nl[1].n_name); }

This example tests the return value from the knlist() routine. If the routine returns an error status, a message is displayed to the application user. Otherwise, the application checks the status of each kernel symbol. If the knlist() routine was unable to return an address, the application displays a message and the symbol name. If the knlist() routine returns an address, the application displays the symbol name and address to the application user.  

RETURN VALUES

The knlist() routine returns zero on success. The routine returns -1 if it was unable to connect to the kloadsrv daemon. In this case, the routine was unable to determine any of the requested addresses. The routine returns a positive integer if it successfully finds some addresses and fails to find others. The integer value indicates the number of addresses knlist() was unable to return.  

RELATED INFORMATION

Routines: nlist(3) delim off


 

Index

NAME
LIBRARY
SYNOPSIS
PARAMETERS
DESCRIPTION
EXAMPLES
RETURN VALUES
RELATED INFORMATION

This document was created by man2html, using the manual pages.
Time: 02:41:29 GMT, October 02, 2010