示例#1
0
int
main(int argc, char *argv[])
{
	off_t size;
	uint8_t *buf;
	int fd;

	if (argc != 2) {
		fprintf(stderr, "usage: %s image\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	if ((fd = open(argv[1], O_RDONLY)) == -1)
		err(EXIT_FAILURE, "%s", argv[1]);

	if ((size = lseek(fd, 0, SEEK_END)) == -1)
		err(EXIT_FAILURE, "%s", argv[1]);

	if ((buf = mmap(NULL, size, PROT_READ, MAP_SHARED | MAP_FILE, fd, 0))
	    == MAP_FAILED)
		err(EXIT_FAILURE, "%s", argv[1]);

	if (memcmp(buf, "RKFW", 4) == 0)
		unpack_rkfw(argv[1], buf, size);
	else if (memcmp(buf, "RKAF", 4) == 0)
		unpack_rkaf(argv[1], buf, size);
	else if (memcmp(buf, "KRNL", 4) == 0 || memcmp(buf, "PARM", 4) == 0)
		unpack_krnl(argv[1], buf, size);
	else if (memcmp(buf, "ANDROID!", 8) == 0)
		unpack_android(argv[1], buf, size);
	else
		errx(EXIT_FAILURE, "invalid signature");

	printf("unpacked\n");

	munmap(buf, size);
	close(fd);

	return EXIT_SUCCESS;
}
示例#2
0
int main(int argc, char *argv[]) {

    if (argc != 2)
        fatal("rkunpack v%d.%d\nusage: %s update.img\n",
               RKFLASHTOOL_VERSION_MAJOR,
               RKFLASHTOOL_VERSION_MINOR, argv[0]);

    if ((fd = open(argv[1], O_BINARY | O_RDONLY)) == -1)
        fatal("%s: %s\n", argv[1], strerror(errno));

    if ((size = lseek(fd, 0, SEEK_END)) == -1)
        fatal("%s: %s\n", argv[1], strerror(errno));

#ifdef _WIN32
    fm  = CreateFileMapping((HANDLE)_get_osfhandle(fd), NULL, PAGE_READONLY, 0, 0, NULL);
    buf = MapViewOfFile(fm, FILE_MAP_READ, 0, 0, 0);
    if (!buf) fatal("%s: cannot create MapView of File\n", argv[1]);
#else
    if ((buf = mmap(NULL, size, PROT_READ, MAP_SHARED | MAP_FILE, fd, 0))
                                                        == MAP_FAILED)
        fatal("%s: %s\n", argv[1], strerror(errno));
#endif

         if (!memcmp(buf, "RKAF", 4)) unpack_rkaf();
    else if (!memcmp(buf, "RKFW", 4)) unpack_rkfw();
    else fatal("%s: invalid signature\n", argv[1]);

    printf("unpacked\n");

#ifdef _WIN32
    CloseHandle(fm);
    UnmapViewOfFile(buf);
#else
    munmap(buf, size);
#endif

    close(fd);

    return 0;
}