Harden dispatch switch parsing (id-gap drobiazgi)

Resolves the method-id gaps surfaced by the dispatch axis, all real switch-shape
edge cases rather than numbering bugs:

- default holes: ids the runner doesn't implement route to the `JA default` block
  (tail-call to base CMC_Runner::run); capture that target and drop those cases
  (was emitting false Sound 5/6, Scene 10-15, Array 26-31)
- sign-extension: high-base switches (CMC_NetPeer id 257+) encode the base as
  `LEA/ADD idx, 0xFFFFFEFF` (-257); _s32 sign-extends on both the scalar and the
  text path (Ghidra prints big displacements unsigned, small ones signed)
- two-level (byte-indexed) switches: sparse runners (Image) use
  `MOVZX r,byte[i+byteTable]` (MSVC8) / `MOV rl,byte[i+byteTable]` (MSVC6) then
  `JMP [r*4+ptrTable]`; decode target = ptrTable[byteTable[i]], taking base/count
  from the byte-table's index register (differs from the JMP index reg on MSVC6)
- _executable() guard + id clamp: never emit a non-code "case"

Result: Piklib 500 rows / BlooMoo 561, garbage 0, dispatch<->methods consistent.
The lone genuinely-nameless method is CMC_Animo id 14 (a bool getter prepareMthHashSet
doesn't register) - a real engine property, correctly absent from the methods axis.

FUN_ ctor names are not recoverable (no symbols/mangled strings/RTTI in the binary
for FILTER/MOVIE/VECTOR/PATH/FIFO/LIFO/STATICFILTER); cpp_class=None stays.

Snapshots regenerated; 34/34 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Patryk Gensch
2026-05-31 16:56:24 +02:00
parent b0d3d22445
commit be733cf8b7
3 changed files with 773 additions and 728 deletions

View File

@@ -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 [<boundsreg> + <tableaddr>]`. 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,
})

View File

@@ -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",

View File

@@ -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",