Check for non-matching functions that now match

This commit is contained in:
Léo Lam
2020-10-04 22:05:40 +02:00
parent 74dd6944d4
commit f19d229fa4
3 changed files with 35 additions and 17 deletions
+4 -4
View File
@@ -485,7 +485,7 @@
0x000000710001257c,nullsub_45,4,
0x0000007100012580,_ZNK4sead15RuntimeTypeInfo6DeriveINS_13TaskParameterEE9isDerivedEPKNS0_9InterfaceE,140,
0x000000710001260c,j__ZdlPv_6,4,
0x0000007100012610,_ZNK4sead14SafeStringBaseIcE9findIndexERKS1_,468,_ZNK4sead14SafeStringBaseIcE9findIndexERKS1_?
0x0000007100012610,_ZNK4sead14SafeStringBaseIcE9findIndexERKS1_,468,_ZNK4sead14SafeStringBaseIcE9findIndexERKS1_
0x00000071000127e4,_ZN4sead18Matrix34CalcCommonIfE7inverseERNS_9BaseMtx34IfEERKS3_,336,
0x0000007100012934,j__ZdlPv_7,4,
0x0000007100012938,_ZN4sead19FixedSafeStringBaseIcLi80EEaSERKNS_14SafeStringBaseIcEE,240,
@@ -6542,7 +6542,7 @@
0x000000710011d8d8,AI_Action_EventOpenMessageTips::init,8,
0x000000710011d8e0,AI_Action_EventOpenMessageTips::enter,32,
0x000000710011d900,AI_Action_EventOpenMessageTips::calc,604,
0x000000710011db5c,_ZNK4sead14SafeStringBaseIcE10rfindIndexERKS1_,460,_ZNK4sead14SafeStringBaseIcE10rfindIndexERKS1_?
0x000000710011db5c,_ZNK4sead14SafeStringBaseIcE10rfindIndexERKS1_,460,_ZNK4sead14SafeStringBaseIcE10rfindIndexERKS1_
0x000000710011dd28,AI_Action_EventOpenMessageTips::leave,4,
0x000000710011dd2c,AI_Action_EventOpenMessageTips::loadParams,164,
0x000000710011ddd0,AI_Action_EventOpenMessageTips::rtti1,288,
@@ -62225,8 +62225,8 @@
0x0000007100b19370,_ZN4sead14DelegateThread5calc_El,32,_ZN4sead14DelegateThread5calc_El
0x0000007100b19390,_ZN4sead13ReadWriteLockC2Ev,84,_ZN4sead13ReadWriteLockC1Ev
0x0000007100b193e4,sead::ReadWriteLock::dtor,40,_ZN4sead13ReadWriteLockD1Ev
0x0000007100b1940c,_ZN4sead13ReadWriteLock8readLockEv,168,_ZN4sead13ReadWriteLock8readLockEv?
0x0000007100b194b4,_ZN4sead13ReadWriteLock10readUnlockEv,64,_ZN4sead13ReadWriteLock10readUnlockEv?
0x0000007100b1940c,_ZN4sead13ReadWriteLock8readLockEv,168,_ZN4sead13ReadWriteLock8readLockEv
0x0000007100b194b4,_ZN4sead13ReadWriteLock10readUnlockEv,64,_ZN4sead13ReadWriteLock10readUnlockEv
0x0000007100b194f4,_ZN4sead13ReadWriteLock9writeLockEv,168,_ZN4sead13ReadWriteLock9writeLockEv
0x0000007100b1959c,_ZN4sead13ReadWriteLock11writeUnlockEv,200,_ZN4sead13ReadWriteLock11writeUnlockEv?
0x0000007100b19664,sead::SpinLock::ctor,12,_ZN4sead8SpinLockC1Ev
Can't render this file because it is too large.
+14 -7
View File
@@ -50,14 +50,10 @@ def check_function(addr: int, size: int, name: str) -> bool:
try:
base_fn = get_fn_from_base_elf(addr, size)
except KeyError:
utils.print_error(f"couldn't find base function 0x{addr:016x} for {name}")
utils.print_error(f"couldn't find base function 0x{addr:016x} for {utils.format_symbol_name_for_msg(name)}")
return False
try:
my_fn = get_fn_from_my_elf(name, size)
except KeyError:
utils.warn(f"couldn't find decompiled function {name}")
return True
my_fn = get_fn_from_my_elf(name, size)
md = cs.Cs(cs.CS_ARCH_ARM64, cs.CS_MODE_ARM)
md.detail = True
@@ -133,10 +129,21 @@ def main() -> None:
if not func.decomp_name:
continue
try:
get_fn_from_my_elf(func.decomp_name, 0)
except KeyError:
utils.warn(f"couldn't find {utils.format_symbol_name_for_msg(func.decomp_name)}")
continue
if func.status == utils.FunctionStatus.Matching:
if not check_function(func.addr, func.size, func.decomp_name):
utils.print_error(f"{func.decomp_name} was marked as matching but does not match")
utils.print_error(
f"function {utils.format_symbol_name_for_msg(func.decomp_name)} is marked as matching but does not match")
failed = True
elif func.status == utils.FunctionStatus.Equivalent or func.status == utils.FunctionStatus.NonMatching:
if check_function(func.addr, func.size, func.decomp_name):
utils.print_note(
f"function {utils.format_symbol_name_for_msg(func.decomp_name)} is marked as non-matching but matches")
if failed:
sys.exit(1)
+17 -6
View File
@@ -60,18 +60,29 @@ def format_symbol_name(name: str) -> str:
return name
def format_symbol_name_for_msg(name: str) -> str:
try:
return f"{Fore.BLUE}{cxxfilt.demangle(name)}{Fore.RESET} {Style.DIM}({name}){Style.RESET_ALL}{Style.BRIGHT}"
except:
return name
def are_demangled_names_equal(name1: str, name2: str):
return cxxfilt.demangle(name1) == cxxfilt.demangle(name2)
def warn(msg: str):
sys.stderr.write(f"{Fore.MAGENTA}{Style.BRIGHT}warning:{Fore.RESET} {msg}{Style.RESET_ALL}\n")
def print_note(msg: str, prefix: str = ""):
sys.stderr.write(f"{Style.BRIGHT}{prefix}{Fore.CYAN}note:{Fore.RESET} {msg}{Style.RESET_ALL}\n")
def print_error(msg: str):
sys.stderr.write(f"{Fore.RED}{Style.BRIGHT}error:{Fore.RESET} {msg}{Style.RESET_ALL}\n")
def warn(msg: str, prefix: str = ""):
sys.stderr.write(f"{Style.BRIGHT}{prefix}{Fore.MAGENTA}warning:{Fore.RESET} {msg}{Style.RESET_ALL}\n")
def fail(msg: str):
print_error(msg)
def print_error(msg: str, prefix: str = ""):
sys.stderr.write(f"{Style.BRIGHT}{prefix}{Fore.RED}error:{Fore.RESET} {msg}{Style.RESET_ALL}\n")
def fail(msg: str, prefix: str = ""):
print_error(msg, prefix)
sys.exit(1)