From 0a16b78855e49ef3f92a25e58f77be317b9270ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Tue, 10 Nov 2020 18:48:52 +0100 Subject: [PATCH] data: Add functions that were missed because of IDA's function tail system --- data/uking_functions.csv | 15 +++++++++++++- tools/add_missing_functions.py | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100755 tools/add_missing_functions.py diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 2dcc60a7..6daff4ed 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -51021,6 +51021,7 @@ 0x0000007100852a7c,sub_7100852A7C,36, 0x0000007100852aa0,Player::RideInfo::ctor,240, 0x0000007100852b90,Player::RideInfo::init,152, +0x0000007100852c28,Player::RideInfo::x_0,44, 0x0000007100852c54,sub_7100852C54,128, 0x0000007100852cd4,sub_7100852CD4,136, 0x0000007100852d5c,demo005_205_andHorseRideStuff,1056, @@ -52417,10 +52418,12 @@ 0x00000071008e4098,getFlag_100enemy_Activated,168,_ZN4ksys3gdt26getFlag_100enemy_ActivatedEb 0x00000071008e4140,getBoolFlag,168,_ZN4ksys3gdt18getFlagGenericBoolENS0_10FlagHandleEb 0x00000071008e41e8,getIntFlag,168,_ZN4ksys3gdt17getFlagGenericS32ENS0_10FlagHandleEb +0x00000071008e4290,gdt::resetS32,276, 0x00000071008e43a4,getFlag_100enemy_IsPlayNow_ActivatedDemo,172,_ZN4ksys3gdt40getFlag_100enemy_IsPlayNow_ActivatedDemoEb 0x00000071008e4450,sub_71008E4450,172,_ZN4ksys3gdt45getFlag_100enemy_KillMasterSwordBaseAttentionEb 0x00000071008e44fc,sub_71008E44FC,180,_ZN4ksys3gdt45setFlag_100enemy_KillMasterSwordBaseAttentionEbb 0x00000071008e45b0,getFlag_100enemy_SwordPower_StartTmp,172,_ZN4ksys3gdt36getFlag_100enemy_SwordPower_StartTmpEb +0x00000071008e465c,sub_71008E465C,276, 0x00000071008e4770,getFlag_ActorName_SeakSensor_Slot0,152,_ZN4ksys3gdt34getFlag_ActorName_SeakSensor_Slot0EPPKcb 0x00000071008e4808,setFlag_ActorName_SeakSensor_Slot0,212,_ZN4ksys3gdt34setFlag_ActorName_SeakSensor_Slot0ERKN4sead14SafeStringBaseIcEEb 0x00000071008e48dc,resetFlagMaybe_ActorName_SeakSensor_Slot0,24, @@ -52512,6 +52515,7 @@ 0x00000071008e8ae8,sub_71008E8AE8,172,_ZN4ksys3gdt29getFlag_Counter_TerminalWaterEb 0x00000071008e8b94,sub_71008E8B94,172,_ZN4ksys3gdt28getFlag_Counter_TerminalWindEb 0x00000071008e8c40,getFlag_CurrentHart,172,_ZN4ksys3gdt19getFlag_CurrentHartEb +0x00000071008e8cec,sub_71008E8CEC,180, 0x00000071008e8da0,sub_71008E8DA0,172,_ZN4ksys3gdt19getFlag_CurrentMamoEb 0x00000071008e8e4c,sub_71008E8E4C,172, 0x00000071008e8ef8,getFlag_CurrentRupee,172,_ZN4ksys3gdt20getFlag_CurrentRupeeEb @@ -61410,6 +61414,8 @@ 0x0000007100af47a4,sub_7100AF47A4,8,_ZNK4sead10FileDevice24setHandleBaseFileDevice_EPNS_10HandleBaseEPS0_ 0x0000007100af47ac,_ZN4sead10FileDevice8tryFlushEPNS_10FileHandleE,100,_ZN4sead10FileDevice8tryFlushEPNS_10FileHandleE 0x0000007100af4810,_ZN4sead10FileDevice9tryRemoveERKNS_14SafeStringBaseIcEE,28,_ZN4sead10FileDevice9tryRemoveERKNS_14SafeStringBaseIcEE +0x0000007100af482c,sub_7100AF482C,128, +0x0000007100af48ac,sub_7100AF48AC,128, 0x0000007100af492c,_ZN4sead10FileDevice14tryGetFileSizeEPjRKNS_14SafeStringBaseIcEE,32,_ZN4sead10FileDevice14tryGetFileSizeEPjRKNS_14SafeStringBaseIcEE 0x0000007100af494c,_ZN4sead10FileDevice16tryOpenDirectoryEPNS_15DirectoryHandleERKNS_14SafeStringBaseIcEE,80,_ZN4sead10FileDevice16tryOpenDirectoryEPNS_15DirectoryHandleERKNS_14SafeStringBaseIcEE 0x0000007100af499c,_ZN4sead10FileDevice17tryCloseDirectoryEPNS_15DirectoryHandleE,112,_ZN4sead10FileDevice17tryCloseDirectoryEPNS_15DirectoryHandleE @@ -81014,6 +81020,7 @@ 0x0000007100f8af0c,sub_7100F8AF0C,324, 0x0000007100f8b050,sub_7100F8B050,740, 0x0000007100f8b334,sub_7100F8B334,272, +0x0000007100f8b444,NavMeshLoadMgr::x_2,144, 0x0000007100f8b4d8,sub_7100F8B4D8,64, 0x0000007100f8b518,sub_7100F8B518,32, 0x0000007100f8b538,sub_7100F8B538,76, @@ -85872,6 +85879,7 @@ 0x0000007101099890,sub_7101099890,8,_ZThn632_NK4ksys3res4Drop10needsParseEv 0x0000007101099898,sub_7101099898,128,_ZThn664_N4ksys3res4DropD1Ev 0x0000007101099918,sub_7101099918,116,_ZThn664_N4ksys3res4DropD0Ev +0x000000710109998c,sub_710109998C,372, 0x0000007101099b00,nullsub_4471,4,_ZN4ksys3res13LifeCondition9doCreate_EPhjPN4sead4HeapE 0x0000007101099b04,nullsub_4472,4,_ZThn632_N4ksys3res13LifeCondition9doCreate_EPhjPN4sead4HeapE 0x0000007101099b08,Blifecondition::parse,1296,_ZN4ksys3res13LifeCondition6parse_EPhmPN4sead4HeapE @@ -88526,6 +88534,7 @@ 0x000000710115d3b8,sub_710115D3B8,236, 0x000000710115d4a4,sub_710115D4A4,184, 0x000000710115d55c,_ZN3aal8ShapeMgr25createAndRegisterTemplateERKN4sead14SafeStringBaseIcEERKNS_10ShapeParamEPNS1_4HeapE,324, +0x000000710115d6a0,sub_710115D6A0,1100, 0x000000710115daec,sub_710115DAEC,1244, 0x000000710115dfc8,sub_710115DFC8,372, 0x000000710115e13c,sub_710115E13C,152, @@ -90492,8 +90501,8 @@ 0x00000071011f6b24,sub_71011F6B24,8,_ZNK4ksys4util10TaskThread17getNumActiveTasksEv 0x00000071011f6b2c,Thread::z,8,_ZN4ksys4util10TaskThread19waitForQueueToEmptyEv 0x00000071011f6b34,Thread::x,8,_ZN4ksys4util10TaskThread11cancelTasksEh -0x00000071011f6b44,sub_71011F6B44,8,_ZN4ksys4util10TaskThread4lockEPNS0_13TaskQueueLockE 0x00000071011f6b3c,_ZN4ksys4util10TaskThread10clearQueueEv,8,_ZN4ksys4util10TaskThread10clearQueueEv +0x00000071011f6b44,sub_71011F6B44,8,_ZN4ksys4util10TaskThread4lockEPNS0_13TaskQueueLockE 0x00000071011f6b4c,Thread::peekMessage,64,_ZNK4ksys4util10TaskThread33isActiveAndReceivedQueueUpdateMsgEv 0x00000071011f6b8c,Thread::y,12,_ZNK4ksys4util10TaskThread8isPausedEv 0x00000071011f6b98,Thread::peekIs1,36,_ZNK4ksys4util10TaskThread23receivedQueueUpdatedMsgEv @@ -90948,6 +90957,7 @@ 0x0000007101209114,res::ResourceMgrTask::copyExtensionAndRemoveS,292, 0x0000007101209238,res::ResourceMgrTask::submitLoadForSyncRequest,2240, 0x0000007101209b08,res::ResourceMgrTask::submitUnloadRequest,332, +0x0000007101209c54,res::ResourceMgrTask::requestUnloadForSync,388, 0x0000007101209dd8,res::ResourceMgrTask::a,128,_ZN4ksys3res15ResourceMgrTask12registerUnitEPNS0_12ResourceUnitE 0x0000007101209e58,res::ResourceMgrTask::b,128,_ZN4ksys3res15ResourceMgrTask14deregisterUnitEPNS0_12ResourceUnitE 0x0000007101209ed8,res::ResourceMgrTask::clearCache,464,_ZN4ksys3res15ResourceMgrTask17requestClearCacheEPPNS0_12ResourceUnitEPNS_4util4TaskE @@ -91063,8 +91073,10 @@ 0x0000007101210994,ResourceBinder::f,240, 0x0000007101210a84,ResourceBinder::readFilePathAndMakeHeapAndPrepareLoadIfArchive,664, 0x0000007101210d1c,ResourceBinder::prepareLoad,3548, +0x0000007101211af8,ResourceBinder::requestPrepareLoad,256, 0x0000007101211bf8,ResourceBinder::e,272, 0x0000007101211e78,ResourceBinder::h,120, +0x0000007101212060,ResourceBinder::unload,1856, 0x00000071012127a0,ResourceBinder::clearCacheUnloadDestroyDev,976, 0x0000007101212d74,res::clearCacheAndDeleteUnit,456, 0x0000007101212ff8,ResourceBinder::rtti1,112,_ZNK4ksys3res12ResourceUnit27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE @@ -93295,6 +93307,7 @@ 0x00000071012bd668,sub_71012BD668,52, 0x00000071012bd69c,sub_71012BD69C,32, 0x00000071012bd6bc,sub_71012BD6BC,128, +0x00000071012bd73c,sub_71012BD73C,84, 0x00000071012bd790,sub_71012BD790,92, 0x00000071012bd7ec,sub_71012BD7EC,196, 0x00000071012bd8b0,sub_71012BD8B0,352, diff --git a/tools/add_missing_functions.py b/tools/add_missing_functions.py new file mode 100755 index 00000000..f07384fa --- /dev/null +++ b/tools/add_missing_functions.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +import argparse +import csv +import sys +from pathlib import Path +from typing import Set, List + +from util import utils + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("csv_path", help="Path to function CSV to merge") + args = parser.parse_args() + + csv_path = Path(args.csv_path) + + known_fn_addrs: Set[int] = {func.addr for func in utils.get_functions()} + new_fns: List[utils.FunctionInfo] = [] + for func in utils.get_functions(csv_path): + if func.addr not in known_fn_addrs: + new_fns.append(func) + + new_fn_list: List[utils.FunctionInfo] = [] + new_fn_list.extend(utils.get_functions()) + new_fn_list.extend(new_fns) + new_fn_list.sort(key=lambda func: func.addr) + + # Output the modified function CSV. + writer = csv.writer(sys.stdout, lineterminator="\n") + for func in new_fn_list: + writer.writerow(func.raw_row) + + +if __name__ == "__main__": + main()