Monday, July 18, 2011

Read Memory : Android inside OMAP


The following Code is used for reading memory map in android, after cross-compilation, the exe should be pushed to the target and executed for reading any memory map registers in the system.

include stdio.h
include stdlib.h
include sys/mman.h
include fcntl.h

#define MEM_SIZE 4096
#define MEM_MASK (MEM_SIZE - 1)
#define MEMORY "/dev/mem"

void memaccess(unsigned int reg_addr, unsigned int *reg_val)
{
int fd;
void *mem_map, *mem_addr;

fd = open(MEMORY, O_RDWR|O_SYNC);
if(fd < 0) {
perror(MEMORY);
exit(1);
}

mem_map = mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, reg_addr & ~MEM_MASK);

if(mem_map == (void*) - 1) {
perror("mmap()");
exit(1);
}

mem_addr = mem_map + (reg_addr & MEM_MASK);

if (reg_val)
*(unsigned int*)mem_addr = *reg_val;
else
printf("0x%08X\n", *(unsigned int*)mem_addr);
}


int main(int argc, char *argv[])
{

unsigned int reg_addr, reg_val, *reg_val_ptr;

if (argc < 2) {
fprintf(stderr, "\nUsage:\t%s [value]\n\n\n", argv[0]);
exit(1);
}

reg_addr = strtoul(argv[1], NULL, 0);

if (argc == 3) {
reg_val = strtoul(argv[2], NULL, 0);
reg_val_ptr = &reg_val;
}
else
reg_val_ptr = NULL;

memaccess(reg_addr, reg_val_ptr);
return 0;
}

No comments:

Post a Comment