FName就是NamePoolData
GObject就是GUObjectArray
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| __int64 __fastcall FName::GetPlainNameString(_DWORD *a1, __int64 a2) { __int64 v3; RTL_SRWLOCK *v4; int v6;
v3 = HIWORD(*a1); v6 = (unsigned __int16)*a1; if ( byte_148D8736C ) { v4 = &stru_148D9B9C0; } else { v4 = (RTL_SRWLOCK *)FNamePool::FNamePool((FNamePool *)&stru_148D9B9C0); byte_148D8736C = 1; } FNameEntry::GetPlainNameString((char *)v4[v3 + 2].Ptr + (unsigned int)(2 * v6), a2); return a2; }
void UObjectBaseInit(void) { unsigned int v0; char v1; ......
if ( *((int *)CpuChannel + 6) < 0 ) { v0 = dword_148DBD114; } else { ...... } ......
GUObjectAllocator = v13; qword_148DBCD48 = (__int64)FMemory::MallocPersistentAuxiliary(v13, 0); qword_148DBCD50 = qword_148DBCD48; qword_148DBCD58 = qword_148DBCD48; FUObjectArray::AllocateObjectPool((FUObjectArray *)&GUObjectArray, v14, v12, v11); InitAsyncThread(); byte_148DBCFC8 = 1; sub_142058840(); FScopedBootTiming::~FScopedBootTiming((FScopedBootTiming *)v10); if ( v1 ) FCpuProfilerTrace::OutputEndEvent(); }
|
GUObjectArray是FUObjectArray的一个实例化对象 GetPlainNameString
其结构为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class COREUOBJECT_API FUObjectArray { public: ...... private: typedef FChunkedFixedUObjectArray TUObjectArray; int32 ObjFirstGCIndex; int32 ObjLastNonGCIndex; int32 MaxObjectsNotConsideredByGC; bool OpenForDisregardForGC; TUObjectArray ObjObjects; FCriticalSection ObjObjectsCritical; TLockFreePointerListUnordered<int32, PLATFORM_CACHE_LINE_SIZE> ObjAvailableList; #if UE_GC_TRACK_OBJ_AVAILABLE FThreadSafeCounter ObjAvailableCount; #endif };
|
NamePoolData是FNamePool的一个实例化对象
其结构为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| struct FNameEntryAllocator{ mutable PVOID Lock; unsigned int CurrentBlock; unsigned int CurrentByCursor; PVOID Blocks[FNameMaxBlocks]; }
struct FNamePool{ FNameEntryAllocator Entires; ... }
struct FNameEntryHeader { USHORT bIsWide : 1; USHORT Len : 15; };
struct FNameEntry { FNameEntryHeader Header; union { char AnsiName[NAME_SIZE]; wchar_t WideName[NAME_SIZE]; }; }
|