tools: Fix base action classes being ignored by the function matcher

This commit is contained in:
Léo Lam 2020-12-28 17:18:13 +01:00
parent 76e5987423
commit 1b89dc7024
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
2 changed files with 849 additions and 845 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,16 +6,16 @@ import oead
from colorama import Fore
import cxxfilt
from pathlib import Path
from typing import Dict
from typing import Dict, Iterable
import util.checker
import util.elf
from util import utils
from util import utils, ai_common
def identify(functions: Dict[str, utils.FunctionInfo], checker: util.checker.FunctionChecker,
new_matches: Dict[int, str], aidef, aidef_key: str, get_pairs) -> None:
for name, data in aidef[aidef_key].items():
new_matches: Dict[int, str], class_names: Iterable[str], get_pairs) -> None:
for name in class_names:
orig_name = name
name = name[0].upper() + name[1:]
@ -73,9 +73,12 @@ def main() -> None:
def add_pair(x):
pairs.append((x, x))
prefix = f"AI_Action_{orig_name}::"
pairs.append(
(f"{prefix}ctor", f"_ZN5uking6action{len(name)}{name}C1ERKN4ksys3act2ai10ActionBase7InitArgE"))
(f"AI_Action_{orig_name}::ctor",
f"_ZN5uking6action{len(name)}{name}C1ERKN4ksys3act2ai10ActionBase7InitArgE"))
pairs.append(
(f"AI_Action{orig_name}::ctor",
f"_ZN5uking6action{len(name)}{name}C1ERKN4ksys3act2ai10ActionBase7InitArgE"))
pairs.append((f"AI_F_Action_{orig_name}",
f"_ZN4ksys3act2ai13ActionFactory4makeIN5uking6action{len(name)}{name}EEEPNS1_6ActionERKNS1_10ActionBase7InitArgEPN4sead4HeapE"))
add_pair(f"_ZN5uking6action{len(name)}{name}D1Ev")
@ -91,9 +94,10 @@ def main() -> None:
return pairs
if type_ == "Action":
identify(functions, checker, new_matches, aidef, "Actions", get_action_pairs)
action_vtable_names = ai_common.get_action_vtable_names()
identify(functions, checker, new_matches, action_vtable_names.values(), get_action_pairs)
elif type_ == "Query":
identify(functions, checker, new_matches, aidef, "Querys", get_query_pairs)
identify(functions, checker, new_matches, aidef["Querys"].keys(), get_query_pairs)
utils.add_decompiled_functions(new_matches)