static int info_cmd(int argc, char *argv[])
{
    image_t *image;
    uint64_t image_offset;
    uint64_t image_size = 0;
    fip_toc_header_t toc_header;
    int i;

    if (argc != 2)
        info_usage();
    argc--, argv++;

    parse_fip(argv[0], &toc_header);

    if (verbose) {
        log_dbgx("toc_header[name]: 0x%llX",
                 (unsigned long long)toc_header.name);
        log_dbgx("toc_header[serial_number]: 0x%llX",
                 (unsigned long long)toc_header.serial_number);
        log_dbgx("toc_header[flags]: 0x%llX",
                 (unsigned long long)toc_header.flags);
    }

    image_offset = sizeof(fip_toc_header_t) +
                   (sizeof(fip_toc_entry_t) * (nr_images + 1));

    for (i = 0; i < nr_images; i++) {
        toc_entry_t *toc_entry;

        image = images[i];
        toc_entry = lookup_entry_from_uuid(&image->uuid);
        if (toc_entry != NULL)
            printf("%s: ", toc_entry->name);
        else
            printf("Unknown entry: ");
        image_size = image->size;
        printf("offset=0x%llX, size=0x%llX",
               (unsigned long long)image_offset,
               (unsigned long long)image_size);
        if (toc_entry != NULL)
            printf(", cmdline=\"--%s\"",
                   toc_entry->cmdline_name);
        if (verbose) {
            unsigned char md[SHA256_DIGEST_LENGTH];

            SHA256(image->buffer, image_size, md);
            printf(", sha256=");
            md_print(md, sizeof(md));
        }
        putchar('\n');
        image_offset += image_size;
    }

    free_images();
    return 0;
}
Example #2
0
static int info_cmd(int argc, char *argv[])
{
	image_desc_t *desc;
	fip_toc_header_t toc_header;

	if (argc != 2)
		info_usage();
	argc--, argv++;

	parse_fip(argv[0], &toc_header);

	if (verbose) {
		log_dbgx("toc_header[name]: 0x%llX",
		    (unsigned long long)toc_header.name);
		log_dbgx("toc_header[serial_number]: 0x%llX",
		    (unsigned long long)toc_header.serial_number);
		log_dbgx("toc_header[flags]: 0x%llX",
		    (unsigned long long)toc_header.flags);
	}

	for (desc = image_desc_head; desc != NULL; desc = desc->next) {
		image_t *image = desc->image;

		if (image == NULL)
			continue;
		printf("%s: offset=0x%llX, size=0x%llX, cmdline=\"--%s\"",
		       desc->name,
		       (unsigned long long)image->toc_e.offset_address,
		       (unsigned long long)image->toc_e.size,
		       desc->cmdline_name);
#ifndef _MSC_VER	/* We don't have SHA256 for Visual Studio. */
		if (verbose) {
			unsigned char md[SHA256_DIGEST_LENGTH];

			SHA256(image->buffer, image->toc_e.size, md);
			printf(", sha256=");
			md_print(md, sizeof(md));
		}
#endif
		putchar('\n');
	}

	return 0;
}