int main(int argc, char *argv[]) { FILE *fp; u8 bfr[ALIGNMENT]; get_args(argc, argv); elf_size = get_filesize(elf_name); elf = mmap_file(elf_name); parse_elf(); meta_header_size = 0x80 + ehdr.e_phnum * (0x30 + 0x20 + 0x60) + 0x30; info_offset = 0x70; elf_offset = 0x90; phdr_offset = elf_offset + ehdr.e_ehsize; sec_offset = round_up(phdr_offset + ehdr.e_phentsize * ehdr.e_phnum, ALIGNMENT); version_offset = round_up(sec_offset + ehdr.e_phnum * 0x20, ALIGNMENT); ctrl_offset = round_up(version_offset + 0x10, ALIGNMENT); meta_offset = round_up(ctrl_offset + 0x70, ALIGNMENT); header_size = round_up(meta_offset + meta_header_size, 0x80); if (compression) compress_elf(); else fill_phdr_map(); build_sce_hdr(); build_info_hdr(); build_ctrl_hdr(); build_sec_hdr(); build_version_hdr(); build_meta_hdr(); self = malloc(header_size + elf_size); memset(self, 0, header_size + elf_size); build_hdr(); write_elf(); calculate_hashes(); sign_hdr(); sce_encrypt_data(self); sce_encrypt_header(self, &ks); fp = fopen(self_name, "wb"); if (fp == NULL) fail("fopen(%s) failed", self_name); if (fwrite(self, header_size + compressed_size, 1, fp) != 1) fail("unable to write self"); memset(bfr, 0, sizeof bfr); fwrite(bfr, round_up(compressed_size, ALIGNMENT) - compressed_size, 1, fp); fclose(fp); return 0; }
int main(int argc, char *argv[]) { FILE *fp; if (argc != 5) fail("usage: makepkg [key suffix] [version] filename.pkg dir_with_files"); get_keys(argv[1]); get_files(argv[4]); get_version(argv[2]); build_pkg_hdr(); compress_pkg(); build_info_hdr(); build_meta_hdr(); build_sce_hdr(); build_pkg(); calculate_hashes(); sign_hdr(); sce_encrypt_data(pkg); sce_encrypt_header(pkg, &k); fp = fopen(argv[3], "wb"); if (fp == NULL) fail("fopen(%s) failed", argv[3]); if (fwrite(pkg, pkg_size, 1, fp) != 1) fail("fwrite failed"); fclose(fp); return 0; }
int main(int argc, char *argv[]) { FILE *fp; u8 bfr[ALIGNMENT]; if (argc != 9) fail("usage: makeself [type] [version suffix] [version] [vendor id] [auth id] [sdk type] [elf] [self]"); get_type(argv[1]); get_keys(argv[2]); get_version(argv[3]); get_vendor(argv[4]); get_auth(argv[5]); get_sdktype(argv[6]); elf_size = get_filesize(argv[7]); elf = mmap_file(argv[7]); parse_elf(); meta_header_size = 0x80 + ehdr.e_phnum * (0x30 + 0x20 + 0x60) + 0x30; info_offset = 0x70; elf_offset = 0x90; phdr_offset = elf_offset + ehdr.e_ehsize; sec_offset = round_up(phdr_offset + ehdr.e_phentsize * ehdr.e_phnum, ALIGNMENT); version_offset = round_up(sec_offset + ehdr.e_phnum * 0x20, ALIGNMENT); ctrl_offset = round_up(version_offset + 0x10, ALIGNMENT); meta_offset = round_up(ctrl_offset + 0x70, ALIGNMENT); header_size = round_up(meta_offset + meta_header_size, 0x80); shdr_offset = ehdr.e_shoff + header_size; build_sce_hdr(); build_info_hdr(); build_ctrl_hdr(); build_sec_hdr(); build_version_hdr(); build_meta_hdr(); self = malloc(header_size + elf_size); memset(self, 0, header_size + elf_size); build_hdr(); calculate_hashes(); sign_hdr(); sce_encrypt_data(self); sce_encrypt_header(self, &ks); fp = fopen(argv[8], "wb"); if (fp == NULL) fail("fopen(%s) failed", argv[4]); if (fwrite(self, header_size + elf_size, 1, fp) != 1) fail("unable to write self"); memset(bfr, 0, sizeof bfr); fwrite(bfr, round_up(elf_size, ALIGNMENT) - elf_size, 1, fp); fclose(fp); return 0; }