(unknown charset) summery: getting parameters from /dev/kmem using lseek

From: (unknown charset) Eyal Rif <EYALRI_at_amdocs.com>
Date: Tue, 07 Dec 1999 10:02:06 +0200

First of all,
thank you alan,

the thing i forgot is
knlist(nl)

using this function you can get the parameter address in
the kernel memory

here is an example how to get page_size from kernel memory
(I know there is a lot of other ways to get it but this is ment to
 keep the example simple)
you can use the same syntax or idea to get any parameters
that "nm /vmunix" will display.

#include <stdio.h>
#include <stdlib.h>
#include <nlist.h>
#include <paths.h>
#include <sys/fcntl.h>


struct nlist nl[] = {
    { "page_size" },
#define N_PAGE_SIZE 0
    { NULL },
};


static int kmem;

int pagesize;

main()
{
    int a,new,new1,retval;
    retval=knlist(nl);
    if (retval == -1)
         printf ("No kernel symbol addresses returned");
    else
    if (retval >= 0 )
        if (nl[0].n_type == 0)
          printf ("Unable to return address of symbol %s0i",
                  nl[8].n_name);

    if ((kmem = open(_PATH_KMEM, O_RDONLY)) < 0) {
                perror(_PATH_KMEM);
                exit(1);
        }
    if (lseek(kmem, (long) nl[N_PAGE_SIZE].n_value, SEEK_SET) !=
            (long) nl[N_PAGE_SIZE].n_value) {
                perror("pagesize; lseek");
        } else
          if (read(kmem, &pagesize, sizeof(pagesize)) !=
                    sizeof(pagesize)) {
                        perror("pagesize; read");
                }

     new = pagesize;
     printf("page size is: %d\n",new);

}
Received on Tue Dec 07 1999 - 08:07:55 NZDT

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:40 NZDT