From 0d8380a6a520dce368ab7cabcd735f76d90d8b9c Mon Sep 17 00:00:00 2001 From: superp00t Date: Tue, 15 Apr 2025 20:44:29 -0400 Subject: [PATCH] feat(profile): more symbols --- .../ida/batch/import_data_types.idc | 16 + .../ida/batch/import_functions.idc | 2 +- .../ida/batch/import_symbols.idc | 28 +- .../include/common/instance.h | 5 + .../include/event/context.h | 16 +- .../3.3.5a-windows-386/include/event/thread.h | 25 ++ profile/3.3.5a-windows-386/include/main.h | 1 + .../3.3.5a-windows-386/include/storm/queue.h | 6 +- .../3.3.5a-windows-386/include/storm/thread.h | 2 +- .../3.3.5a-windows-386/symbol/client/func.sym | 5 +- .../3.3.5a-windows-386/symbol/event/func.sym | 10 +- .../3.3.5a-windows-386/symbol/event/label.sym | 10 + .../3.3.5a-windows-386/symbol/lock/func.sym | 2 - profile/3.3.5a-windows-386/symbol/main.sym | 32 +- profile/3.3.5a-windows-386/symbol/os/func.sym | 1 + .../3.3.5a-windows-386/symbol/storm/func.sym | 3 + .../3.3.5a-windows-386/symbol/storm/label.sym | 1 + profile/3.3.5a-windows-386/x64dbg/game.dd32 | Bin 131001 -> 131616 bytes profile/3.3.5a-windows-386/x64dbg/types.json | 291 +++++++++++++----- 19 files changed, 355 insertions(+), 101 deletions(-) create mode 100644 profile/3.3.5a-windows-386/include/event/thread.h delete mode 100644 profile/3.3.5a-windows-386/symbol/lock/func.sym diff --git a/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc b/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc index cddf25a..7d452be 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc @@ -5,6 +5,7 @@ static import_data_types() { apply_type(0x00401010, "void* __stdcall func(uint32_t count)"); apply_type(0x00401030, "void __stdcall func(void* ptr)"); apply_type(0x00401050, "CDataStore* __thiscall func(CDataStore* this)"); + apply_type(0x004033B0, "void __stdcall ClientKillTimer(uint32_t timerId, void* handlerAddress, char* handlerName)"); apply_type(0x00403600, "void __stdcall func(char* manifest@)"); apply_type(0x00408070, "void __stdcall func(float* minX, float* maxX, float* minY, float* maxY, float* minZ, float* maxZ)"); apply_type(0x00409670, "void __thiscall func(CGxDevice* this)"); @@ -87,6 +88,11 @@ static import_data_types() { apply_type(0x0047B700, "char* __stdcall func(CMDOPT)"); apply_type(0x0047B720, "int32_t __stdcall func()"); apply_type(0x0047B9E0, "int __stdcall func(char* dst, uint32_t dstMaxChars, uint16_t* src, uint32_t srcMaxChars, uint32_t* dstChars, uint32_t* srcChars)"); + apply_type(0x0047D0E0, "EvtContext* __thiscall func(TInstanceIdTable_EvtContext* this, uint32_t id, int32_t lockMode, int32_t* findMask)"); + apply_type(0x0047D620, "void __stdcall func(uint32_t timerId, void* handlerFunction, char* functionName)"); + apply_type(0x0047E2F0, "void __usercall func(EvtContext* context@)"); + apply_type(0x0047E5A0, "EvtContext* __usercall func@(uint32_t hThread@)"); + apply_type(0x0047ED30, "void __stdcall func(uint32_t hThread, EvtContext* context)"); apply_type(0x004804F0, "void __cdecl func(EvtContext* context, EVENTID id, void* handler, void* param, float priority)"); apply_type(0x004806A0, "int32_t __cdecl func(EvtContext* context, EVENTID id, void *data, size_t bytes)"); apply_type(0x00482C20, "void __thiscall func(CSimpleRegion* this)"); @@ -537,11 +543,14 @@ static import_data_types() { apply_type(0x009E5398, "uint8_t[256]"); apply_type(0x009E5630, "Blizzard__File__FileInfo"); apply_type(0x009E9EC8, "uint32_t[7]"); + apply_type(0x009EA04C, "TInstanceId_EvtContext__v_table"); apply_type(0x00A2DDC0, "CGxDevice__vtable"); apply_type(0x00AB6350, "WowClientDB_Startup_StringsRec"); apply_type(0x00AB90AC, "Blizzard__File__Filesystem*"); apply_type(0x00AB91C0, "Blizzard__File__Filesystem"); apply_type(0x00AB92C0, "Blizzard__File__Filesystem"); + apply_type(0x00AC0DC0, "int32_t"); + apply_type(0x00AC0DC4, "TSList_EvtThread"); apply_type(0x00AC1B9C, "TSExplicitList_CILayer"); apply_type(0x00AD2808, "char*[53]"); apply_type(0x00AD305C, "WowClientDB_AchievementRec"); @@ -808,8 +817,15 @@ static import_data_types() { apply_type(0x00B38181, "bool"); apply_type(0x00B38A5C, "Blizzard__Lock__DoOnceData"); apply_type(0x00B38A64, "Blizzard__Lock__DoOnceData"); + apply_type(0x00B41670, "TInstanceIdTable_EvtContext"); apply_type(0x00B417C8, "uint32_t"); + apply_type(0x00B417CC, "int32_t"); apply_type(0x00B417D0, "int32_t"); + apply_type(0x00B417D4, "int32_t"); + apply_type(0x00B417D8, "EvtThread**"); + apply_type(0x00B417DC, "SCritSect*"); + apply_type(0x00B417E8, "SCritSect"); + apply_type(0x00B41824, "SEvent"); apply_type(0x00B41850, "CDataRecycler"); apply_type(0x00B6A9DC, "MipBits*"); apply_type(0x00BD08F0, "CVar*"); diff --git a/profile/3.3.5a-windows-386/ida/batch/import_functions.idc b/profile/3.3.5a-windows-386/ida/batch/import_functions.idc index 3cce1b9..6381eaf 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_functions.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_functions.idc @@ -13,7 +13,6 @@ static import_functions() { set_func_cmt(0x004038A0, "CDataStore::~CDataStore()", 0); set_func_cmt(0x00405A10, "int __cdecl PatchFiles::EnumPatchArchives(OS_FILE_DATA *fileData, PatchOnDemand__Cache *cbParam)", 0); set_func_cmt(0x00405AB0, "int __thiscall PatchFiles::LoadArchives(PatchFiles *this, const char *localeCode, char a3)", 0); - set_func_cmt(0x004066D0, "00005400C", 0); set_func_cmt(0x00427130, "Blizzard::File::Delete(char const*)", 0); set_func_cmt(0x00427500, "Blizzard::File::MakeAbsolutePath(char const*, char*, int, bool)", 0); set_func_cmt(0x00427560, "Blizzard::File::Move(char const*, char const*)", 0); @@ -151,6 +150,7 @@ static import_functions() { set_func_cmt(0x0081B5F0, "FrameScript_CreateEvents(char const**, unsigned int)", 0); set_func_cmt(0x0086B9A0, "OsGetProcessorFeaturesEx(int&)", 0); set_func_cmt(0x0086BBA0, "Invented name", 0); + set_func_cmt(0x0086F5F0, "00005410", 0); set_func_cmt(0x008A1420, "known names: System_File::Shutdown, CVGxVideoOptionsVersionCallback", 0); set_func_cmt(0x008E5250, "Script_ToggleTris", 0); set_func_cmt(0x0095D110, "CDataAllocator::GetData(int, char const*, int)", 0); diff --git a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc index bc70e54..52664cb 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc @@ -21,10 +21,11 @@ static import_symbols() { set_name(0x00403600, "StartupStreaming"); set_name(0x004038A0, "CDataStore__destructor"); set_name(0x00404130, "WowClientInit"); + set_name(0x004047E0, "InitializeEngineCallback"); set_name(0x004052F0, "WowClientDB_StartupStringsRec__Load"); set_name(0x00405A10, "PatchFiles__EnumPatchArchives"); set_name(0x00405AB0, "PatchFiles__LoadArchives"); - set_name(0x004066D0, "DestroyHandlerPlayer"); + set_name(0x004066D0, "DestroyEngineCallback"); set_name(0x004067F0, "InitializeGlobal"); set_name(0x00406B70, "DestroyGlobal"); set_name(0x00406C70, "CommonMain"); @@ -234,7 +235,7 @@ static import_symbols() { set_name(0x0047D030, "EventDestroy"); set_name(0x0047D080, "EventCreateContextEx"); set_name(0x0047D090, "EventSetConfirmCloseCallback"); - set_name(0x0047D0E0, "CSRWLock__Enter"); + set_name(0x0047D0E0, "TInstanceIdTable_EvtContext__Ptr"); set_name(0x0047D1D0, "EventIsButtonDown"); set_name(0x0047D230, "EventIsKeyDown"); set_name(0x0047D290, "EventPostCloseEx"); @@ -248,18 +249,24 @@ static import_symbols() { set_name(0x0047D770, "EventRegister"); set_name(0x0047D790, "EventUnregister"); set_name(0x0047D990, "IEvtSchedulerShutdown"); + set_name(0x0047DB40, "SynthesizeInitialize"); set_name(0x0047DBC0, "SynthesizeIdle"); set_name(0x0047DC20, "SynthesizePoll"); set_name(0x0047DC50, "SynthesizePaint"); set_name(0x0047DCA0, "EventForceIdleProcessing"); set_name(0x0047DEA0, "IEvtSchedulerDestroy"); + set_name(0x0047E2F0, "SynthesizeDestroy"); + set_name(0x0047E5A0, "GetNextContext"); set_name(0x0047E910, "InitializeSchedulerThread"); set_name(0x0047EC10, "AttachContextToThread"); + set_name(0x0047ED30, "DetachContextFromThread"); set_name(0x0047EFF0, "SchedulerThreadProcProcess"); set_name(0x0047F230, "SchedulerThreadProc"); set_name(0x0047F2D0, "EventDoMessageLoop"); set_name(0x0047F2F0, "IEvtSchedulerInitialize"); set_name(0x0047F5C0, "IEvtSchedulerCreateContext"); + set_name(0x0047F6C0, "TInstanceId_EvtContext__destructor"); + set_name(0x0047F920, "TInstanceId_EvtContext__scalar_deleting_destructor"); set_name(0x0047FAC0, "PostMouseModeChanged"); set_name(0x0047FB80, "IEvtInputDestroy"); set_name(0x0047FBA0, "IEvtInputInitialize"); @@ -3078,6 +3085,8 @@ static import_symbols() { set_name(0x0076F7E0, "SStrStrUTF8I"); set_name(0x0076F9E0, "SStrDupA"); set_name(0x0076FB80, "SStrToFloat"); + set_name(0x0076FDD0, "SGetCurrentThreadPriority"); + set_name(0x0076FDE0, "SSetCurrentThreadPriority"); set_name(0x0076FE00, "SSetCurrentProcessAffinityMask"); set_name(0x007703A0, "ILoadValue"); set_name(0x00770490, "InternalLoadEntry"); @@ -3103,10 +3112,11 @@ static import_symbols() { set_name(0x00774630, "SCritSect__destructor"); set_name(0x00774640, "SCritSect__Enter"); set_name(0x00774650, "SCritSect__Leave"); - set_name(0x00774660, "CSRWLock__Leave"); + set_name(0x00774660, "TInstanceIdTable_EvtContext__Unlock"); set_name(0x00774690, "SSyncObject__Wait"); set_name(0x00774720, "SEvent__Set"); set_name(0x00774730, "SEvent__Reset"); + set_name(0x00774740, "SThread__Create"); set_name(0x007750D0, "PathGetRootChars"); set_name(0x00775140, "FlushLog"); set_name(0x00775190, "LockLog"); @@ -3317,6 +3327,7 @@ static import_symbols() { set_name(0x0086D6D0, "OsTlsGetValue"); set_name(0x0086E200, "TSExplicitList_CGxBuf__LinkToTail"); set_name(0x0086F5A0, "OsCallSetContext"); + set_name(0x0086F5F0, "OsCallResetContext"); set_name(0x0086F760, "OsCallInitialize"); set_name(0x0086F880, "OsCallInitializeContext"); set_name(0x00872280, "OsClipboardGetString"); @@ -3560,6 +3571,7 @@ static import_symbols() { set_name(0x009E5398, "bytesFromUTF8"); set_name(0x009E5630, "s_noinfo"); set_name(0x009E9EC8, "firstByteMark@2"); + set_name(0x009EA04C, "TInstanceId_EvtContext__v_table"); set_name(0x009F1074, "s_pixelFormatToMipBitsCache"); set_name(0x00A2DDC0, "CGxDevice__vtable"); set_name(0x00A2E198, "CGxDeviceOpenGl__vtable"); @@ -3571,6 +3583,8 @@ static import_symbols() { set_name(0x00AB91B4, "System_File__write_func"); set_name(0x00AB91C0, "System_File__Stacked__s_nullstack"); set_name(0x00AB92C0, "System_File__Stacked__s_basestack"); + set_name(0x00AC0DC0, "s_threadListContention"); + set_name(0x00AC0DC4, "s_threadList"); set_name(0x00AC1B9C, "s_zorderlist"); set_name(0x00AC3DA4, "ClientServices__m_loginState"); set_name(0x00AC80A8, "CGGameUI__m_visible"); @@ -3841,8 +3855,16 @@ static import_symbols() { set_name(0x00B38A5C, "System_File__s_read_init"); set_name(0x00B38A64, "System_File__s_write_init"); set_name(0x00B38A88, "OsFileGetDownloadFolder__s_downloadfolder"); + set_name(0x00B41670, "TSingletonInstanceId_EvtContext__s_idTable"); set_name(0x00B417C8, "s_mainThread"); + set_name(0x00B417CC, "s_originalThreadPriority"); set_name(0x00B417D0, "s_interactiveCount"); + set_name(0x00B417D4, "s_threadSlotCount"); + set_name(0x00B417D8, "s_threadSlots"); + set_name(0x00B417DC, "s_threadSlotCritsects"); + set_name(0x00B417E0, "s_netServer"); + set_name(0x00B417E8, "s_threadListCritsect"); + set_name(0x00B41824, "s_shutdownEvent"); set_name(0x00B41850, "s_messageRecycler"); set_name(0x00B6A180, "CGlueMgr__m_ffxActive"); set_name(0x00B6A184, "CGlueMgr__m_deathEffect"); diff --git a/profile/3.3.5a-windows-386/include/common/instance.h b/profile/3.3.5a-windows-386/include/common/instance.h index c4ca8fe..ac1e471 100644 --- a/profile/3.3.5a-windows-386/include/common/instance.h +++ b/profile/3.3.5a-windows-386/include/common/instance.h @@ -12,9 +12,14 @@ // TSingletonInstanceId #define COMMON_INSTANCE_ID(T) \ STORM_TS_LIST(T); \ +typedef struct TInstanceId_##T##__v_table TInstanceId_##T##__v_table; \ typedef struct TInstanceId_##T TInstanceId_##T; \ typedef struct TSingletonInstanceId_##T TSingletonInstanceId_##T; \ +struct TInstanceId_##T##__v_table { \ + void* v_fn_00_scalar_deleting_destructor; \ +}; \ struct TInstanceId_##T { \ + TInstanceId_##T##__v_table* v_table; \ TSLinkedNode_##T b_base; \ uint32_t m_id; \ }; \ diff --git a/profile/3.3.5a-windows-386/include/event/context.h b/profile/3.3.5a-windows-386/include/event/context.h index f77f329..a3773fb 100644 --- a/profile/3.3.5a-windows-386/include/event/context.h +++ b/profile/3.3.5a-windows-386/include/event/context.h @@ -15,6 +15,7 @@ DECLARE_ENUM(SCHEDSTATE); DECLARE_STRUCT(EvtContext); +DECLARE_STRUCT(EvtContextQueue); DECLARE_STRUCT(EvtTimer); DECLARE_HANDLE(HPROPCONTEXT); DECLARE_HANDLE(HEVENTCONTEXT); @@ -32,7 +33,6 @@ COMMON_INSTANCE_ID(EvtContext); // class EvtContext : public TSingletonInstanceId, m_id)> struct EvtContext { TSingletonInstanceId_EvtContext b_base; - uint32_t unkA; // Member variables SCritSect m_critsect; uint32_t m_currTime; @@ -45,11 +45,6 @@ struct EvtContext { uint32_t m_schedWeight; uint32_t m_schedSmoothWeight; int32_t m_schedRebalance; - int32_t unkXX; - int32_t unkXY; - int32_t unkXZ; - int32_t unkYY; - int32_t unkYZ; // TSExplicitList m_queueHandlerList[EVENTIDS]; TSExplicitList_EvtHandler m_queueHandlerList[36]; // TSExplicitList m_queueMessageList; @@ -60,8 +55,17 @@ struct EvtContext { EvtIdTable_pointer_to_EvtTimer m_timerIdTable; EvtTimerQueue m_timerQueue; HPROPCONTEXT m_propContext; + int32_t unk264; + int32_t unk268; + int32_t unk26C; void* m_callContext; uint32_t m_startWatchdog; }; +STORM_TS_PRIORITY_QUEUE(EvtContext); + +// class EvtContextQueue : public TSPriorityQueue +struct EvtContextQueue { + TSPriorityQueue_EvtContext b_base; +}; #endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/event/thread.h b/profile/3.3.5a-windows-386/include/event/thread.h new file mode 100644 index 0000000..0d63688 --- /dev/null +++ b/profile/3.3.5a-windows-386/include/event/thread.h @@ -0,0 +1,25 @@ +#ifndef EVENT_THREAD_H +#define EVENT_THREAD_H + +DECLARE_STRUCT(EvtThread); + +#include "storm/thread.h" +#include "storm/list.h" +#include "storm/queue.h" + +STORM_TS_LIST(EvtThread); + +// class EvtThread : public TSLinkedNode +struct EvtThread { + TSLinkedNode_EvtThread b_base; + uint32_t m_threadSlot; + uint32_t m_threadCount; + uint32_t m_weightTotal; + uint32_t m_weightAvg; + uint32_t m_contextCount; + uint32_t m_rebalance; + SEvent m_wakeEvent; + EvtContextQueue m_contextQueue; +}; + +#endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/main.h b/profile/3.3.5a-windows-386/include/main.h index 9ab5b84..578687e 100644 --- a/profile/3.3.5a-windows-386/include/main.h +++ b/profile/3.3.5a-windows-386/include/main.h @@ -44,6 +44,7 @@ #include "event/keydown.h" #include "event/message.h" #include "event/timer.h" +#include "event/thread.h" #include "framescript/object.h" #include "framescript/event_object.h" diff --git a/profile/3.3.5a-windows-386/include/storm/queue.h b/profile/3.3.5a-windows-386/include/storm/queue.h index 145a7bf..1721ef8 100644 --- a/profile/3.3.5a-windows-386/include/storm/queue.h +++ b/profile/3.3.5a-windows-386/include/storm/queue.h @@ -21,11 +21,15 @@ struct CSBasePriority { #define STORM_TS_TIMER_PRIORITY(T) \ typedef struct TSTimerPriority_##T TSTimerPriority_##T; \ struct TSTimerPriority_##T { \ + void** v_table; \ CSBasePriority b_base; \ T m_val; \ } #define STORM_TS_PRIORITY_QUEUE(T) \ -typedef CSBasePriorityQueue TSPriorityQueue_##T +typedef struct TSPriorityQueue_##T TSPriorityQueue_##T; \ +struct TSPriorityQueue_##T { \ + CSBasePriority b_base; \ +} #endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/storm/thread.h b/profile/3.3.5a-windows-386/include/storm/thread.h index 30785fb..d707276 100644 --- a/profile/3.3.5a-windows-386/include/storm/thread.h +++ b/profile/3.3.5a-windows-386/include/storm/thread.h @@ -11,7 +11,7 @@ DECLARE_STRUCT(SThread); typedef struct CSRWLock CSRWLock; struct SCritSect { - uint8_t m_critsect[24]; + uint8_t m_critsect[40]; }; struct CSRWLock { diff --git a/profile/3.3.5a-windows-386/symbol/client/func.sym b/profile/3.3.5a-windows-386/symbol/client/func.sym index aefcce5..03c352a 100644 --- a/profile/3.3.5a-windows-386/symbol/client/func.sym +++ b/profile/3.3.5a-windows-386/symbol/client/func.sym @@ -2,13 +2,14 @@ PatchFiles__qsortpatchfiles 00401200 f ; int __cdecl PatchFiles::qsortpatchfiles SetPaths 00402B20 f end=00402B8B TimingMethodCallback 00403200 f end=00403294 CCommand_TimingInfo 004032A0 f end=004032FF -ClientKillTimer 004033B0 f end=004033B9 +ClientKillTimer 004033B0 f end=004033B9 type="void __stdcall ClientKillTimer(uint32_t timerId, void* handlerAddress, char* handlerName)" ClientPostClose 004033C0 f end=004033D1 StartupStreaming 00403600 f end=004036A4 type="void __stdcall func(char* manifest@)" WowClientInit 00404130 f end=004042BC +InitializeEngineCallback 004047E0 f end=00404923 PatchFiles__EnumPatchArchives 00405A10 f ; int __cdecl PatchFiles::EnumPatchArchives(OS_FILE_DATA *fileData, PatchOnDemand__Cache *cbParam) PatchFiles__LoadArchives 00405AB0 f ; int __thiscall PatchFiles::LoadArchives(PatchFiles *this, const char *localeCode, char a3) -DestroyHandlerPlayer 004066D0 f end=0040673F ; 00005400C +DestroyEngineCallback 004066D0 f end=0040673F InitializeGlobal 004067F0 f end=00406B67 DestroyGlobal 00406B70 f end=00406C65 CommonMain 00406C70 f end=00406D64 diff --git a/profile/3.3.5a-windows-386/symbol/event/func.sym b/profile/3.3.5a-windows-386/symbol/event/func.sym index c9d69f0..555a105 100644 --- a/profile/3.3.5a-windows-386/symbol/event/func.sym +++ b/profile/3.3.5a-windows-386/symbol/event/func.sym @@ -5,6 +5,7 @@ EventInitialize 0047CFF0 f end=0047D02D EventDestroy 0047D030 f end=0047D04E EventCreateContextEx 0047D080 f end=0047D089 EventSetConfirmCloseCallback 0047D090 f end=0047D099 +TInstanceIdTable_EvtContext__Ptr 0047D0E0 f end=0047D16A type="EvtContext* __thiscall func(TInstanceIdTable_EvtContext* this, uint32_t id, int32_t lockMode, int32_t* findMask)" EventIsButtonDown 0047D1D0 f end=0047D230 EventIsKeyDown 0047D230 f end=0047D290 EventPostCloseEx 0047D290 f end=0047D305 @@ -12,24 +13,30 @@ EventQueuePost 0047D310 f end=0047D3AF EventRegisterEx 0047D3C0 f end=0047D443 EventUnregisterEx 0047D450 f end=0047D4B7 EventSetTimer 0047D530 f end=0047D59C -EventKillTimer 0047D620 f end=0047D683 +EventKillTimer 0047D620 f end=0047D683 type="void __stdcall func(uint32_t timerId, void* handlerFunction, char* functionName)" EventSetMouseMode 0047D690 f end=0047D6FD EventPostClose 0047D760 f end=0047D769 EventRegister 0047D770 f end=0047D78D EventUnregister 0047D790 f end=0047D7A9 IEvtSchedulerShutdown 0047D990 f end=0047D9EB +SynthesizeInitialize 0047DB40 f end=0047DB6B SynthesizeIdle 0047DBC0 f end=0047DC14 SynthesizePoll 0047DC20 f end=0047DC50 SynthesizePaint 0047DC50 f end=0047DC8D EventForceIdleProcessing 0047DCA0 f end=0047DE09 IEvtSchedulerDestroy 0047DEA0 f end=0047E117 +SynthesizeDestroy 0047E2F0 f end=0047E3C5 type="void __usercall func(EvtContext* context@)" +GetNextContext 0047E5A0 f end=0047E5FA type="EvtContext* __usercall func@(uint32_t hThread@)" InitializeSchedulerThread 0047E910 f end=0047EA69 AttachContextToThread 0047EC10 f +DetachContextFromThread 0047ED30 f end=0047EDED type="void __stdcall func(uint32_t hThread, EvtContext* context)" SchedulerThreadProcProcess 0047EFF0 f end=0047F225 SchedulerThreadProc 0047F230 f end=0047F2C1 ; IEvtSchedulerProcess as an independent function appears to be optimized out EventDoMessageLoop 0047F2D0 f end=0047F2EC IEvtSchedulerInitialize 0047F2F0 f end=0047F5BA IEvtSchedulerCreateContext 0047F5C0 f end=0047F6B9 +TInstanceId_EvtContext__destructor 0047F6C0 f +TInstanceId_EvtContext__scalar_deleting_destructor 0047F920 f end=0047F94B PostMouseModeChanged 0047FAC0 f end=0047FB22 IEvtInputDestroy 0047FB80 f end=0047FB92 IEvtInputInitialize 0047FBA0 f end=0047FBA5 @@ -51,3 +58,4 @@ IEvtTimerGetNextTime 00480F70 f end=00480FCA IEvtTimerDispatch 00481100 f end=00481289 IEvtTimerKill 00481290 f end=0048138F IEvtTimerSet 00481390 f end=004814E4 +TInstanceIdTable_EvtContext__Unlock 00774660 f end=00774675 diff --git a/profile/3.3.5a-windows-386/symbol/event/label.sym b/profile/3.3.5a-windows-386/symbol/event/label.sym index 7afc348..dfeee20 100644 --- a/profile/3.3.5a-windows-386/symbol/event/label.sym +++ b/profile/3.3.5a-windows-386/symbol/event/label.sym @@ -1,3 +1,13 @@ +TInstanceId_EvtContext__v_table 009EA04C l type="TInstanceId_EvtContext__v_table" +s_threadListContention 00AC0DC0 l type="int32_t" +s_threadList 00AC0DC4 l type="TSList_EvtThread" +TSingletonInstanceId_EvtContext__s_idTable 00B41670 l type="TInstanceIdTable_EvtContext" s_mainThread 00B417C8 l type="uint32_t" s_interactiveCount 00B417D0 l type="int32_t" +s_threadSlotCount 00B417D4 l type="int32_t" +s_threadSlots 00B417D8 l type="EvtThread**" +s_threadSlotCritsects 00B417DC l type="SCritSect*" +s_netServer 00B417E0 l +s_threadListCritsect 00B417E8 l type="SCritSect" +s_shutdownEvent 00B41824 l type="SEvent" s_messageRecycler 00B41850 l type="CDataRecycler" diff --git a/profile/3.3.5a-windows-386/symbol/lock/func.sym b/profile/3.3.5a-windows-386/symbol/lock/func.sym deleted file mode 100644 index f35fa29..0000000 --- a/profile/3.3.5a-windows-386/symbol/lock/func.sym +++ /dev/null @@ -1,2 +0,0 @@ -CSRWLock__Enter 0047D0E0 f end=0047D16A -CSRWLock__Leave 00774660 f end=00774675 diff --git a/profile/3.3.5a-windows-386/symbol/main.sym b/profile/3.3.5a-windows-386/symbol/main.sym index c57d56c..da7002d 100644 --- a/profile/3.3.5a-windows-386/symbol/main.sym +++ b/profile/3.3.5a-windows-386/symbol/main.sym @@ -12,15 +12,16 @@ AsyncFileReadHandlerTimeoutCallback 00402690 f end=004026A9 SetPaths 00402B20 f end=00402B8B TimingMethodCallback 00403200 f end=00403294 CCommand_TimingInfo 004032A0 f end=004032FF -ClientKillTimer 004033B0 f end=004033B9 +ClientKillTimer 004033B0 f end=004033B9 type="void __stdcall ClientKillTimer(uint32_t timerId, void* handlerAddress, char* handlerName)" ClientPostClose 004033C0 f end=004033D1 StartupStreaming 00403600 f end=004036A4 type="void __stdcall func(char* manifest@)" CDataStore__destructor 004038A0 f ; CDataStore::~CDataStore() WowClientInit 00404130 f end=004042BC +InitializeEngineCallback 004047E0 f end=00404923 WowClientDB_StartupStringsRec__Load 004052F0 f end=0040553D PatchFiles__EnumPatchArchives 00405A10 f ; int __cdecl PatchFiles::EnumPatchArchives(OS_FILE_DATA *fileData, PatchOnDemand__Cache *cbParam) PatchFiles__LoadArchives 00405AB0 f ; int __thiscall PatchFiles::LoadArchives(PatchFiles *this, const char *localeCode, char a3) -DestroyHandlerPlayer 004066D0 f end=0040673F ; 00005400C +DestroyEngineCallback 004066D0 f end=0040673F InitializeGlobal 004067F0 f end=00406B67 DestroyGlobal 00406B70 f end=00406C65 CommonMain 00406C70 f end=00406D64 @@ -230,7 +231,7 @@ EventInitialize 0047CFF0 f end=0047D02D EventDestroy 0047D030 f end=0047D04E EventCreateContextEx 0047D080 f end=0047D089 EventSetConfirmCloseCallback 0047D090 f end=0047D099 -CSRWLock__Enter 0047D0E0 f end=0047D16A +TInstanceIdTable_EvtContext__Ptr 0047D0E0 f end=0047D16A type="EvtContext* __thiscall func(TInstanceIdTable_EvtContext* this, uint32_t id, int32_t lockMode, int32_t* findMask)" EventIsButtonDown 0047D1D0 f end=0047D230 EventIsKeyDown 0047D230 f end=0047D290 EventPostCloseEx 0047D290 f end=0047D305 @@ -238,24 +239,30 @@ EventQueuePost 0047D310 f end=0047D3AF EventRegisterEx 0047D3C0 f end=0047D443 EventUnregisterEx 0047D450 f end=0047D4B7 EventSetTimer 0047D530 f end=0047D59C -EventKillTimer 0047D620 f end=0047D683 +EventKillTimer 0047D620 f end=0047D683 type="void __stdcall func(uint32_t timerId, void* handlerFunction, char* functionName)" EventSetMouseMode 0047D690 f end=0047D6FD EventPostClose 0047D760 f end=0047D769 EventRegister 0047D770 f end=0047D78D EventUnregister 0047D790 f end=0047D7A9 IEvtSchedulerShutdown 0047D990 f end=0047D9EB +SynthesizeInitialize 0047DB40 f end=0047DB6B SynthesizeIdle 0047DBC0 f end=0047DC14 SynthesizePoll 0047DC20 f end=0047DC50 SynthesizePaint 0047DC50 f end=0047DC8D EventForceIdleProcessing 0047DCA0 f end=0047DE09 IEvtSchedulerDestroy 0047DEA0 f end=0047E117 +SynthesizeDestroy 0047E2F0 f end=0047E3C5 type="void __usercall func(EvtContext* context@)" +GetNextContext 0047E5A0 f end=0047E5FA type="EvtContext* __usercall func@(uint32_t hThread@)" InitializeSchedulerThread 0047E910 f end=0047EA69 AttachContextToThread 0047EC10 f +DetachContextFromThread 0047ED30 f end=0047EDED type="void __stdcall func(uint32_t hThread, EvtContext* context)" SchedulerThreadProcProcess 0047EFF0 f end=0047F225 SchedulerThreadProc 0047F230 f end=0047F2C1 ; IEvtSchedulerProcess as an independent function appears to be optimized out EventDoMessageLoop 0047F2D0 f end=0047F2EC IEvtSchedulerInitialize 0047F2F0 f end=0047F5BA IEvtSchedulerCreateContext 0047F5C0 f end=0047F6B9 +TInstanceId_EvtContext__destructor 0047F6C0 f +TInstanceId_EvtContext__scalar_deleting_destructor 0047F920 f end=0047F94B PostMouseModeChanged 0047FAC0 f end=0047FB22 IEvtInputDestroy 0047FB80 f end=0047FB92 IEvtInputInitialize 0047FBA0 f end=0047FBA5 @@ -3074,6 +3081,8 @@ SStrCmp 0076F770 f end=0076F7D2 SStrStrUTF8I 0076F7E0 f end=0076F852 SStrDupA 0076F9E0 f end=0076FA35 SStrToFloat 0076FB80 f end=0076FDA9 +SGetCurrentThreadPriority 0076FDD0 f end=0076FDDE +SSetCurrentThreadPriority 0076FDE0 f end=0076FDF8 SSetCurrentProcessAffinityMask 0076FE00 f end=0076FE18 ILoadValue 007703A0 f end=00770483 type="int32_t __usercall func@(void* parentKey, char* subKeyName@, char* valuename, uint32_t* datatype, uint8_t* buffer@, uint32_t bytes@, uint32_t* bytesread@)" InternalLoadEntry 00770490 f end=00770575 type="int32_t __usercall func@(char* keyname, char* valuename, uint32_t flags, uint32_t* datatype, void* buffer, uint32_t bytes, uint32_t* bytesread@)" @@ -3099,10 +3108,11 @@ SCritSect__SCritSect 00774620 f end=0077462E type="SCritSect* __thiscall func(SC SCritSect__destructor 00774630 f end=00774638 type="void __thiscall func(SCritSect *this)" SCritSect__Enter 00774640 f end=00774648 type="void __thiscall func(SCritSect *this)" SCritSect__Leave 00774650 f end=00774658 type="void __thiscall func(SCritSect *this)" -CSRWLock__Leave 00774660 f end=00774675 +TInstanceIdTable_EvtContext__Unlock 00774660 f end=00774675 SSyncObject__Wait 00774690 f end=007746A4 SEvent__Set 00774720 f end=0077472A SEvent__Reset 00774730 f end=0077473A +SThread__Create 00774740 f end=0077476F PathGetRootChars 007750D0 f end=00775138 FlushLog 00775140 f end=0077518E LockLog 00775190 f end=00775250 @@ -3313,6 +3323,7 @@ OsTimeShutdown 0086D440 f end=0086D445 OsTlsGetValue 0086D6D0 f end=0086D6DF TSExplicitList_CGxBuf__LinkToTail 0086E200 f end=0086E25F type="void __thiscall func(TSExplicitList_CGxBuf* this, CGxBuf* ptr)" OsCallSetContext 0086F5A0 f end=0086F5EA +OsCallResetContext 0086F5F0 f end=0086F64E ; 00005410 OsCallInitialize 0086F760 f end=0086F875 OsCallInitializeContext 0086F880 f end=0086F902 OsClipboardGetString 00872280 f end=00872297 @@ -3556,6 +3567,7 @@ firstByteMark 009E537C l type="uint32_t[7]" bytesFromUTF8 009E5398 l type="uint8_t[256]" s_noinfo 009E5630 l type="Blizzard__File__FileInfo" firstByteMark 009E9EC8 l type="uint32_t[7]" +TInstanceId_EvtContext__v_table 009EA04C l type="TInstanceId_EvtContext__v_table" s_pixelFormatToMipBitsCache 009F1074 l CGxDevice__vtable 00A2DDC0 l type="CGxDevice__vtable" CGxDeviceOpenGl__vtable 00A2E198 l @@ -3567,6 +3579,8 @@ System_File__read_func 00AB912C l ; type="int32_t (*)(Blizzard__File__Filesystem System_File__write_func 00AB91B4 l ; type="int32_t (*)(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" System_File__Stacked__s_nullstack 00AB91C0 l type="Blizzard__File__Filesystem" System_File__Stacked__s_basestack 00AB92C0 l type="Blizzard__File__Filesystem" +s_threadListContention 00AC0DC0 l type="int32_t" +s_threadList 00AC0DC4 l type="TSList_EvtThread" s_zorderlist 00AC1B9C l type="TSExplicitList_CILayer" ClientServices__m_loginState 00AC3DA4 l CGGameUI__m_visible 00AC80A8 l @@ -3837,8 +3851,16 @@ Blizzard__Streaming__s_isStreamingTrial 00B38181 l type="bool" System_File__s_read_init 00B38A5C l type="Blizzard__Lock__DoOnceData" System_File__s_write_init 00B38A64 l type="Blizzard__Lock__DoOnceData" OsFileGetDownloadFolder__s_downloadfolder 00B38A88 l ; OsFileGetDownloadFolder()::s_downloadfolder; +TSingletonInstanceId_EvtContext__s_idTable 00B41670 l type="TInstanceIdTable_EvtContext" s_mainThread 00B417C8 l type="uint32_t" +s_originalThreadPriority 00B417CC l type="int32_t" s_interactiveCount 00B417D0 l type="int32_t" +s_threadSlotCount 00B417D4 l type="int32_t" +s_threadSlots 00B417D8 l type="EvtThread**" +s_threadSlotCritsects 00B417DC l type="SCritSect*" +s_netServer 00B417E0 l +s_threadListCritsect 00B417E8 l type="SCritSect" +s_shutdownEvent 00B41824 l type="SEvent" s_messageRecycler 00B41850 l type="CDataRecycler" CGlueMgr__m_ffxActive 00B6A180 l CGlueMgr__m_deathEffect 00B6A184 l diff --git a/profile/3.3.5a-windows-386/symbol/os/func.sym b/profile/3.3.5a-windows-386/symbol/os/func.sym index ec3843a..08f41f3 100644 --- a/profile/3.3.5a-windows-386/symbol/os/func.sym +++ b/profile/3.3.5a-windows-386/symbol/os/func.sym @@ -42,6 +42,7 @@ OsIMEInitialize 0086D0A0 f end=0086D0B8 OsIMEDestroy 0086D0C0 f end=0086D0Df OsTlsGetValue 0086D6D0 f end=0086D6DF OsCallSetContext 0086F5A0 f end=0086F5EA +OsCallResetContext 0086F5F0 f end=0086F64E ; 00005410 OsCallInitialize 0086F760 f end=0086F875 OsCallInitializeContext 0086F880 f end=0086F902 OsClipboardGetString 00872280 f end=00872297 diff --git a/profile/3.3.5a-windows-386/symbol/storm/func.sym b/profile/3.3.5a-windows-386/symbol/storm/func.sym index ed00661..61fa679 100644 --- a/profile/3.3.5a-windows-386/symbol/storm/func.sym +++ b/profile/3.3.5a-windows-386/symbol/storm/func.sym @@ -28,6 +28,8 @@ SStrCmp 0076F770 f end=0076F7D2 SStrStrUTF8I 0076F7E0 f end=0076F852 SStrDupA 0076F9E0 f end=0076FA35 SStrToFloat 0076FB80 f end=0076FDA9 +SGetCurrentThreadPriority 0076FDD0 f end=0076FDDE +SSetCurrentThreadPriority 0076FDE0 f end=0076FDF8 SSetCurrentProcessAffinityMask 0076FE00 f end=0076FE18 ILoadValue 007703A0 f end=00770483 type="int32_t __usercall func@(void* parentKey, char* subKeyName@, char* valuename, uint32_t* datatype, uint8_t* buffer@, uint32_t bytes@, uint32_t* bytesread@)" InternalLoadEntry 00770490 f end=00770575 type="int32_t __usercall func@(char* keyname, char* valuename, uint32_t flags, uint32_t* datatype, void* buffer, uint32_t bytes, uint32_t* bytesread@)" @@ -56,6 +58,7 @@ SCritSect__Leave 00774650 f end=00774658 type="void __thiscall func(SCritSect *t SSyncObject__Wait 00774690 f end=007746A4 SEvent__Set 00774720 f end=0077472A SEvent__Reset 00774730 f end=0077473A +SThread__Create 00774740 f end=0077476F PathGetRootChars 007750D0 f end=00775138 FlushLog 00775140 f end=0077518E LockLog 00775190 f end=00775250 diff --git a/profile/3.3.5a-windows-386/symbol/storm/label.sym b/profile/3.3.5a-windows-386/symbol/storm/label.sym index 381d4fa..24c6513 100644 --- a/profile/3.3.5a-windows-386/symbol/storm/label.sym +++ b/profile/3.3.5a-windows-386/symbol/storm/label.sym @@ -1,3 +1,4 @@ +s_originalThreadPriority 00B417CC l type="int32_t" s_alloccount 00CAE950 l type="uint32_t" s_freecount 00CAE954 l type="uint32_t" g_opt 00CAE958 l type="STORMOPTIONS" diff --git a/profile/3.3.5a-windows-386/x64dbg/game.dd32 b/profile/3.3.5a-windows-386/x64dbg/game.dd32 index d45e7494efff45cbbdd63c2679cdcf1d3c3aa69b..0a90567260b5c103d4334c2601cba25d52e4d800 100644 GIT binary patch delta 26642 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 A6951J delta 26343 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 diff --git a/profile/3.3.5a-windows-386/x64dbg/types.json b/profile/3.3.5a-windows-386/x64dbg/types.json index 5a130c4..e4e70c2 100644 --- a/profile/3.3.5a-windows-386/x64dbg/types.json +++ b/profile/3.3.5a-windows-386/x64dbg/types.json @@ -396,10 +396,6 @@ "type": "HDATAMGR", "name": "HCAMERA" }, - { - "type": "CSBasePriorityQueue", - "name": "TSPriorityQueue_EvtTimer" - }, { "type": "TSList_CAsyncObject", "name": "TSExplicitList_CAsyncObject" @@ -448,6 +444,10 @@ "type": "TSList_EvtContext", "name": "TSExplicitList_EvtContext" }, + { + "type": "TSList_EvtThread", + "name": "TSExplicitList_EvtThread" + }, { "type": "TSList_SIMPLEFRAMENODE", "name": "TSExplicitList_SIMPLEFRAMENODE" @@ -22325,12 +22325,12 @@ }, { "name": "SCritSect", - "size": 24, + "size": 40, "members": [ { "type": "uint8_t", "name": "m_critsect", - "arrsize": 24, + "arrsize": 40, "offset": 0 } ] @@ -26064,6 +26064,17 @@ } ] }, + { + "name": "TInstanceId_EvtContext__v_table", + "size": 4, + "members": [ + { + "type": "void*", + "name": "v_fn_00_scalar_deleting_destructor", + "offset": 0 + } + ] + }, { "name": "TRefCnt", "size": 8, @@ -27501,6 +27512,22 @@ } ] }, + { + "name": "TSLink_EvtThread", + "size": 8, + "members": [ + { + "type": "TSLink_EvtThread*", + "name": "m_prevlink", + "offset": 0 + }, + { + "type": "EvtThread*", + "name": "m_next", + "offset": 4 + } + ] + }, { "name": "TSLink_FrameScript_EventObject", "size": 8, @@ -30682,17 +30709,44 @@ }, { "name": "TSTimerPriority_uint32_t", - "size": 12, + "size": 16, + "members": [ + { + "type": "void**", + "name": "v_table", + "offset": 0 + }, + { + "type": "CSBasePriority", + "name": "b_base", + "offset": 4 + }, + { + "type": "uint32_t", + "name": "m_val", + "offset": 12 + } + ] + }, + { + "name": "TSPriorityQueue_EvtContext", + "size": 8, "members": [ { "type": "CSBasePriority", "name": "b_base", "offset": 0 - }, + } + ] + }, + { + "name": "TSPriorityQueue_EvtTimer", + "size": 8, + "members": [ { - "type": "uint32_t", - "name": "m_val", - "offset": 8 + "type": "CSBasePriority", + "name": "b_base", + "offset": 0 } ] }, @@ -33969,6 +34023,17 @@ } ] }, + { + "name": "TSLinkedNode_EvtThread", + "size": 8, + "members": [ + { + "type": "TSLink_EvtThread", + "name": "m_link", + "offset": 0 + } + ] + }, { "name": "TSHashObject_FrameScript_EventObject_HASHKEY_STRI", "size": 24, @@ -37603,6 +37668,22 @@ } ] }, + { + "name": "TSList_EvtThread", + "size": 12, + "members": [ + { + "type": "ptrdiff_t", + "name": "m_linkoffset", + "offset": 0 + }, + { + "type": "TSLink_EvtThread", + "name": "m_terminator", + "offset": 4 + } + ] + }, { "name": "TSList_SIMPLEFRAMENODE", "size": 12, @@ -38704,7 +38785,7 @@ }, { "name": "EvtTimer", - "size": 48, + "size": 56, "members": [ { "type": "uint32_t", @@ -38719,32 +38800,54 @@ { "type": "float", "name": "timeout", - "offset": 16 + "offset": 20 }, { "type": "void**", "name": "handler", - "offset": 20 + "offset": 24 }, { "type": "void*", "name": "param", - "offset": 24 + "offset": 28 }, { "type": "void**", "name": "guidHandler", - "offset": 28 + "offset": 32 }, { "type": "uint64_t", "name": "guidParam", - "offset": 32 + "offset": 40 }, { "type": "void*", "name": "guidParam2", - "offset": 40 + "offset": 48 + } + ] + }, + { + "name": "EvtContextQueue", + "size": 8, + "members": [ + { + "type": "TSPriorityQueue_EvtContext", + "name": "b_base", + "offset": 0 + } + ] + }, + { + "name": "EvtTimerQueue", + "size": 8, + "members": [ + { + "type": "TSPriorityQueue_EvtTimer", + "name": "b_base", + "offset": 0 } ] }, @@ -39804,17 +39907,22 @@ }, { "name": "TInstanceId_EvtContext", - "size": 12, + "size": 16, "members": [ + { + "type": "TInstanceId_EvtContext__v_table*", + "name": "v_table", + "offset": 0 + }, { "type": "TSLinkedNode_EvtContext", "name": "b_base", - "offset": 0 + "offset": 4 }, { "type": "uint32_t", "name": "m_id", - "offset": 8 + "offset": 12 } ] }, @@ -45906,6 +46014,57 @@ } ] }, + { + "name": "EvtThread", + "size": 44, + "members": [ + { + "type": "TSLinkedNode_EvtThread", + "name": "b_base", + "offset": 0 + }, + { + "type": "uint32_t", + "name": "m_threadSlot", + "offset": 8 + }, + { + "type": "uint32_t", + "name": "m_threadCount", + "offset": 12 + }, + { + "type": "uint32_t", + "name": "m_weightTotal", + "offset": 16 + }, + { + "type": "uint32_t", + "name": "m_weightAvg", + "offset": 20 + }, + { + "type": "uint32_t", + "name": "m_contextCount", + "offset": 24 + }, + { + "type": "uint32_t", + "name": "m_rebalance", + "offset": 28 + }, + { + "type": "SEvent", + "name": "m_wakeEvent", + "offset": 32 + }, + { + "type": "EvtContextQueue", + "name": "m_contextQueue", + "offset": 36 + } + ] + }, { "name": "M2ModelCamera", "size": 56, @@ -46148,17 +46307,6 @@ } ] }, - { - "name": "EvtTimerQueue", - "size": 20, - "members": [ - { - "type": "TSPriorityQueue_EvtTimer", - "name": "b_base", - "offset": 0 - } - ] - }, { "name": "BigData", "size": 360, @@ -46203,7 +46351,7 @@ }, { "name": "TSingletonInstanceId_EvtContext", - "size": 12, + "size": 16, "members": [ { "type": "TInstanceId_EvtContext", @@ -47693,11 +47841,6 @@ "name": "b_base", "offset": 0 }, - { - "type": "uint32_t", - "name": "unkA", - "offset": 12 - }, { "type": "SCritSect", "name": "m_critsect", @@ -47706,76 +47849,51 @@ { "type": "uint32_t", "name": "m_currTime", - "offset": 40 + "offset": 56 }, { "type": "SCHEDSTATE", "name": "m_schedState", - "offset": 48 + "offset": 64 }, { "type": "TSTimerPriority_uint32_t", "name": "m_schedNextWakeTime", - "offset": 56 - }, - { - "type": "uint32_t", - "name": "m_schedLastIdle", - "offset": 68 - }, - { - "type": "uint32_t", - "name": "m_schedFlags", "offset": 72 }, + { + "type": "uint32_t", + "name": "m_schedLastIdle", + "offset": 88 + }, + { + "type": "uint32_t", + "name": "m_schedFlags", + "offset": 92 + }, { "type": "uint32_t", "name": "m_schedIdleTime", - "offset": 76 + "offset": 96 }, { "type": "uint32_t", "name": "m_schedInitialIdleTime", - "offset": 80 + "offset": 100 }, { "type": "uint32_t", "name": "m_schedWeight", - "offset": 84 + "offset": 104 }, { "type": "uint32_t", "name": "m_schedSmoothWeight", - "offset": 88 - }, - { - "type": "int32_t", - "name": "m_schedRebalance", - "offset": 92 - }, - { - "type": "int32_t", - "name": "unkXX", - "offset": 96 - }, - { - "type": "int32_t", - "name": "unkXY", - "offset": 100 - }, - { - "type": "int32_t", - "name": "unkXZ", - "offset": 104 - }, - { - "type": "int32_t", - "name": "unkYY", "offset": 108 }, { "type": "int32_t", - "name": "unkYZ", + "name": "m_schedRebalance", "offset": 112 }, { @@ -47812,6 +47930,21 @@ { "type": "HPROPCONTEXT", "name": "m_propContext", + "offset": 616 + }, + { + "type": "int32_t", + "name": "unk264", + "offset": 620 + }, + { + "type": "int32_t", + "name": "unk268", + "offset": 624 + }, + { + "type": "int32_t", + "name": "unk26C", "offset": 628 }, {