char *op_unknown = "unknown"; char *optypenames[] = { op_unknown, op_unknown, "jump", op_unknown, op_unknown, "local", "global", "constant", "pop", op_unknown, op_unknown, // 10 op_unknown, "eval", "retval", "getvar", op_unknown, "getvar[]", "setvar", "setvar[]", "push", "setarg2?", "callnative", "callfunc", "typecast", op_unknown, op_unknown, op_unknown, op_unknown, op_unknown, op_unknown, op_unknown, op_unknown, "add\t", "subtract", "multiply", "divide", op_unknown, "negate", "bnot", "return", "jmptruebooleannor", "jmpfalsebooleanand", op_unknown, op_unknown, op_unknown }; void __stdcall JassVMSwitchTableHook(JassInstance *inst) { if (true) { JassOpcode *op = inst->op; CompilerInstance *comp = inst->comp; char *symname; char msg[200]; switch (op->type) { case 0x05: case 0x06: case 0x07: case 0x08: //case 0x0c: // symbolid for eval is actually the value we are evaluating case 0x0e: case 0x0f: case 0x10: case 0x11: //case 0x13: // always displays a null string for push opcode?? case 0x15: case 0x16: case 0x28: case 0x29: case 0x2a: case 0x2b: __asm { mov ecx, comp mov eax, op mov eax, dword ptr ds:[eax + 4] push eax mov eax, 0x6f69dfe0 call eax mov symname, eax } fprintf(f, "%.2x %.2x %.2x %2x:%-20s %s\n", op->UnknownArrayThing, op->UnknownParam1, op->UnknownParam2, op->type, optypenames[op->type], symname); break; default: fprintf(f, "%.2x %.2x %.2x %2x:%-20s %.8x\n", op->UnknownArrayThing, op->UnknownParam1, op->UnknownParam2, op->type, optypenames[op->type], op->symbolid); break; } //if (show_em) // GamePrintUIMessage(msg, 10.0f, 0xFFFFFFFF); //std::cout << msg; } }