 |
Index for Section 3 |
|
 |
Alphabetical listing for K |
|
 |
Bottom of page |
|
knlist(3)
NAME
knlist - look up symbols in the currently running kernel
SYNOPSIS
#include <nlist.h>
int knlist(
struct nlist namelist );
LIBRARY
Standard C Library (libc.a, libc.so)
PARAMETERS
namelist
On input, lists the symbol names for which you are requesting
addresses. The namelist must be terminated with a null name at end.
Without a terminating null name at end, knlist() cannot determine how
many symbols are in the namelist and therefore may dump core.
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. In addition to finding symbols associated with
the kernel image, knlist() will also find symbols defined in dynamically
loaded subsystems.
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.
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.
The routine returns the negative value of EINVAL if the argument is bad.
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[3];
int retval, i;
nl[0].n_name = (char *)malloc(10);
nl[1].n_name = (char *)malloc(10);
nl[2].n_name = ;
/*******************************************************/
/* 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 < 0)
printf ("No kernel symbol addresses returned.\n");
else
if (retval >= 0 )
for (i=0; i<2; i++)
if (nl[i].n_type == 0)
printf ("Unable to return address of symbol %s\n",
nl[i].n_name);
else
printf ("The address of symbol %s is %lx\n",
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.
SEE ALSO
Routines: nlist(3)
 |
Index for Section 3 |
|
 |
Alphabetical listing for K |
|
 |
Top of page |
|