1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
/*
bios2dump.c - Was designed to dump memory block to file.
Usage: as argument requires absolute address of memory dump and its lenght
(int hexadecimal form).
as output - will write file which will named: memADDR_LEN.dump
where: ADDR - given address of memory
LEN - given length of memory
Licence: GNU GPL v2
Copyright: Nick Kurshev <nickols_k@mail.ru>
*/
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[])
{
FILE * fd_mem, *fd_out;
unsigned long i,addr,len;
int int_no;
char outname[80];
unsigned char ch;
if(argc < 3)
{
printf("Usage: %s address length (in hex)\n",argv[0]);
return EXIT_FAILURE;
}
addr = strtol(argv[1],NULL,16);
len = strtol(argv[2],NULL,16);
if(!(fd_mem = fopen("/dev/mem","rb")))
{
perror("Can't open file - /dev/mem");
return EXIT_FAILURE;
}
sprintf(outname,"mem%08X_%08X.dump",addr,len);
if(!(fd_out = fopen(outname,"wb")))
{
perror("Can't open output file");
fclose(fd_mem);
return EXIT_FAILURE;
}
fseek(fd_mem,addr,SEEK_SET);
for(i=0;i<len;i++)
{
fread(&ch,1,1,fd_mem);
fwrite(&ch,1,1,fd_out);
}
fclose(fd_out);
fclose(fd_mem);
return EXIT_SUCCESS;
}
|