Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- for memory dump and edit via /dev/mem
- ** Note that any kernel constraints must be removed! ex, CONFIG_STRICT_DEVMEM and etc **
- build intruction:
- ANDROID_TARGET=android-8
- CROSS_COMPILE=${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-
- SYS_ROOT=${ANDROID_NDK}/platforms/${ANDROID_TARGET}/arch-arm/
- ${CROSS_COMPILE}gcc --sysroot=${SYS_ROOT} \
- memedit.c \
- -o memedit
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/mman.h>
- int main(int argc, char *argv[]) {
- int has_input;
- unsigned int input;
- char *ignored;
- unsigned long offset;
- int fd;
- unsigned char* mem;
- if (argc < 2) {
- printf("Usage: %s <phys_addr> [input]\n", argv[0]);
- return 0;
- }
- offset = strtoul(argv[1], &ignored, 16);
- if (argc == 3) {
- has_input = 1;
- input = strtoul(argv[2], &ignored, 16);
- } else {
- has_input = 0;
- input = 0;
- }
- fd = open("/dev/mem", O_SYNC | O_RDWR);
- if (fd == 0) {
- printf("Can't open /dev/mem\n");
- return -1;
- }
- mem = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset & (~4095));
- if (mem == NULL || mem == MAP_FAILED) {
- printf("Can't map memory\n");
- return -1;
- }
- printf("/dev/mem[0x%08x] = 0x%08x", offset, *(unsigned int*)&mem[offset & 4095]);
- if (has_input) {
- printf(" <= 0x%08x\n", input);
- *((unsigned int*)&mem[offset & 4095]) = input;
- }
- else {
- printf("\n");
- }
- close(fd);
- }
Add Comment
Please, Sign In to add comment