Find FNamePool NamePoolData
Closed this issue · 6 comments
rkr35 commented
Find FNamePool NamePoolData
rkr35 commented
static bool bNamePoolInitialized;
alignas(FNamePool) static uint8 NamePoolData[sizeof(FNamePool)];
// Only call this once per public FName function called
//
// Not using magic statics to run as little code as possible
static FNamePool& GetNamePool()
{
if (bNamePoolInitialized)
{
return *(FNamePool*)NamePoolData;
}
FNamePool* Singleton = new (NamePoolData) FNamePool;
bNamePoolInitialized = true;
return *Singleton;
}
rkr35 commented
static FName Make(FNameStringView View, EFindName FindType, int32 InternalNumber)
{
if (View.Len >= NAME_SIZE)
{
checkf(false, TEXT("FName's %d max length exceeded. Got %d characters excluding null-terminator."), NAME_SIZE - 1, View.Len);
return FName("ERROR_NAME_SIZE_EXCEEDED");
}
FNamePool& Pool = GetNamePool();
...
}
rkr35 commented
if (0x3ff < uStack32) {
local_28 = "ERROR_NAME_SIZE_EXCEEDED";
uStack32 = 0x18;
FUN_0107cfe0(param_1,&local_28,1);
return param_1;
}
if (bNamePoolInitialized == false) {
pRVar2 = FUN_0107db60((PSRWLOCK)&NamePoolData);
bNamePoolInitialized = true;
}
else {
pRVar2 = (PSRWLOCK)&NamePoolData;
}
rkr35 commented
0107d527 81 f9 00 CMP param_1,0x400
04 00 00
0107d52d 72 40 JC LAB_0107d56f
0107d52f c7 44 24 MOV dword ptr [RSP + local_28[8]],0x18
28 18 00
00 00
0107d537 48 8d 05 LEA RAX,[s_ERROR_NAME_SIZE_EXCEEDED_036a4898] = "ERROR_NAME_SIZE_EXCEEDED"
5a 73 62 02
0107d53e 48 89 44 MOV qword ptr [RSP + local_28[0]],RAX=>s_ERROR_NAM = "ERROR_NAME_SIZE_EXCEEDED"
24 20
0107d543 48 8d 54 LEA param_2=>local_28,[RSP + 0x20]
24 20
0107d548 0f 28 44 MOVAPS XMM0,xmmword ptr [RSP + local_28[0]]
24 20
0107d54d 41 b8 01 MOV R8D,0x1
00 00 00
0107d553 48 8b cf MOV param_1,RDI
0107d556 66 0f 7f MOVDQA xmmword ptr [RSP + local_28[0]],XMM0
44 24 20
0107d55c e8 7f fa CALL FUN_0107cfe0 undefined8 * FUN_0107cfe0(undefi
ff ff
0107d561 48 8b c7 MOV RAX,RDI
0107d564 48 8b 5c MOV RBX,qword ptr [RSP + local_res10]
24 58
0107d569 48 83 c4 40 ADD RSP,0x40
0107d56d 5f POP RDI
0107d56e c3 RET
LAB_0107d56f XREF[1]: 0107d52d(j)
0107d56f 80 3d 32 CMP byte ptr [bNamePoolInitialized],0x0 = ??
c6 71 03 00
0107d576 74 09 JZ LAB_0107d581
0107d578 48 8d 05 LEA RAX,[NamePoolData] = ??
41 c6 71 03
0107d57f eb 13 JMP LAB_0107d594
LAB_0107d581 XREF[1]: 0107d576(j)
0107d581 48 8d 0d LEA param_1,[NamePoolData] = ??
38 c6 71 03
0107d588 e8 d3 05 CALL FUN_0107db60 PSRWLOCK FUN_0107db60(PSRWLOCK p
00 00
0107d58d c6 05 14 MOV byte ptr [bNamePoolInitialized],0x1 = ??
c6 71 03 01
rkr35 commented
89 74 24 30 89 44 24 34 74 09 4C 8D 05 ?? ?? ?? ??
00007FF6049D0F46 | 897424 30 | mov dword ptr ss:[rsp+30],esi |
00007FF6049D0F4A | 894424 34 | mov dword ptr ss:[rsp+34],eax |
00007FF6049D0F4E | 74 09 | je fsd-win64-shipping.7FF6049D0F59 |
00007FF6049D0F50 | 4C:8D05 698C7103 | lea r8,qword ptr ds:[7FF6080E9BC0] | NamePoolData