1 /* 2 * HT Editor 3 * xexstruct.h 4 * 5 * Copyright (C) 2006 Sebastian Biallas (sb@biallas.net) 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 */ 20 21 #ifndef __XEXSTRUCT_H_ 22 #define __XEXSTRUCT_H_ 23 24 #include "io/types.h" 25 #include "tools.h" 26 27 typedef unsigned int RVA; 28 29 #define XEX_MAGIC_LENGTH 4 30 #define XEX_MAGIC0 'X' 31 #define XEX_MAGIC1 'E' 32 #define XEX_MAGIC2 'X' 33 #define XEX_MAGIC3 '2' 34 35 struct XEX_IMAGE_HEADER { 36 byte magic_id[XEX_MAGIC_LENGTH]; 37 uint32 flags; 38 uint32 size; 39 uint32 res; 40 uint32 file_header_offset; 41 uint32 number_of_sections; 42 } PACKED; 43 44 #define XEX_HEADER_FIELD_MODULES 0x0002ff 45 #define XEX_HEADER_FIELD_LOADERINFO 0x0003ff 46 #define XEX_HEADER_FIELD_FILENAME 0x0080ff 47 #define XEX_HEADER_FIELD_LOADBASE 0x010001 48 #define XEX_HEADER_FIELD_ENTRY 0x010100 49 #define XEX_HEADER_FIELD_BASE 0x010201 50 #define XEX_HEADER_FIELD_IMPORT 0x0103ff 51 #define XEX_HEADER_FIELD_IDS 0x018002 52 #define XEX_HEADER_FIELD_ORIG_FILENAME 0x0183ff 53 #define XEX_HEADER_FIELD_RESMAP2 0x0200ff 54 #define XEX_HEADER_FIELD_UNK0 0x020104 // 80078884 55 #define XEX_HEADER_FIELD_STACK_SIZE 0x020200 // 800788bc 56 #define XEX_HEADER_FIELD_CACHE_INFO 0x020301 57 #define XEX_HEADER_FIELD_MEDIAINFO 0x040006 58 #define XEX_HEADER_FIELD_LAN_KEY 0x040404 59 #define XEX_HEADER_FIELD_IMPORT_UNK 0xe10402 60 61 #define XEX_MEDIA_HD 0x00000001 62 #define XEX_MEDIA_DVD_X2 0x00000002 63 #define XEX_MEDIA_DVD_CD 0x00000004 64 #define XEX_MEDIA_DVD_5 0x00000008 65 #define XEX_MEDIA_DVD_9 0x00000010 66 #define XEX_MEDIA_FLASH 0x00000020 67 #define XEX_MEDIA_MEMORY_UNIT 0x00000080 68 #define XEX_MEDIA_MASS_STORAGE 0x00000100 69 #define XEX_MEDIA_SMB 0x00000200 70 #define XEX_MEDIA_RAM 0x00000400 71 #define XEX_MEDIA_INSECURE 0x01000000 72 #define XEX_MEDIA_SAVE_GAME 0x02000000 73 #define XEX_MEDIA_LOCAL 0x04000000 74 #define XEX_MEDIA_LIVE 0x08000000 75 #define XEX_MEDIA_XBOX 0x10000000 76 77 struct XEX_IMAGE_HEADER_INFO_ENTRY { 78 union { 79 struct { 80 byte res; 81 byte classe; 82 byte type; 83 byte size; 84 } b; 85 uint32 type PACKED; 86 } PACKED; 87 uint32 value; 88 } PACKED; 89 90 enum { 91 XEX_LOADER_NONE = 0, 92 XEX_LOADER_RAW = 1, 93 XEX_LOADER_COMPRESSED = 2, 94 }; 95 96 struct XEX_LOADER_INFO_HEADER { 97 uint16 crypted; 98 uint16 type; 99 } PACKED; 100 101 struct XEX_RAW_LOADER_ENTRY { 102 uint32 raw; 103 uint32 pad; 104 } PACKED; 105 106 struct XEX_FILE_HEADER { 107 uint32 hdr_size; 108 uint32 image_size; 109 uint8 key[256]; 110 uint32 unk1; 111 uint32 image_flags; 112 uint32 load_address; 113 uint8 hash1[20]; 114 uint32 unk2; 115 uint8 hash2[20]; 116 uint8 unk3[16]; 117 uint8 loader_key[16]; 118 uint32 unk4; 119 uint8 hash3[20]; 120 uint32 region; 121 uint32 media_mask; 122 uint32 pages; 123 } PACKED; 124 125 extern byte XEX_IMAGE_HEADER_struct[]; 126 extern byte XEX_IMAGE_HEADER_INFO_ENTRY_struct[]; 127 extern byte XEX_LOADER_INFO_HEADER_struct[]; 128 extern byte XEX_RAW_LOADER_ENTRY_struct[]; 129 extern byte XEX_FILE_HEADER_struct[]; 130 131 #endif 132