diff --git a/ghidra_scripts/extract_engine_surface.py b/ghidra_scripts/extract_engine_surface.py index 31f0ff4..2bffc35 100644 --- a/ghidra_scripts/extract_engine_surface.py +++ b/ghidra_scripts/extract_engine_surface.py @@ -323,6 +323,13 @@ def _is_generic_name(name): return (not name) or name.startswith("FUN_") or name.startswith("thunk_") or name.startswith("LAB_") +def _executable(program, addr): + """True if `addr` lives in an executable memory block - a sanity gate so a switch shape we + don't model (or a table over-read) can never emit a non-code 'case' as a method.""" + blk = program.getMemory().getBlock(addr) + return blk is not None and blk.isExecute() + + def _qualified(f): if f is None: return None @@ -402,6 +409,9 @@ def _walk_calls(program, start_addr, stops, limit=80): _SWITCH_JMP = re.compile(r"\[(\w+)\*0x4 \+ (0x[0-9a-fA-F]+)\]") _LEA_DISP = re.compile(r"\[\w+ \+ (-?0x[0-9a-fA-F]+)\]") +# A two-level switch's byte-index-table load: `byte ptr [ + ]`. The 5+ hex +# digits distinguish a table address (0x100xxxxx) from a small struct-field offset. +_BYTE_TABLE = re.compile(r"byte ptr \[(\w+) \+ (0x[0-9a-fA-F]{5,})\]") def _lea_disp(instr): @@ -410,6 +420,14 @@ def _lea_disp(instr): return int(m.group(1), 16) if m is not None else None +def _s32(v): + """Interpret a scalar as 32-bit signed. Ghidra's getScalar() hands back the raw unsigned + immediate, so e.g. `ADD idx, 0xFFFFFEFF` (really -257, a switch starting at id 257) must be + sign-extended or the recovered ids overflow to nonsense.""" + v = int(v) & 0xffffffff + return v - 0x100000000 if v >= 0x80000000 else v + + def _parse_switch(program, func): """Recover the dense jump-table switch of a `run` function at the disassembly level (decompiler-independent, so it survives the big inline-heavy runners). Both MSVC6 and @@ -417,48 +435,72 @@ def _parse_switch(program, func): LEA idx,[reg - base] ; CMP idx, range ; JA default ; JMP [idx*4 + TABLE] - Returns {table, base, count} or None. `id = table_index + base`; `count = range + 1`.""" + Returns {table, base, count, default} or None. `id = table_index + base`; `count = range + 1`. + `default` is the out-of-range target of the `JA default` bounds check - the jump table also + routes its *holes* (ids the runner doesn't implement) there, so cases pointing at it are not + real methods and must be dropped.""" listing = program.getListing() + space = program.getAddressFactory().getDefaultAddressSpace() instrs = [] it = listing.getInstructions(func.getBody(), True) while it.hasNext(): instrs.append(it.next()) - idx_reg = table = jmp_addr = None + idx_reg = table = jmp_addr = default = None for instr in instrs: - if instr.getMnemonicString() == "JMP" and instr.getFlowType().isComputed(): + ft = instr.getFlowType() + if ft.isJump() and ft.isConditional(): # the `JA default` bounds check (last one wins) + flows = instr.getFlows() + if len(flows) > 0: + default = flows[0] + if instr.getMnemonicString() == "JMP" and ft.isComputed(): m = _SWITCH_JMP.search(instr.toString()) if m is not None: idx_reg = m.group(1) - space = program.getAddressFactory().getDefaultAddressSpace() table = space.getAddress(int(m.group(2), 16)) jmp_addr = instr.getAddress() break if table is None: return None + # Two-level switch: the index is itself looked up in a byte table - `MOVZX r, byte[i+bt]` + # (MSVC8) or `XOR r,r; MOV rl, byte[i+bt]` (MSVC6). Targets are ptrTable[byteTable[i]]. The + # *bounds* register (the `i` indexing the byte table) is what LEA/CMP constrain - which on + # MSVC6 differs from the JMP's index register - so recover it from the byte-table load. + byte_table = None + bounds_reg = idx_reg + for instr in instrs: + if instr.getAddress().equals(jmp_addr): + break + mbt = _BYTE_TABLE.search(instr.toString()) + if mbt is not None: + bounds_reg = mbt.group(1) + byte_table = space.getAddress(int(mbt.group(2), 16)) + break + base = 0 count = None for instr in instrs: if instr.getAddress().equals(jmp_addr): break - if instr.getNumOperands() == 0 or instr.getDefaultOperandRepresentation(0) != idx_reg: + if instr.getNumOperands() == 0 or instr.getDefaultOperandRepresentation(0) != bounds_reg: continue mn = instr.getMnemonicString() s = instr.getScalar(1) if mn == "CMP" and s is not None: - count = int(s.getValue()) + 1 + count = _s32(s.getValue()) + 1 elif mn == "LEA": # LEA idx,[reg - k] -> id = index + k - disp = int(s.getValue()) if s is not None else _lea_disp(instr) - if disp is not None: - base = -disp + raw = s.getValue() if s is not None else _lea_disp(instr) + if raw is not None: # _s32 also fixes the text path: Ghidra prints a + base = -_s32(raw) # big displacement unsigned ("0xfffffeff" = -257) elif mn == "SUB" and s is not None: - base = int(s.getValue()) + base = _s32(s.getValue()) elif mn == "ADD" and s is not None: - base = -int(s.getValue()) + base = -_s32(s.getValue()) elif mn == "DEC": base = 1 - return {"table": table, "base": base, "count": count} + return {"table": table, "base": base, "count": count, "default": default, + "byte_table": byte_table} def extract_method_dispatch(program): @@ -498,17 +540,29 @@ def _dispatch_from_run(program, run_func, owner, runner): mem = program.getMemory() space = program.getAddressFactory().getDefaultAddressSpace() + ptr = sw["table"] + byte_table = sw.get("byte_table") targets = [] for i in range(count): try: - val = mem.getInt(sw["table"].add(i * 4)) & 0xffffffff + # Two-level switch: index the pointer table through the byte index table. + slot = (mem.getByte(byte_table.add(i)) & 0xff) if byte_table is not None else i + val = mem.getInt(ptr.add(slot * 4)) & 0xffffffff except Exception: break targets.append(space.getAddress(val)) - stops = set(targets) + stops = set(t for t in targets if _executable(program, t)) + default = sw.get("default") rows = [] for i in range(len(targets)): + mid = i + sw["base"] + if mid < 0 or mid > 0xffff: + continue # nonsensical id -> the switch base wasn't recovered cleanly; don't emit garbage + if not _executable(program, targets[i]): + continue # target isn't code (unsupported switch shape / over-read) -> skip, never emit garbage + if default is not None and targets[i].equals(default): + continue # a switch hole (unimplemented id) routed to the base-runner default anchors, funcs = _walk_calls(program, targets[i], stops) # A thin wrapper case forwards to one submethod: the real body (and its leaf anchors) # live in that function. Expanding one level makes MSVC8 (separate show()/load()) line up @@ -523,7 +577,7 @@ def _dispatch_from_run(program, run_func, owner, runner): impl_addr = "0x%x" % targets[i].getOffset() # body is inline in the case block calls = anchors rows.append({ - "owner": owner, "runner": runner, "id": i + sw["base"], + "owner": owner, "runner": runner, "id": mid, "case_addr": "0x%x" % targets[i].getOffset(), "impl": impl, "impl_addr": impl_addr, "calls": calls, }) diff --git a/snapshots/PIKLIB8.dll.snapshot.json b/snapshots/PIKLIB8.dll.snapshot.json index 3406877..c522c11 100644 --- a/snapshots/PIKLIB8.dll.snapshot.json +++ b/snapshots/PIKLIB8.dll.snapshot.json @@ -3229,60 +3229,6 @@ "owner": "CMC_Array", "runner": "CMC_Array_Runner" }, - { - "calls": [], - "case_addr": "0x100471fb", - "id": 26, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x100471fb", - "id": 27, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x100471fb", - "id": 28, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x100471fb", - "id": 29, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x100471fb", - "id": 30, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x100471fb", - "id": 31, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, { "calls": [ "vtbl+0x40", @@ -5087,6 +5033,663 @@ "owner": "CMC_Groupped", "runner": "CMC_Groupped_Runner" }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x7c" + ], + "case_addr": "0x100760e8", + "id": 1, + "impl": null, + "impl_addr": "0x100760e8", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x7c" + ], + "case_addr": "0x10076106", + "id": 2, + "impl": null, + "impl_addr": "0x10076106", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x3c", + "vtbl+0x3c", + "vtbl+0x104", + "CMC_EditBox::getEditBox", + "CMC_EditBox::getEditBox", + "vtbl+0x64", + "vtbl+0x104" + ], + "case_addr": "0x10076124", + "id": 5, + "impl": null, + "impl_addr": "0x10076124", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x3c", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "CMC_EditBox::getEditBox", + "vtbl+0x6c", + "CMC_Object::flush", + "CMC_Object::flush" + ], + "case_addr": "0x100761f2", + "id": 6, + "impl": null, + "impl_addr": "0x100761f2", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x40", + "CMC_Keyboard::getLatestKey", + "vtbl+0x94", + "CMC_Object::flush" + ], + "case_addr": "0x1007624f", + "id": 7, + "impl": "CMC_Image_Runner::load", + "impl_addr": "0x10076b30", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "CGraphicsObject::SetClippingRect" + ], + "case_addr": "0x1007626f", + "id": 8, + "impl": null, + "impl_addr": "0x1007626f", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x40", + "CMC_Keyboard::getLatestKey", + "CMC_ObjectsContainer::getGraphicsObject", + "vtbl+0xe8", + "CXRect::operator=", + "CMC_Object::flush" + ], + "case_addr": "0x10076293", + "id": 9, + "impl": "CMC_Image_Runner::setClipping", + "impl_addr": "0x10076be0", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "CMC_VariableFactory::allocInteger", + "vtbl+0xd8", + "CMC_Integer::setValue" + ], + "case_addr": "0x100762b3", + "id": 15, + "impl": null, + "impl_addr": "0x100762b3", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "CMC_VariableFactory::allocInteger", + "vtbl+0xd8", + "CMC_Integer::setValue" + ], + "case_addr": "0x100762ea", + "id": 16, + "impl": null, + "impl_addr": "0x100762ea", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "CMC_VariableFactory::allocInteger", + "vtbl+0xc4", + "CMC_Integer::setValue" + ], + "case_addr": "0x10076322", + "id": 17, + "impl": null, + "impl_addr": "0x10076322", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "CMC_VariableFactory::allocInteger", + "vtbl+0xc8", + "CMC_Integer::setValue" + ], + "case_addr": "0x10076352", + "id": 18, + "impl": null, + "impl_addr": "0x10076352", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_VariableFactory::allocBool", + "CMC_Image::getImage", + "vtbl+0x40", + "CMC_Keyboard::getLatestKey", + "CMC_ObjectsContainer::getGraphicsObject", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "vtbl+0xf4", + "CMC_Bool::setValue", + "CMC_Object::flush", + "CMC_Object::flush" + ], + "case_addr": "0x10076382", + "id": 23, + "impl": "CMC_Image_Runner::isNear", + "impl_addr": "0x10076e40", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_VariableFactory::allocBool", + "CMC_Image::getImage", + "vtbl+0x3c", + "vtbl+0x3c", + "vtbl+0x34", + "CMC_Bool::getValue", + "CMC_EditBox::getEditBox", + "CMC_EditBox::getEditBox", + "CGraphicsObject::isInside", + "CMC_Bool::setValue", + "CMC_Object::flush", + "CMC_Object::flush", + "CMC_Object::flush" + ], + "case_addr": "0x100763a2", + "id": 24, + "impl": "CMC_Image_Runner::isInside", + "impl_addr": "0x10077010", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x34", + "CMC_Image::getImage", + "vtbl+0x38" + ], + "case_addr": "0x100763c2", + "id": 26, + "impl": null, + "impl_addr": "0x100763c2", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x90", + "vtbl+0x34" + ], + "case_addr": "0x10076429", + "id": 27, + "impl": null, + "impl_addr": "0x10076429", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "CMC_Image::getImage", + "CMC_EditBox::getEditBox", + "CRefreshScreen::SetPriority", + "CMC_Object::flush" + ], + "case_addr": "0x10076455", + "id": 32, + "impl": null, + "impl_addr": "0x10076455", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "vtbl+0x3c", + "CMC_Image::getImage", + "CMC_VariableFactory::allocInteger", + "CMC_Integer::setValue", + "vtbl+0xd8", + "CMC_EditBox::getEditBox", + "vtbl+0xd8", + "vtbl+0xc4", + "CMC_EditBox::getEditBox", + "vtbl+0xd8", + "CMC_EditBox::getEditBox", + "vtbl+0xd8", + "vtbl+0xc8", + "CMC_EditBox::getEditBox" + ], + "case_addr": "0x100764a1", + "id": 33, + "impl": "CMC_Image_Runner::getAlpha", + "impl_addr": "0x100771a0", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "vtbl+0x3c", + "CMC_Image::getImage", + "vtbl+0x4c", + "CMC_VariableFactory::allocInteger", + "CMC_Integer::setValue", + "vtbl+0xd8", + "CMC_EditBox::getEditBox", + "vtbl+0xd8", + "vtbl+0xc4", + "CMC_EditBox::getEditBox", + "vtbl+0xd8", + "CMC_EditBox::getEditBox", + "vtbl+0xd8", + "vtbl+0xc8" + ], + "case_addr": "0x100764c1", + "id": 34, + "impl": "CMC_Image_Runner::getPixel", + "impl_addr": "0x100772e0", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "vtbl+0x3c", + "vtbl+0x40", + "CMC_Keyboard::getLatestKey", + "CMC_ObjectsContainer::getGraphicsObject", + "CMC_Image::getImage", + "CMC_EditBox::getEditBox", + "CMC_EditBox::getEditBox", + "CXPoint::CXPoint", + "CGraphicsObject::mergeAlpha", + "CMC_Object::flush", + "CMC_Object::flush", + "CMC_Object::flush" + ], + "case_addr": "0x100764e1", + "id": 36, + "impl": "CMC_Image_Runner::mergeAlpha", + "impl_addr": "0x10077430", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x104" + ], + "case_addr": "0x10076501", + "id": 37, + "impl": null, + "impl_addr": "0x10076501", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0xd8", + "vtbl+0xcc", + "CMC_VariableFactory::allocInteger" + ], + "case_addr": "0x10076520", + "id": 40, + "impl": null, + "impl_addr": "0x10076520", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0xd8", + "vtbl+0xcc", + "CMC_VariableFactory::allocInteger", + "CMC_Integer::setValue" + ], + "case_addr": "0x1007655a", + "id": 41, + "impl": null, + "impl_addr": "0x1007655a", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "CMC_VariableFactory::allocBool", + "CMC_Bool::setValue" + ], + "case_addr": "0x100765ae", + "id": 48, + "impl": null, + "impl_addr": "0x100765ae", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x40", + "CMC_Keyboard::getLatestKey", + "CMC_ObjectsContainer::getObject", + "MSVCRT.DLL::free", + "CMC_Image::getImage", + "vtbl+0xd8", + "vtbl+0x60", + "vtbl+0xcc", + "vtbl+0xd0", + "vtbl+0x4c", + "CGraphicsObject::AlphaChannel", + "vtbl+0x104" + ], + "case_addr": "0x100765da", + "id": 49, + "impl": "CMC_Image_Runner::link", + "impl_addr": "0x100775f0", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x34", + "CMC_Bool::getValue", + "vtbl+0x34", + "CMC_Bool::getValue" + ], + "case_addr": "0x100765fa", + "id": 50, + "impl": null, + "impl_addr": "0x100765fa", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "CMC_Image::getImage", + "CMC_EditBox::getEditBox", + "vtbl+0x3c" + ], + "case_addr": "0x10076639", + "id": 51, + "impl": null, + "impl_addr": "0x10076639", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x40", + "CMC_Keyboard::getLatestKey", + "vtbl+0xbc", + "CMC_Object::flush" + ], + "case_addr": "0x100766a7", + "id": 52, + "impl": "CMC_Image_Runner::save", + "impl_addr": "0x10076b70", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0xd8", + "vtbl+0xcc", + "vtbl+0x40", + "MSVCRT.DLL::malloc" + ], + "case_addr": "0x100766c7", + "id": 53, + "impl": "CMC_Image_Runner::setAnchor", + "impl_addr": "0x100777b0", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x94", + "vtbl+0x104" + ], + "case_addr": "0x100766e7", + "id": 54, + "impl": null, + "impl_addr": "0x100766e7", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x98", + "vtbl+0x104" + ], + "case_addr": "0x10076712", + "id": 55, + "impl": null, + "impl_addr": "0x10076712", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x9c", + "vtbl+0x104" + ], + "case_addr": "0x1007673d", + "id": 56, + "impl": null, + "impl_addr": "0x1007673d", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x40", + "CMC_Keyboard::getLatestKey", + "CMC_ObjectsContainer::getGraphicsObject", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "CGraphicsObject::addObject" + ], + "case_addr": "0x10076768", + "id": 57, + "impl": "CMC_Image_Runner::drawOnto", + "impl_addr": "0x10077da0", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x104", + "vtbl+0x64", + "vtbl+0x104" + ], + "case_addr": "0x100761b6", + "id": 58, + "impl": null, + "impl_addr": "0x100761b6", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "CMC_EditBox::getEditBox" + ], + "case_addr": "0x1007617b", + "id": 59, + "impl": null, + "impl_addr": "0x1007617b", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x3c", + "vtbl+0x3c", + "vtbl+0x34", + "CMC_VariableFactory::allocBool", + "CMC_Bool::getValue", + "CMC_EditBox::getEditBox", + "CMC_EditBox::getEditBox", + "CXPoint::CXPoint", + "CGraphicsObject::isAt", + "CMC_Bool::setValue" + ], + "case_addr": "0x10076788", + "id": 63, + "impl": "CMC_Image_Runner::isAt", + "impl_addr": "0x10077e10", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_VariableFactory::allocInteger", + "CMC_Image::getImage", + "CMC_Integer::setValue" + ], + "case_addr": "0x1007666f", + "id": 64, + "impl": null, + "impl_addr": "0x1007666f", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "CMC_Image::getImage", + "vtbl+0x38", + "CMC_Double::getValue", + "vtbl+0x38", + "CMC_Double::getValue", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "vtbl+0x40", + "CMC_Keyboard::getLatestKey", + "CMC_ObjectsContainer::getObject" + ], + "case_addr": "0x100767a8", + "id": 65, + "impl": "CMC_Image_Runner::getSlideComps", + "impl_addr": "0x10077e90", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "vtbl+0x40", + "CMC_Keyboard::getLatestKey", + "CMC_ObjectsContainer::getObject", + "MSVCRT.DLL::free", + "MSVCRT.DLL::operator_new", + "MSVCRT.DLL::malloc" + ], + "case_addr": "0x100767c8", + "id": 66, + "impl": "CMC_Image_Runner::getColorAt", + "impl_addr": "0x10078230", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "CMC_VariableFactory::allocInteger" + ], + "case_addr": "0x100767e8", + "id": 67, + "impl": null, + "impl_addr": "0x100767e8", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "CMC_VariableFactory::allocInteger" + ], + "case_addr": "0x1007681d", + "id": 68, + "impl": "CMC_Image_Runner::getColorBAt", + "impl_addr": "0x100783e0", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, + { + "calls": [ + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "vtbl+0x3c", + "CMC_EditBox::getEditBox", + "CMC_VariableFactory::allocInteger" + ], + "case_addr": "0x1007683d", + "id": 69, + "impl": "CMC_Image_Runner::getColorBAt", + "impl_addr": "0x100783e0", + "owner": "CMC_Image", + "runner": "CMC_Image_Runner" + }, { "calls": [ "vtbl+0x3c", @@ -5190,15 +5793,6 @@ "owner": "CMC_Keyboard", "runner": "CMC_Keyboard_Runner" }, - { - "calls": [], - "case_addr": "0x1007ecf2", - "id": 5, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Keyboard", - "runner": "CMC_Keyboard_Runner" - }, { "calls": [ "CMC_VariableFactory::allocString", @@ -6219,60 +6813,6 @@ "owner": "CMC_Scene", "runner": "CMC_Scene_Runner" }, - { - "calls": [], - "case_addr": "0x1009d2fb", - "id": 10, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x1009d2fb", - "id": 11, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x1009d2fb", - "id": 12, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x1009d2fb", - "id": 13, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x1009d2fb", - "id": 14, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x1009d2fb", - "id": 15, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, { "calls": [ "vtbl+0x3c", @@ -6850,24 +7390,6 @@ "owner": "CMC_Sound", "runner": "CMC_Sound_Runner" }, - { - "calls": [], - "case_addr": "0x100a3a92", - "id": 5, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Sound", - "runner": "CMC_Sound_Runner" - }, - { - "calls": [], - "case_addr": "0x100a3a92", - "id": 6, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Sound", - "runner": "CMC_Sound_Runner" - }, { "calls": [ "CMC_Button::getButton", @@ -7818,15 +8340,6 @@ "owner": "CMC_Variable", "runner": "CMC_Variable_Runner" }, - { - "calls": [], - "case_addr": "0x100b8162", - "id": 19, - "impl": "CMC_Runner::run", - "impl_addr": "0x10095e40", - "owner": "CMC_Variable", - "runner": "CMC_Variable_Runner" - }, { "calls": [ "CMC_VariableFactory::allocDouble", diff --git a/snapshots/bloomoodll.dll.snapshot.json b/snapshots/bloomoodll.dll.snapshot.json index cad8b21..78d3438 100644 --- a/snapshots/bloomoodll.dll.snapshot.json +++ b/snapshots/bloomoodll.dll.snapshot.json @@ -2153,60 +2153,6 @@ "owner": "CMC_Scene", "runner": "CMC_Scene_Runner" }, - { - "calls": [], - "case_addr": "0x10086128", - "id": 10, - "impl": null, - "impl_addr": "0x10086128", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x10086128", - "id": 11, - "impl": null, - "impl_addr": "0x10086128", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x10086128", - "id": 12, - "impl": null, - "impl_addr": "0x10086128", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x10086128", - "id": 13, - "impl": null, - "impl_addr": "0x10086128", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x10086128", - "id": 14, - "impl": null, - "impl_addr": "0x10086128", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, - { - "calls": [], - "case_addr": "0x10086128", - "id": 15, - "impl": null, - "impl_addr": "0x10086128", - "owner": "CMC_Scene", - "runner": "CMC_Scene_Runner" - }, { "calls": [ "vtbl+0x3c", @@ -2877,24 +2823,6 @@ "owner": "CMC_Sound", "runner": "CMC_Sound_Runner" }, - { - "calls": [], - "case_addr": "0x1008b296", - "id": 5, - "impl": null, - "impl_addr": "0x1008b296", - "owner": "CMC_Sound", - "runner": "CMC_Sound_Runner" - }, - { - "calls": [], - "case_addr": "0x1008b296", - "id": 6, - "impl": null, - "impl_addr": "0x1008b296", - "owner": "CMC_Sound", - "runner": "CMC_Sound_Runner" - }, { "calls": [ "CMC_Sound::getSound", @@ -3886,7 +3814,7 @@ "CMC_String::getValue" ], "case_addr": "0x100e6376", - "id": -4294967039, + "id": 257, "impl": "CMC_NetPeer_Runner::sendCmd", "impl_addr": "0x100e5d20", "owner": "CMC_NetPeer", @@ -3898,7 +3826,7 @@ "vtbl+0x40" ], "case_addr": "0x100e638d", - "id": -4294967038, + "id": 258, "impl": "CMC_NetPeer_Runner::sendVariable", "impl_addr": "0x100e5ee0", "owner": "CMC_NetPeer", @@ -3910,7 +3838,7 @@ "vtbl+0x40" ], "case_addr": "0x100e63a4", - "id": -4294967037, + "id": 259, "impl": "CMC_NetPeer_Runner::sendText", "impl_addr": "0x100e6060", "owner": "CMC_NetPeer", @@ -3922,7 +3850,7 @@ "vtbl+0x40" ], "case_addr": "0x100e63bb", - "id": -4294967036, + "id": 260, "impl": "CMC_NetPeer_Runner::sendBehaviour", "impl_addr": "0x100e61a0", "owner": "CMC_NetPeer", @@ -3935,7 +3863,7 @@ "CMC_String::setValue" ], "case_addr": "0x100e63d2", - "id": -4294967035, + "id": 261, "impl": "CMC_NetPeer_Runner::getLatestText", "impl_addr": "0x100e6320", "owner": "CMC_NetPeer", @@ -4195,15 +4123,6 @@ "owner": "CMC_Keyboard", "runner": "CMC_Keyboard_Runner" }, - { - "calls": [], - "case_addr": "0x1006c16d", - "id": 5, - "impl": null, - "impl_addr": "0x1006c16d", - "owner": "CMC_Keyboard", - "runner": "CMC_Keyboard_Runner" - }, { "calls": [ "CMC_VariableFactory::allocString", @@ -5248,24 +5167,6 @@ "owner": "CMC_Application", "runner": "CMC_Application_Runner" }, - { - "calls": [], - "case_addr": "0x1003982b", - "id": 13, - "impl": null, - "impl_addr": "0x1003982b", - "owner": "CMC_Application", - "runner": "CMC_Application_Runner" - }, - { - "calls": [], - "case_addr": "0x1003982b", - "id": 14, - "impl": null, - "impl_addr": "0x1003982b", - "owner": "CMC_Application", - "runner": "CMC_Application_Runner" - }, { "calls": [ "vtbl+0x3c", @@ -5353,7 +5254,7 @@ "CMC_Object::flush" ], "case_addr": "0x10067a9c", - "id": 3, + "id": 5, "impl": "CMC_Image_Runner::setPosition", "impl_addr": "0x10063c20", "owner": "CMC_Image", @@ -5371,7 +5272,7 @@ "CMC_Object::flush" ], "case_addr": "0x10067ae1", - "id": 4, + "id": 6, "impl": "CMC_Image_Runner::move", "impl_addr": "0x10063d90", "owner": "CMC_Image", @@ -5385,7 +5286,7 @@ "CMC_Object::flush" ], "case_addr": "0x10067af8", - "id": 5, + "id": 7, "impl": "CMC_Image_Runner::load", "impl_addr": "0x10063e10", "owner": "CMC_Image", @@ -5397,7 +5298,7 @@ "CGraphicsObject::SetClippingRect" ], "case_addr": "0x10067b0f", - "id": 6, + "id": 8, "impl": "CMC_Image_Runner::clearClipping", "impl_addr": "0x10063ee0", "owner": "CMC_Image", @@ -5413,7 +5314,7 @@ "CMC_Object::flush" ], "case_addr": "0x10067b26", - "id": 7, + "id": 9, "impl": "CMC_Image_Runner::setClipping", "impl_addr": "0x10063f10", "owner": "CMC_Image", @@ -5427,7 +5328,7 @@ "CMC_Integer::setValue" ], "case_addr": "0x10067b3d", - "id": 8, + "id": 15, "impl": "CMC_Image_Runner::getPositionX", "impl_addr": "0x10064120", "owner": "CMC_Image", @@ -5441,7 +5342,7 @@ "CMC_Integer::setValue" ], "case_addr": "0x10067b54", - "id": 9, + "id": 16, "impl": "CMC_Image_Runner::getPositionY", "impl_addr": "0x10064170", "owner": "CMC_Image", @@ -5455,7 +5356,7 @@ "CMC_Integer::setValue" ], "case_addr": "0x10067b6b", - "id": 10, + "id": 17, "impl": "CMC_Image_Runner::getWidth", "impl_addr": "0x100641c0", "owner": "CMC_Image", @@ -5469,7 +5370,7 @@ "CMC_Integer::setValue" ], "case_addr": "0x10067b82", - "id": 11, + "id": 18, "impl": "CMC_Image_Runner::getHeight", "impl_addr": "0x10064200", "owner": "CMC_Image", @@ -5490,7 +5391,7 @@ "CMC_Object::flush" ], "case_addr": "0x10067b99", - "id": 12, + "id": 23, "impl": "CMC_Image_Runner::isNear", "impl_addr": "0x10064240", "owner": "CMC_Image", @@ -5513,7 +5414,7 @@ "CMC_Object::flush" ], "case_addr": "0x10067bb0", - "id": 13, + "id": 24, "impl": "CMC_Image_Runner::isInside", "impl_addr": "0x100644c0", "owner": "CMC_Image", @@ -5526,7 +5427,7 @@ "vtbl+0x38" ], "case_addr": "0x10067bc7", - "id": 14, + "id": 26, "impl": "CMC_Image_Runner::monitorCollision", "impl_addr": "0x10064590", "owner": "CMC_Image", @@ -5539,7 +5440,7 @@ "vtbl+0x34" ], "case_addr": "0x10067bde", - "id": 15, + "id": 27, "impl": "CMC_Image_Runner::removeMonitorCollision", "impl_addr": "0x10064620", "owner": "CMC_Image", @@ -5554,7 +5455,7 @@ "CMC_Object::flush" ], "case_addr": "0x10067bf5", - "id": 16, + "id": 32, "impl": "CMC_Image_Runner::setPriority", "impl_addr": "0x10064660", "owner": "CMC_Image", @@ -5577,7 +5478,7 @@ "vtbl+0xd8" ], "case_addr": "0x10067c0c", - "id": 17, + "id": 33, "impl": "CMC_Image_Runner::getAlpha", "impl_addr": "0x100646c0", "owner": "CMC_Image", @@ -5600,7 +5501,7 @@ "CMC_Integer::getValue" ], "case_addr": "0x10067c23", - "id": 18, + "id": 34, "impl": "CMC_Image_Runner::getPixel", "impl_addr": "0x10064880", "owner": "CMC_Image", @@ -5619,7 +5520,7 @@ "CGraphicsObject::mergeAlpha" ], "case_addr": "0x10067c3a", - "id": 19, + "id": 36, "impl": "CMC_Image_Runner::mergeAlpha", "impl_addr": "0x10064a50", "owner": "CMC_Image", @@ -5631,7 +5532,7 @@ "vtbl+0x104" ], "case_addr": "0x10067c68", - "id": 20, + "id": 37, "impl": "CMC_Image_Runner::invalidate", "impl_addr": "0x10064bf0", "owner": "CMC_Image", @@ -5646,7 +5547,7 @@ "CMC_Integer::setValue" ], "case_addr": "0x10067c7f", - "id": 21, + "id": 40, "impl": "CMC_Image_Runner::getCenterX", "impl_addr": "0x10064c10", "owner": "CMC_Image", @@ -5661,7 +5562,7 @@ "CMC_Integer::setValue" ], "case_addr": "0x10067c96", - "id": 22, + "id": 41, "impl": "CMC_Image_Runner::getCenterY", "impl_addr": "0x10064c80", "owner": "CMC_Image", @@ -5674,7 +5575,7 @@ "CMC_Bool::setValue" ], "case_addr": "0x10067cad", - "id": 23, + "id": 48, "impl": "CMC_Image_Runner::isVisible", "impl_addr": "0x10064cf0", "owner": "CMC_Image", @@ -5697,7 +5598,7 @@ "vtbl+0x104" ], "case_addr": "0x10067cc4", - "id": 24, + "id": 49, "impl": "CMC_Image_Runner::link", "impl_addr": "0x10064d30", "owner": "CMC_Image", @@ -5711,7 +5612,7 @@ "CMC_Bool::getValue" ], "case_addr": "0x10067cdb", - "id": 25, + "id": 50, "impl": "CMC_Image_Runner::setAsButton", "impl_addr": "0x10064e80", "owner": "CMC_Image", @@ -5724,7 +5625,7 @@ "CMC_Integer::getValue" ], "case_addr": "0x10067cf2", - "id": 26, + "id": 51, "impl": "CMC_Image_Runner::setOpacity", "impl_addr": "0x10064ee0", "owner": "CMC_Image", @@ -5739,7 +5640,7 @@ "CMC_Object::flush" ], "case_addr": "0x10067d20", - "id": 27, + "id": 52, "impl": "CMC_Image_Runner::save", "impl_addr": "0x10063e70", "owner": "CMC_Image", @@ -5757,7 +5658,7 @@ "MSVCR80.DLL::free" ], "case_addr": "0x10067d37", - "id": 28, + "id": 53, "impl": "CMC_Image_Runner::setAnchor", "impl_addr": "0x10064f60", "owner": "CMC_Image", @@ -5770,7 +5671,7 @@ "vtbl+0x104" ], "case_addr": "0x10067d4e", - "id": 29, + "id": 54, "impl": "CMC_Image_Runner::flipH", "impl_addr": "0x10065590", "owner": "CMC_Image", @@ -5783,7 +5684,7 @@ "vtbl+0x104" ], "case_addr": "0x10067d65", - "id": 30, + "id": 55, "impl": "CMC_Image_Runner::flipV", "impl_addr": "0x100655d0", "owner": "CMC_Image", @@ -5796,7 +5697,7 @@ "vtbl+0x104" ], "case_addr": "0x10067d7c", - "id": 31, + "id": 56, "impl": "CMC_Image_Runner::resetFlip", "impl_addr": "0x10065610", "owner": "CMC_Image", @@ -5813,7 +5714,7 @@ "CGraphicsObject::addObject" ], "case_addr": "0x10067d93", - "id": 32, + "id": 57, "impl": "CMC_Image_Runner::drawOnto", "impl_addr": "0x10065650", "owner": "CMC_Image", @@ -5827,7 +5728,7 @@ "vtbl+0x104" ], "case_addr": "0x10067aca", - "id": 33, + "id": 58, "impl": "CMC_Image_Runner::resetPosition", "impl_addr": "0x10063d30", "owner": "CMC_Image", @@ -5843,7 +5744,7 @@ "CMC_Object::flush" ], "case_addr": "0x10067ab3", - "id": 34, + "id": 59, "impl": "CMC_Image_Runner::setResetPosition", "impl_addr": "0x10063cc0", "owner": "CMC_Image", @@ -5863,7 +5764,7 @@ "CMC_Bool::setValue" ], "case_addr": "0x10067daa", - "id": 35, + "id": 63, "impl": "CMC_Image_Runner::isAt", "impl_addr": "0x100656e0", "owner": "CMC_Image", @@ -5876,7 +5777,7 @@ "CMC_Integer::setValue" ], "case_addr": "0x10067d09", - "id": 36, + "id": 64, "impl": "CMC_Image_Runner::getOpacity", "impl_addr": "0x10064f30", "owner": "CMC_Image", @@ -5898,7 +5799,7 @@ "CMC_ObjectsContainer::getObject" ], "case_addr": "0x10067dc1", - "id": 37, + "id": 65, "impl": "CMC_Image_Runner::getSlideComps", "impl_addr": "0x10065790", "owner": "CMC_Image", @@ -5919,7 +5820,7 @@ "CMC_Integer::CMC_Integer" ], "case_addr": "0x10067dd8", - "id": 38, + "id": 66, "impl": "CMC_Image_Runner::getColorAt", "impl_addr": "0x10065bd0", "owner": "CMC_Image", @@ -5934,7 +5835,7 @@ "CMC_VariableFactory::allocInteger" ], "case_addr": "0x10067def", - "id": 39, + "id": 67, "impl": "CMC_Image_Runner::getColorRAt", "impl_addr": "0x10065d60", "owner": "CMC_Image", @@ -5949,7 +5850,7 @@ "CMC_VariableFactory::allocInteger" ], "case_addr": "0x10067e06", - "id": 40, + "id": 68, "impl": "CMC_Image_Runner::getColorGAt", "impl_addr": "0x10065db0", "owner": "CMC_Image", @@ -5964,7 +5865,7 @@ "CMC_VariableFactory::allocInteger" ], "case_addr": "0x10067e1d", - "id": 41, + "id": 69, "impl": "CMC_Image_Runner::getColorBAt", "impl_addr": "0x10065e00", "owner": "CMC_Image", @@ -5985,7 +5886,7 @@ "CGraphicsObject::mergeAlpha2" ], "case_addr": "0x10067c51", - "id": 42, + "id": 70, "impl": "CMC_Image_Runner::mergeAlpha2", "impl_addr": "0x10064b00", "owner": "CMC_Image", @@ -6006,7 +5907,7 @@ "CMC_Integer::getValue" ], "case_addr": "0x10067e34", - "id": 43, + "id": 71, "impl": "CMC_Image_Runner::replaceColor", "impl_addr": "0x10065e50", "owner": "CMC_Image", @@ -6020,264 +5921,12 @@ "CMC_Integer::setValue" ], "case_addr": "0x10067e4b", - "id": 44, + "id": 72, "impl": "CMC_Image_Runner::getPriority", "impl_addr": "0x10066000", "owner": "CMC_Image", "runner": "CMC_Image_Runner" }, - { - "calls": [], - "case_addr": "0x10067e62", - "id": 45, - "impl": null, - "impl_addr": "0x10067e62", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x2c2c0100", - "id": 46, - "impl": null, - "impl_addr": "0x2c2c0100", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x5040302", - "id": 47, - "impl": null, - "impl_addr": "0x5040302", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x2c2c2c06", - "id": 48, - "impl": null, - "impl_addr": "0x2c2c2c06", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x8072c2c", - "id": 49, - "impl": null, - "impl_addr": "0x8072c2c", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x2c2c0a09", - "id": 50, - "impl": null, - "impl_addr": "0x2c2c0a09", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xc0b2c2c", - "id": 51, - "impl": null, - "impl_addr": "0xc0b2c2c", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x2c0e0d2c", - "id": 52, - "impl": null, - "impl_addr": "0x2c0e0d2c", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xf2c2c2c", - "id": 53, - "impl": null, - "impl_addr": "0xf2c2c2c", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x122c1110", - "id": 54, - "impl": null, - "impl_addr": "0x122c1110", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x142c2c13", - "id": 55, - "impl": null, - "impl_addr": "0x142c2c13", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x2c2c2c15", - "id": 56, - "impl": null, - "impl_addr": "0x2c2c2c15", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x162c2c2c", - "id": 57, - "impl": null, - "impl_addr": "0x162c2c2c", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x1a191817", - "id": 58, - "impl": null, - "impl_addr": "0x1a191817", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x1e1d1c1b", - "id": 59, - "impl": null, - "impl_addr": "0x1e1d1c1b", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x2c21201f", - "id": 60, - "impl": null, - "impl_addr": "0x2c21201f", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x23222c2c", - "id": 61, - "impl": null, - "impl_addr": "0x23222c2c", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x27262524", - "id": 62, - "impl": null, - "impl_addr": "0x27262524", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0x2b2a2928", - "id": 63, - "impl": null, - "impl_addr": "0x2b2a2928", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xcccccccc", - "id": 64, - "impl": null, - "impl_addr": "0xcccccccc", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xcccccccc", - "id": 65, - "impl": null, - "impl_addr": "0xcccccccc", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xcccccccc", - "id": 66, - "impl": null, - "impl_addr": "0xcccccccc", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xcccccccc", - "id": 67, - "impl": null, - "impl_addr": "0xcccccccc", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xcccccccc", - "id": 68, - "impl": null, - "impl_addr": "0xcccccccc", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xcccccccc", - "id": 69, - "impl": null, - "impl_addr": "0xcccccccc", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xcccccccc", - "id": 70, - "impl": null, - "impl_addr": "0xcccccccc", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xcccccccc", - "id": 71, - "impl": null, - "impl_addr": "0xcccccccc", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, - { - "calls": [], - "case_addr": "0xcccccccc", - "id": 72, - "impl": null, - "impl_addr": "0xcccccccc", - "owner": "CMC_Image", - "runner": "CMC_Image_Runner" - }, { "calls": [ "vtbl+0x40", @@ -7329,15 +6978,6 @@ "owner": "CMC_Variable", "runner": "CMC_Variable_Runner" }, - { - "calls": [], - "case_addr": "0x1009e646", - "id": 19, - "impl": null, - "impl_addr": "0x1009e646", - "owner": "CMC_Variable", - "runner": "CMC_Variable_Runner" - }, { "calls": [ "CMC_VariableFactory::allocDouble", @@ -7711,60 +7351,6 @@ "owner": "CMC_Variable", "runner": "CMC_Variable_Runner" }, - { - "calls": [], - "case_addr": "0x1009e646", - "id": 42, - "impl": null, - "impl_addr": "0x1009e646", - "owner": "CMC_Variable", - "runner": "CMC_Variable_Runner" - }, - { - "calls": [], - "case_addr": "0x1009e646", - "id": 43, - "impl": null, - "impl_addr": "0x1009e646", - "owner": "CMC_Variable", - "runner": "CMC_Variable_Runner" - }, - { - "calls": [], - "case_addr": "0x1009e646", - "id": 44, - "impl": null, - "impl_addr": "0x1009e646", - "owner": "CMC_Variable", - "runner": "CMC_Variable_Runner" - }, - { - "calls": [], - "case_addr": "0x1009e646", - "id": 45, - "impl": null, - "impl_addr": "0x1009e646", - "owner": "CMC_Variable", - "runner": "CMC_Variable_Runner" - }, - { - "calls": [], - "case_addr": "0x1009e646", - "id": 46, - "impl": null, - "impl_addr": "0x1009e646", - "owner": "CMC_Variable", - "runner": "CMC_Variable_Runner" - }, - { - "calls": [], - "case_addr": "0x1009e646", - "id": 47, - "impl": null, - "impl_addr": "0x1009e646", - "owner": "CMC_Variable", - "runner": "CMC_Variable_Runner" - }, { "calls": [ "CMC_Object::getType", @@ -8811,60 +8397,6 @@ "owner": "CMC_System", "runner": "CMC_System_Runner" }, - { - "calls": [], - "case_addr": "0x1009502c", - "id": 26, - "impl": null, - "impl_addr": "0x1009502c", - "owner": "CMC_System", - "runner": "CMC_System_Runner" - }, - { - "calls": [], - "case_addr": "0x1009502c", - "id": 27, - "impl": null, - "impl_addr": "0x1009502c", - "owner": "CMC_System", - "runner": "CMC_System_Runner" - }, - { - "calls": [], - "case_addr": "0x1009502c", - "id": 28, - "impl": null, - "impl_addr": "0x1009502c", - "owner": "CMC_System", - "runner": "CMC_System_Runner" - }, - { - "calls": [], - "case_addr": "0x1009502c", - "id": 29, - "impl": null, - "impl_addr": "0x1009502c", - "owner": "CMC_System", - "runner": "CMC_System_Runner" - }, - { - "calls": [], - "case_addr": "0x1009502c", - "id": 30, - "impl": null, - "impl_addr": "0x1009502c", - "owner": "CMC_System", - "runner": "CMC_System_Runner" - }, - { - "calls": [], - "case_addr": "0x1009502c", - "id": 31, - "impl": null, - "impl_addr": "0x1009502c", - "owner": "CMC_System", - "runner": "CMC_System_Runner" - }, { "calls": [ "MSVCR80.DLL::malloc", @@ -9240,60 +8772,6 @@ "owner": "CMC_Array", "runner": "CMC_Array_Runner" }, - { - "calls": [], - "case_addr": "0x1003ff76", - "id": 26, - "impl": null, - "impl_addr": "0x1003ff76", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x1003ff76", - "id": 27, - "impl": null, - "impl_addr": "0x1003ff76", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x1003ff76", - "id": 28, - "impl": null, - "impl_addr": "0x1003ff76", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x1003ff76", - "id": 29, - "impl": null, - "impl_addr": "0x1003ff76", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x1003ff76", - "id": 30, - "impl": null, - "impl_addr": "0x1003ff76", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, - { - "calls": [], - "case_addr": "0x1003ff76", - "id": 31, - "impl": null, - "impl_addr": "0x1003ff76", - "owner": "CMC_Array", - "runner": "CMC_Array_Runner" - }, { "calls": [ "vtbl+0x40",