urt-rs / docs /research /qvm /summary.json
nmarshall's picture
Start QVM and native binary reverse engineering with reproducible analysis
fd99160
Raw History Blame Contribute Delete
15 kB
[
{
"call_class_counts": {
"adjacent_constant_syscall_candidate": 2039,
"adjacent_constant_target_candidate": 4525,
"unresolved_indirect": 231
},
"constant_string_reference_candidates": 1534,
"constant_syscall_candidates": {
"0": 9,
"1": 4,
"10": 10,
"100": 88,
"101": 45,
"102": 2,
"103": 265,
"104": 238,
"105": 4,
"106": 126,
"11": 4,
"12": 3,
"13": 10,
"14": 41,
"15": 54,
"16": 24,
"17": 1,
"18": 1,
"19": 1,
"2": 2,
"20": 3,
"22": 1,
"23": 19,
"24": 1,
"25": 27,
"26": 1,
"27": 1,
"28": 89,
"29": 34,
"3": 12,
"30": 3,
"31": 2,
"32": 2,
"33": 1,
"34": 118,
"36": 1,
"37": 66,
"38": 44,
"39": 85,
"4": 2,
"40": 3,
"41": 56,
"42": 11,
"43": 7,
"44": 2,
"45": 123,
"46": 83,
"47": 7,
"48": 2,
"49": 1,
"5": 71,
"50": 2,
"51": 1,
"52": 1,
"53": 1,
"54": 3,
"55": 5,
"56": 1,
"57": 96,
"6": 18,
"60": 4,
"61": 3,
"62": 4,
"63": 4,
"65": 5,
"66": 4,
"67": 35,
"68": 2,
"69": 1,
"7": 2,
"70": 3,
"71": 1,
"73": 4,
"74": 1,
"75": 1,
"76": 1,
"77": 1,
"78": 1,
"79": 1,
"8": 8,
"80": 3,
"81": 8,
"9": 4
},
"entry_instruction": {
"code_offset": 0,
"file_offset": 32,
"index": 0,
"opcode": "ENTER",
"operand": 36
},
"function_entry_candidates": 1133,
"header": {
"bss_length": 37935304,
"code_length": 759988,
"code_offset": 32,
"data_length": 62940,
"data_offset": 760020,
"declared_memory_bytes": 38055548,
"decoded_code_bytes": 759987,
"instruction_count": 258563,
"jump_target_bytes": 0,
"jump_targets": [],
"literal_length": 57304,
"magic": "0x12721444",
"upstream_power_of_two_memory_bytes": 67108864,
"zero_code_padding_bytes": 1
},
"limitations": "Adjacent constants are local patterns, not whole-program dataflow; ENTER ranges are linear partitions, not proven functions. Computed calls/jumps remain unresolved.",
"module": "cgame",
"opcode_counts": {
"ADD": 14409,
"ADDF": 2519,
"ARG": 15208,
"BAND": 1227,
"BLOCK_COPY": 405,
"BOR": 253,
"BXOR": 19,
"CALL": 6795,
"CONST": 55515,
"CVFI": 411,
"CVIF": 1444,
"DIVF": 220,
"DIVI": 251,
"ENTER": 1133,
"EQ": 2415,
"EQF": 142,
"GEF": 272,
"GEI": 306,
"GTF": 59,
"GTI": 205,
"GTU": 4,
"JUMP": 3942,
"LEAVE": 2094,
"LEF": 178,
"LEI": 380,
"LEU": 11,
"LOAD1": 841,
"LOAD2": 64,
"LOAD4": 51490,
"LOCAL": 55295,
"LSH": 1517,
"LTF": 148,
"LTI": 683,
"LTU": 10,
"MODI": 205,
"MULF": 5574,
"MULI": 1638,
"MULU": 3,
"NE": 2227,
"NEF": 72,
"NEGF": 460,
"NEGI": 20,
"POP": 3460,
"PUSH": 1133,
"RSHI": 99,
"RSHU": 20,
"SEX16": 76,
"SEX8": 546,
"STORE1": 483,
"STORE2": 14,
"STORE4": 20589,
"SUB": 729,
"SUBF": 1350
},
"schema_version": 1,
"sha256": "afb9f76b720b103232e39e0250a2af7977bd084de607ad3073db6de00a171583",
"source": {
"archive": "zUrT43_qvm.pk3",
"archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
"member": {
"bytes": 880264,
"comment_hex": "",
"compressed_bytes": 221234,
"compression": 8,
"crc32": "1289db6b",
"create_system": 0,
"create_version": 63,
"date_time": [
2018,
6,
18,
22,
11,
48
],
"directory": false,
"entry_index": 1,
"external_attr": 32,
"extra_hex": "0a00200000000000010018006d56d3954007d401359ce9932f1fd201359ce9932f1fd201",
"extract_version": 20,
"flags": 0,
"header_offset": 33,
"internal_attr": 0,
"occurrence": 0,
"output": "assets/extracted/zUrT43_qvm.pk3/members/000001/vm/cgame.qvm",
"path": "vm/cgame.qvm",
"sha256": "afb9f76b720b103232e39e0250a2af7977bd084de607ad3073db6de00a171583",
"type": "member",
"volume": 0
}
},
"string_count": 2538
},
{
"call_class_counts": {
"adjacent_constant_syscall_candidate": 2217,
"adjacent_constant_target_candidate": 6690,
"unresolved_indirect": 89
},
"constant_string_reference_candidates": 2211,
"constant_syscall_candidates": {
"0": 13,
"1": 1,
"10": 13,
"100": 65,
"101": 61,
"102": 11,
"103": 131,
"104": 122,
"105": 3,
"106": 120,
"11": 8,
"111": 3,
"12": 3,
"13": 15,
"14": 20,
"15": 3,
"16": 11,
"17": 388,
"18": 106,
"19": 25,
"2": 9,
"20": 18,
"200": 1,
"201": 1,
"202": 24,
"204": 1,
"205": 1,
"206": 1,
"207": 6,
"209": 1,
"21": 8,
"210": 1,
"211": 2,
"22": 5,
"23": 14,
"24": 36,
"25": 9,
"26": 1,
"28": 3,
"3": 28,
"30": 61,
"300": 1,
"301": 1,
"302": 3,
"303": 1,
"304": 5,
"305": 3,
"306": 1,
"307": 1,
"308": 5,
"309": 6,
"31": 22,
"310": 10,
"311": 13,
"312": 2,
"313": 4,
"314": 1,
"315": 14,
"316": 11,
"317": 3,
"318": 1,
"32": 11,
"33": 1,
"34": 1,
"36": 2,
"37": 3,
"38": 6,
"39": 1,
"4": 18,
"400": 1,
"401": 5,
"402": 11,
"403": 3,
"404": 3,
"405": 2,
"406": 6,
"408": 2,
"409": 2,
"41": 3,
"416": 3,
"42": 1,
"420": 2,
"422": 1,
"423": 1,
"5": 91,
"500": 1,
"501": 1,
"503": 39,
"505": 1,
"506": 6,
"507": 1,
"508": 2,
"509": 4,
"510": 5,
"511": 1,
"512": 1,
"514": 2,
"516": 81,
"518": 8,
"519": 52,
"520": 2,
"521": 1,
"522": 1,
"523": 6,
"524": 1,
"525": 2,
"526": 4,
"527": 2,
"528": 4,
"529": 4,
"530": 1,
"531": 1,
"532": 15,
"533": 10,
"534": 1,
"535": 1,
"536": 2,
"537": 9,
"538": 2,
"539": 7,
"542": 1,
"543": 1,
"545": 1,
"546": 1,
"547": 4,
"548": 2,
"549": 7,
"550": 8,
"551": 15,
"552": 9,
"554": 6,
"555": 1,
"556": 1,
"557": 1,
"558": 1,
"559": 2,
"560": 1,
"561": 1,
"562": 3,
"563": 1,
"564": 1,
"565": 1,
"566": 2,
"567": 2,
"569": 28,
"570": 2,
"571": 1,
"573": 1,
"574": 2,
"575": 2,
"576": 1,
"578": 1,
"579": 1,
"580": 9,
"6": 42,
"600": 1,
"601": 1,
"603": 1,
"7": 40,
"8": 32,
"9": 57
},
"entry_instruction": {
"code_offset": 0,
"file_offset": 32,
"index": 0,
"opcode": "ENTER",
"operand": 36
},
"function_entry_candidates": 1224,
"header": {
"bss_length": 36445748,
"code_length": 885716,
"code_offset": 32,
"data_length": 33364,
"data_offset": 885748,
"declared_memory_bytes": 36543300,
"decoded_code_bytes": 885715,
"instruction_count": 298900,
"jump_target_bytes": 0,
"jump_targets": [],
"literal_length": 64188,
"magic": "0x12721444",
"upstream_power_of_two_memory_bytes": 67108864,
"zero_code_padding_bytes": 1
},
"limitations": "Adjacent constants are local patterns, not whole-program dataflow; ENTER ranges are linear partitions, not proven functions. Computed calls/jumps remain unresolved.",
"module": "qagame",
"opcode_counts": {
"ADD": 21004,
"ADDF": 1748,
"ARG": 19611,
"BAND": 1349,
"BCOM": 1,
"BLOCK_COPY": 512,
"BOR": 405,
"BXOR": 35,
"CALL": 8996,
"CONST": 66150,
"CVFI": 311,
"CVIF": 597,
"DIVF": 164,
"DIVI": 391,
"ENTER": 1224,
"EQ": 3359,
"EQF": 145,
"GEF": 359,
"GEI": 403,
"GEU": 3,
"GTF": 52,
"GTI": 213,
"GTU": 4,
"JUMP": 5306,
"LEAVE": 2557,
"LEF": 221,
"LEI": 649,
"LEU": 15,
"LOAD1": 952,
"LOAD2": 36,
"LOAD4": 59624,
"LOCAL": 61552,
"LSH": 1462,
"LTF": 64,
"LTI": 894,
"LTU": 17,
"MODI": 68,
"MULF": 3376,
"MULI": 1152,
"NE": 3298,
"NEF": 110,
"NEGF": 257,
"NEGI": 18,
"POP": 5155,
"PUSH": 1224,
"RSHI": 69,
"RSHU": 25,
"SEX16": 48,
"SEX8": 665,
"STORE1": 349,
"STORE2": 15,
"STORE4": 20999,
"SUB": 837,
"SUBF": 850
},
"schema_version": 1,
"sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
"source": {
"archive": "zUrT43_qvm.pk3",
"archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
"member": {
"bytes": 983300,
"comment_hex": "",
"compressed_bytes": 246560,
"compression": 8,
"crc32": "98ea1768",
"create_system": 0,
"create_version": 63,
"date_time": [
2018,
6,
18,
22,
11,
50
],
"directory": false,
"entry_index": 2,
"external_attr": 32,
"extra_hex": "0a0020000000000001001800d1e24e974007d40116dcbf962f1fd20116dcbf962f1fd201",
"extract_version": 20,
"flags": 0,
"header_offset": 221309,
"internal_attr": 0,
"occurrence": 0,
"output": "assets/extracted/zUrT43_qvm.pk3/members/000002/vm/qagame.qvm",
"path": "vm/qagame.qvm",
"sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
"type": "member",
"volume": 0
}
},
"string_count": 2017
},
{
"call_class_counts": {
"adjacent_constant_syscall_candidate": 852,
"adjacent_constant_target_candidate": 2117,
"unresolved_indirect": 199
},
"constant_string_reference_candidates": 837,
"constant_syscall_candidates": {
"0": 5,
"1": 10,
"10": 2,
"100": 38,
"101": 21,
"102": 3,
"103": 43,
"104": 32,
"105": 3,
"106": 13,
"11": 1,
"12": 42,
"13": 13,
"14": 8,
"15": 7,
"16": 17,
"17": 9,
"18": 16,
"19": 7,
"2": 4,
"20": 33,
"21": 1,
"22": 11,
"24": 2,
"25": 1,
"26": 22,
"27": 12,
"28": 1,
"29": 2,
"3": 160,
"31": 4,
"32": 1,
"39": 7,
"4": 36,
"40": 14,
"41": 21,
"43": 1,
"44": 2,
"45": 5,
"5": 14,
"50": 5,
"51": 2,
"55": 3,
"58": 6,
"59": 5,
"6": 69,
"60": 42,
"61": 2,
"64": 1,
"65": 6,
"66": 3,
"67": 6,
"68": 13,
"69": 1,
"70": 2,
"71": 1,
"72": 1,
"73": 2,
"74": 1,
"75": 6,
"76": 7,
"77": 4,
"78": 4,
"79": 4,
"80": 1,
"82": 4,
"83": 1,
"84": 1,
"85": 2,
"88": 1,
"90": 2
},
"entry_instruction": {
"code_offset": 0,
"file_offset": 32,
"index": 0,
"opcode": "ENTER",
"operand": 28
},
"function_entry_candidates": 680,
"header": {
"bss_length": 9099016,
"code_length": 303832,
"code_offset": 32,
"data_length": 31072,
"data_offset": 303864,
"declared_memory_bytes": 9162280,
"decoded_code_bytes": 303831,
"instruction_count": 101585,
"jump_target_bytes": 0,
"jump_targets": [],
"literal_length": 32192,
"magic": "0x12721444",
"upstream_power_of_two_memory_bytes": 16777216,
"zero_code_padding_bytes": 1
},
"limitations": "Adjacent constants are local patterns, not whole-program dataflow; ENTER ranges are linear partitions, not proven functions. Computed calls/jumps remain unresolved.",
"module": "ui",
"opcode_counts": {
"ADD": 5564,
"ADDF": 589,
"ARG": 7066,
"BAND": 305,
"BLOCK_COPY": 69,
"BOR": 66,
"BXOR": 11,
"CALL": 3168,
"CONST": 20837,
"CVFI": 140,
"CVIF": 302,
"DIVF": 66,
"DIVI": 57,
"ENTER": 680,
"EQ": 1067,
"EQF": 27,
"GEF": 80,
"GEI": 173,
"GEU": 1,
"GTF": 38,
"GTI": 108,
"GTU": 3,
"JUMP": 1955,
"LEAVE": 1578,
"LEF": 46,
"LEI": 212,
"LEU": 11,
"LOAD1": 484,
"LOAD2": 8,
"LOAD4": 20005,
"LOCAL": 22175,
"LSH": 549,
"LTF": 47,
"LTI": 394,
"LTU": 7,
"MODI": 22,
"MULF": 1034,
"MULI": 308,
"NE": 1156,
"NEF": 86,
"NEGF": 81,
"NEGI": 8,
"POP": 1671,
"PUSH": 680,
"RSHI": 17,
"RSHU": 9,
"SEX16": 10,
"SEX8": 409,
"STORE1": 240,
"STORE2": 5,
"STORE4": 7324,
"SUB": 285,
"SUBF": 352
},
"schema_version": 1,
"sha256": "111eba50fc52a7d26e7e04e019b8698c5a6fe7ba3d9d1a92487486f08fd4424b",
"source": {
"archive": "zUrT43_qvm.pk3",
"archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
"member": {
"bytes": 367128,
"comment_hex": "",
"compressed_bytes": 96667,
"compression": 8,
"crc32": "e771cdf9",
"create_system": 0,
"create_version": 63,
"date_time": [
2018,
6,
18,
22,
11,
52
],
"directory": false,
"entry_index": 3,
"external_attr": 32,
"extra_hex": "0a00200000000000010018009712d8974007d40147287b972f1fd20147287b972f1fd201",
"extract_version": 20,
"flags": 0,
"header_offset": 467912,
"internal_attr": 0,
"occurrence": 0,
"output": "assets/extracted/zUrT43_qvm.pk3/members/000003/vm/ui.qvm",
"path": "vm/ui.qvm",
"sha256": "111eba50fc52a7d26e7e04e019b8698c5a6fe7ba3d9d1a92487486f08fd4424b",
"type": "member",
"volume": 0
}
},
"string_count": 1340
}
]