📄 metadata.c
字号:
/* * Copyright (C) 2008 dhewg, #wiidev efnet * * this file is part of wiifuse * http://wiibrew.org/index.php?title=Wiifuse * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#include <stdio.h>#include "metadata.h"void meta_add_part (struct tree *part_node, struct partition *part, u32 i) { struct tree *node; if (part->header.is_gc) tree_add_filler (i, part_node, "gc_image"); if (part->header.is_wii) tree_add_filler (i, part_node, "wii_image"); if (part->appldr_size > 0) tree_add_file (i, part_node, "appldr.bin", 0x2440, part->appldr_size); if (part->header.dol_offset > 0 && part->header.dol_size > 0) tree_add_file (i, part_node, "main.dol", part->header.dol_offset, part->header.dol_size); if (part->header.fst_offset > 0 && part->header.fst_size > 0) tree_add_file (i, part_node, "fst.bin", part->header.fst_offset, part->header.fst_size); node = tree_add_dir (i, part_node, "header"); tree_add_char (i, node, "console_id", part->header.console); tree_add_string (i, node, "gamecode", part->header.gamecode, 2); tree_add_char (i, node, "region", part->header.region); tree_add_string (i, node, "publisher", part->header.publisher, 2); tree_add_string (i, node, "name", part->header.name, 0x60); if (!part->header.has_magic) tree_add_filler (i, node, "invalid_magic"); if (part->is_encrypted) { node = tree_add_dir (i, part_node, "crypto"); tree_add_string (i, node, "key", part->key_c, 32); tree_add_string (i, node, "issuer", part->tmd->issuer, 64); tree_add_hex_uint8 (i, node, "version", part->tmd->version); tree_add_hex_uint8 (i, node, "ca_crl_version", part->tmd->ca_crl_version); tree_add_hex_uint8 (i, node, "signer_crl_version", part->tmd->signer_crl_version); tree_add_hex_uint64 (i, node, "sys_version", part->tmd->sys_version); tree_add_hex_uint64 (i, node, "title_id", part->tmd->title_id); tree_add_hex_uint32 (i, node, "title_type", part->tmd->title_type); tree_add_hex_uint16 (i, node, "group_id", part->tmd->group_id); tree_add_hex_uint32 (i, node, "access_rights", part->tmd->access_rights); tree_add_hex_uint16 (i, node, "title_version", part->tmd->title_version); tree_add_uint (i, node, "num_contents", part->tmd->num_contents); tree_add_uint (i, node, "boot_index", part->tmd->boot_index); } node = tree_add_dir (i, part_node, ".internals"); tree_add_uint (i, node, "partition_offset", part->offset); tree_add_uint (i, node, "appldr_offset", 0x2440); tree_add_uint (i, node, "appldr_size", part->appldr_size); tree_add_uint (i, node, "dol_offset", part->header.dol_offset); tree_add_uint (i, node, "dol_size", part->header.dol_size); tree_add_uint (i, node, "fst_offset", part->header.fst_offset); tree_add_uint (i, node, "fst_size", part->header.fst_size); if (part->is_encrypted) { tree_add_raw_file (i, node, "certs", part->certs_offset, part->certs_size); tree_add_raw_file (i, node, "tmd", part->tmd_offset, part->tmd_size); tree_add_raw_file (i, node, "ticket", part->ticket_offset, part->ticket_size); tree_add_uint (i, node, "data_offset", part->data_offset); tree_add_uint (i, node, "data_size", part->data_size); tree_add_file (i, node, "decrypted.raw", 0, part->data_size); // tree_add_uint copies an integer, we want the live data tree_add_mem (i, node, "cached_block", &part->cached_block, 4); tree_add_mem (i, node, "cache", part->cache, 0x7c00); }}void meta_add_image (struct tree *node, struct image_file *image) { u8 i; char str[64]; for (i = 0; i < image->nparts; ++i) { sprintf (str, "partition%02u", i); switch (image->parts[i].type) { case PART_UNKNOWN: break; case PART_DATA: tree_add_symlink (i, node, "data", str); break; case PART_UPDATE: tree_add_symlink (i, node, "update", str); break; case PART_INSTALLER: tree_add_symlink (i, node, "installer", str); break; case PART_VC: tree_add_symlink (i, node, image->parts[i].chan_id, str); break; } if (image->parts[i].is_encrypted) tree_add_symlink (i, node, image->parts[i].title_id_str, str); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -