Function at 0x4327f0
Capabilities:
Get thread local storage value
Set thread local storage value

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x38
mov eax, dword [0x45f0f8]
mov ebp, ecx
mov dword [esp + 0x24], edx
test eax, eax
je 0x432ab6
dec eax
push eax
call dword [sym.imp.kernel32.dll_TlsGetValue]
cmp eax, 2
jb 0x432823
cmp dword [eax + 4], 0
mov ebx, eax
jne 0x432a3c
mov eax, dword [0x45f0f8]
test eax, eax
je 0x432ad5
dec eax
push eax
call dword [sym.imp.kernel32.dll_TlsGetValue]
test eax, eax
je 0x432aee
mov ebx, eax
cmp eax, 1
je 0x432c1e
mov dword [esp + 0xc], 0x45f0d4
mov eax, dword [0x45f0d4]
cmp eax, 2
jne 0x432b5f
lea eax, [0x45f0dc]
push eax
call dword [sym.imp.kernel32.dll_AcquireSRWLockExclusive]
mov eax, dword [0x45f578]
test eax, 0x7fffffff
jne 0x432b6d
mov dword [esp + 4], 0
movzx eax, byte [0x45f0e0]
test al, al
jne 0x432b87
mov edx, dword [0x45f0ec]
mov dword [esp + 0x20], ebp
test edx, edx
je 0x4328e8
mov ecx, edx
mov eax, 1
dec ecx
mov dword [0x45f0ec], ecx
mov edi, dword [0x45f0e8]
mov esi, dword [edi + edx*4 - 4]
je 0x4328f8
mov eax, dword [edi]
mov dword [esp], esi
mov dword [edi], esi
xor esi, esi
mov dword [esp + 8], eax
mov eax, ecx
sub eax, 2
cmovb eax, esi
cmp edx, 4
jae 0x432908
xor esi, esi
mov ebp, 1
cmp ecx, 2
je 0x432933
jmp 0x43296d
xor eax, eax
cmp eax, 1
jne 0x432981
jmp 0x432995
mov edx, esi
cmp eax, 1
jne 0x432981
jmp 0x432995
mov ebp, 1
nop dword [eax]
mov ecx, esi
mov esi, dword [edi + ebp*4]
cmp esi, dword [edi + ebp*4 + 4]
mov esi, ebp
sbb esi, 0xffffffff
mov ebp, dword [edi + esi*4]
mov dword [edi + ecx*4], ebp
lea ebp, [esi + esi + 1]
cmp ebp, eax
jbe 0x432910
add edx, 0xfffffffe
cmp ebp, edx
jne 0x432940
mov ecx, dword [edi + ebp*4]
lea eax, [edi + ebp*4]
mov dword [edi + esi*4], ecx
mov esi, ebp
jmp 0x432943
lea eax, [edi + esi*4]
mov ecx, dword [esp]
mov dword [eax], ecx
mov eax, esi
nop word [eax + eax]
lea ecx, [eax - 1]
mov esi, ecx
shr esi, 1
mov edx, dword [edi + esi*4]
cmp edx, dword [esp]
jbe 0x43296b
mov dword [edi + eax*4], edx
cmp ecx, 1
mov eax, esi
ja 0x432950
jmp 0x43296d
mov esi, eax
mov eax, dword [esp]
mov edx, dword [esp + 8]
mov dword [edi + esi*4], eax
mov eax, 1
cmp eax, 1
je 0x432995
mov edx, dword [0x45f0f0]
mov eax, edx
inc eax
je 0x432c3c
mov dword [0x45f0f0], eax
mov ecx, 0x20
test edx, edx
mov eax, 0x20
je 0x4329a9
bsr eax, edx
xor eax, 0x1f
sub ecx, eax
xor eax, eax
mov edi, 1
mov ebp, edx
lea esi, [ebx + 4]
mov dword [esp + 8], edx
mov dword [esp], ecx
sub ecx, 1
cmovb ecx, eax
btc ebp, ecx
shl edi, cl
test edx, edx
cmove ebp, edx
cmp byte [esp + 4], 0
jne 0x4329e5
mov eax, dword [0x45f578]
test eax, 0x7fffffff
jne 0x432bf6
lea eax, [0x45f0dc]
push eax
call dword [sym.imp.kernel32.dll_ReleaseSRWLockExclusive]
mov eax, dword [esi + 0x10]
mov ecx, dword [esp]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 8]
movsd xmm0, qword [esi]
movsd xmm1, qword [esi + 8]
movsd qword [esp + 0x14], xmm1
movsd qword [esp + 0xc], xmm0
mov dword [ebx + 4], 1
mov dword [ebx + 8], eax
mov dword [ebx + 0xc], ecx
mov dword [ebx + 0x10], edi
mov dword [ebx + 0x14], ebp
cmp dword [esp + 0xc], 0
je 0x432a38
lea ecx, [esp + 0x10]
call fcn.0044e310
mov ebp, dword [esp + 0x20]
add ebx, 8
movsd xmm0, qword [ebx]
movsd xmm1, qword [ebx + 8]
mov ecx, dword [esp + 0x24]
movsd qword [esp + 0x28], xmm0
movsd qword [esp + 0x30], xmm1
mov eax, dword [esp + 0x2c]
mov edx, dword [esp + 0x34]
mov eax, dword [ecx + eax*4 + 8]
test eax, eax
je 0x432a84
lea edx, [edx + edx*2]
cmp byte [eax + edx*4 + 8], 0
je 0x432a84
lea eax, [eax + edx*4]
mov dword [ebp], eax
mov byte [ebp + 4], 2
add esp, 0x38
pop esi
pop edi
pop ebx
pop ebp
ret
mov eax, dword [esp + 0x4c]
mov edx, dword [eax]
mov eax, dword [edx]
test eax, eax
je 0x432bb7
cmp eax, 1
jne 0x432bcc
mov esi, dword [edx + 4]
lock inc dword [esi + 0xc0]
jg 0x432bd4
mov ecx, 7
int 0x29
ud2
mov ecx, 0x45f0f8
call fcn.004525d0
push eax
call dword [sym.imp.kernel32.dll_TlsGetValue]
cmp eax, 2
jae 0x432817
jmp 0x432823
mov ecx, 0x45f0f8
call fcn.004525d0
push eax
call dword [sym.imp.kernel32.dll_TlsGetValue]
test eax, eax
jne 0x432840
movzx eax, byte [0x45f57c]
mov eax, dword [0x45f508]
test eax, eax
jne 0x432b11
call dword [sym.imp.kernel32.dll_GetProcessHeap]
test eax, eax
je 0x432c0f
mov dword [0x45f508], eax
push 0x18
push 0
push eax
call dword [sym.imp.kernel32.dll_HeapAlloc]
test eax, eax
je 0x432c0f
mov dword [eax], 0x45f0f8
mov dword [eax + 4], 0
mov ebx, eax
mov eax, dword [0x45f0f8]
test eax, eax
je 0x432be7
dec eax
push ebx
push eax
call dword [sym.imp.kernel32.dll_TlsSetValue]
mov dword [esp + 0xc], 0x45f0d4
mov eax, dword [0x45f0d4]
cmp eax, 2
je 0x432861
lea ecx, [esp + 0xc]
call fcn.00452c20
jmp 0x432861
call fcn.00452960
xor al, 1
mov dword [esp + 4], eax
movzx eax, byte [0x45f0e0]
test al, al
je 0x432895
lea eax, [0x45f0dc]
mov ecx, str.called__Result::unwrap____on_an__Err__value
mov edx, 0x2b
mov dword [esp + 0xc], eax
mov eax, dword [esp + 4]
mov byte [esp + 0x10], al
lea eax, [esp + 0xc]
push 0x45bd98
push 0x45bce4
push eax
call fcn.00450c00
mov esi, dword [edx + 4]
lock inc dword [esi + 0x100]
jg 0x432bd4
mov ecx, 7
int 0x29
ud2
mov esi, dword [edx + 4]
lock inc dword [esi]
jle 0x432c50
lea edx, [esp + 0x28]
push esi
push eax
call fcn.00451ee0
add esp, 8
jmp 0x432a75
mov ecx, 0x45f0f8
call fcn.004525d0
jmp 0x432b41
call fcn.00452960
test al, al
jne 0x4329e5
mov byte [0x45f0e0], 1
jmp 0x4329e5
mov ecx, 4
mov edx, 0x18
call fcn.00450740
lea eax, [esp + 0xc]
mov ecx, 0x45bdb8
mov edx, 0x46
push 0x45be50
push 0x45bca8
push eax
call fcn.00450c00
mov ecx, str.Ran_out_of_thread_IDsC:Users_runneradmin.cargo_registry_srcindex.crates.io_6f17d22bba15001f_thread_local_1.1.4_src_thread_id.rs
mov edx, 0x15
push 0x45bd88
call fcn.00450c80
mov ecx, 7
int 0x29
ud2