Read BIOS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am trying to write a code to read BIOS details. Below is the program but I believe that I am not reading BIOS details. Can anyone please correct me in my understanding:

Note I found that /proc/ioports gives the I/O ports details like:

[root@ioport]# cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
........and so on..................



#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>
#include <ctype.h>
#include <string.h>

main(int argc, char *argv[])
{
        unsigned char c;
        if(argc != 2) {
                printf("-1. Invalid args : usage %s start-end address\n", argv[0]);
                exit(-1);
        }
        char * temp = argv[1];
        while(*temp != '\0' && (isxdigit(*temp) || *temp=='-'))
                temp++;
        char * delim = strchr(argv[1], '-');
        if(*temp != '\0' || !delim ) {
                printf("-2. Invalid args : usage %s start-end address\n", argv[0]);
                exit(-2);
        }
        *delim = '\0';
        int start = (int)strtol(argv[1], '\0', 16), end = (int)strtol(delim+1, '\0', 16), index = 0;
        if(start < 0 || end <= 0 ) {
                printf("-3. Invalid args : usage %s start-end address\n", argv[0]);
                exit(-3);
        }
        if(iopl(3) == -1) {
                printf("-4. Unable to set privilege level\n");
                exit(-4);
        }
        if(ioperm(start, end - start, 1) == -1) {
                printf("-5. Unable to set access permission bits\n");
                exit(-5);
        }
        for(index = start ; index <= end ; index ++)
        {
                c = inb(index);
                printf("%X", c);
        }
        ioperm(start, end - start, 0);
        printf("\n");
}


So my program dumps the data in-between the ports assigned for devices:

[root@ioport]# ./a.out 0000-001f
01000007D0FFFFFFFFFFFFF0100000
7D0FFFFFFFFFFFFF

Please let me know if I am in the right path or not and guide me appropriately.

Regards,
Prakash
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux