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

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x28
mov eax, dword [0x4630f8]
mov ebp, edx
mov edi, ecx
test eax, eax
je 0x430e97
dec eax
push eax
call dword [sym.imp.kernel32.dll_TlsGetValue]
cmp eax, 1
jbe 0x430d31
cmp dword [eax + 4], 0
mov ebx, eax
jne 0x431046
mov eax, dword [0x4630f8]
test eax, eax
je 0x430eb6
dec eax
push eax
call dword [sym.imp.kernel32.dll_TlsGetValue]
test eax, eax
je 0x430ecf
mov ebx, eax
cmp eax, 1
je 0x43111a
mov dword [esp + 0xc], 0x4630d4
mov eax, dword [0x4630d4]
cmp eax, 2
jne 0x430f40
lea eax, [0x4630dc]
push eax
call dword [sym.imp.kernel32.dll_AcquireSRWLockExclusive]
mov eax, dword [0x463510]
test eax, 0x7fffffff
jne 0x430f4e
xor edx, edx
movzx eax, byte [0x4630e0]
test al, al
jne 0x430f67
mov esi, dword [0x4630ec]
mov dword [esp + 0x24], edi
mov dword [esp + 0x20], ebp
test esi, esi
je 0x430df8
mov ebp, esi
mov dword [esp], edx
dec ebp
mov dword [0x4630ec], ebp
mov edx, dword [0x4630e4]
mov edi, dword [edx + esi*4 - 4]
je 0x430e11
mov dword [esp + 8], edi
mov eax, dword [edx]
xor edi, edi
mov ecx, dword [esp + 8]
mov dword [esp + 4], eax
mov dword [edx], ecx
mov ecx, ebp
sub ecx, 2
cmovb ecx, edi
cmp esi, 4
jae 0x430e19
cmp ebp, 2
jne 0x430f97
xor edi, edi
mov ebp, 1
jmp 0x430e43
mov edi, dword [0x4630f0]
mov eax, edi
inc eax
je 0x43113d
mov dword [0x4630f0], eax
jmp 0x430f9e
mov edx, dword [esp]
jmp 0x430f9e
mov ebp, 1
nop
mov eax, edi
mov edi, dword [edx + ebp*4]
cmp edi, dword [edx + ebp*4 + 4]
mov edi, ebp
sbb edi, 0xffffffff
mov ebp, dword [edx + edi*4]
mov dword [edx + eax*4], ebp
lea ebp, [edi + edi + 1]
cmp ebp, ecx
jbe 0x430e20
add esi, 0xfffffffe
cmp ebp, esi
jne 0x430e54
mov eax, dword [edx + ebp*4]
mov dword [edx + edi*4], eax
mov eax, dword [esp + 8]
mov edi, ebp
mov dword [edx + ebp*4], eax
jmp 0x430e70
mov eax, dword [esp + 8]
test edi, edi
mov dword [edx + edi*4], eax
je 0x430f92
nop word cs:[eax + eax]
nop dword [eax]
lea esi, [edi - 1]
mov ecx, esi
shr ecx, 1
mov ebp, dword [edx + ecx*4]
cmp ebp, eax
jbe 0x430e8d
mov dword [edx + edi*4], ebp
cmp esi, 2
mov edi, ecx
jae 0x430e70
jmp 0x430f94
mov ecx, edi
mov dword [edx + edi*4], eax
jmp 0x430f97
mov ecx, 0x4630f8
call fcn.004558c0
push eax
call dword [sym.imp.kernel32.dll_TlsGetValue]
cmp eax, 1
ja 0x430d25
jmp 0x430d31
mov ecx, 0x4630f8
call fcn.004558c0
push eax
call dword [sym.imp.kernel32.dll_TlsGetValue]
test eax, eax
jne 0x430d4e
movzx eax, byte [0x463514]
mov eax, dword [0x4634c8]
test eax, eax
jne 0x430ef2
call dword [sym.imp.kernel32.dll_GetProcessHeap]
test eax, eax
je 0x431109
mov dword [0x4634c8], eax
push 0x18
push 0
push eax
call dword [sym.imp.kernel32.dll_HeapAlloc]
test eax, eax
je 0x431109
mov dword [eax], 0x4630f8
mov dword [eax + 4], 0
mov ebx, eax
mov eax, dword [0x4630f8]
test eax, eax
je 0x4310e1
dec eax
push ebx
push eax
call dword [sym.imp.kernel32.dll_TlsSetValue]
mov dword [esp + 0xc], 0x4630d4
mov eax, dword [0x4630d4]
cmp eax, 2
je 0x430d6f
lea ecx, [esp + 0xc]
call fcn.00455f50
jmp 0x430d6f
call fcn.00455ca0
mov edx, eax
xor dl, 1
movzx eax, byte [0x4630e0]
test al, al
je 0x430d9d
lea eax, [0x4630dc]
mov ecx, str.called__Result::unwrap____on_an__Err__value
mov dword [esp + 0xc], eax
mov byte [esp + 0x10], dl
lea eax, [esp + 0xc]
mov edx, 0x2b
push 0x45ecc4
push 0x45ec20
jmp 0x431132
xor ecx, ecx
mov dword [edx + ecx*4], eax
mov edx, dword [esp]
mov edi, dword [esp + 4]
mov ecx, 0x20
test edi, edi
mov eax, 0x20
je 0x430fb2
bsr eax, edi
xor eax, 0x1f
sub ecx, eax
xor eax, eax
mov esi, 1
mov ebp, edi
mov dword [esp + 4], edi
mov dword [esp], ecx
sub ecx, 1
cmovb ecx, eax
btc ebp, ecx
shl esi, cl
test edi, edi
cmove ebp, edi
test dl, dl
lea edi, [ebx + 4]
jne 0x430feb
mov eax, dword [0x463510]
test eax, 0x7fffffff
jne 0x4310f0
lea eax, [0x4630dc]
push eax
call dword [sym.imp.kernel32.dll_ReleaseSRWLockExclusive]
mov eax, dword [edi + 0x10]
mov ecx, dword [esp]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 4]
movsd xmm0, qword [edi]
movsd xmm1, qword [edi + 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], esi
mov dword [ebx + 0x14], ebp
cmp dword [esp + 0xc], 0
je 0x43103e
lea ecx, [esp + 0x10]
call fcn.004512f0
mov edi, dword [esp + 0x24]
mov ebp, dword [esp + 0x20]
add ebx, 8
movdqu xmm0, xmmword [ebx]
pshufd xmm1, xmm0, 0x55
movd eax, xmm1
mov eax, dword [ebp + eax*4 + 8]
test eax, eax
je 0x431082
pshufd xmm1, xmm0, 0xff
movd ecx, xmm1
lea ecx, [ecx + ecx*2]
cmp byte [eax + ecx*4 + 8], 0
je 0x431082
lea eax, [eax + ecx*4]
mov dword [edi], eax
mov byte [edi + 4], 2
add esp, 0x28
pop esi
pop edi
pop ebx
pop ebp
ret
mov eax, dword [esp + 0x3c]
movdqu xmmword [esp + 0xc], xmm0
mov ecx, dword [eax]
mov eax, dword [ecx]
test eax, eax
je 0x4310ae
cmp eax, 1
jne 0x4310c3
mov esi, dword [ecx + 4]
lock inc dword [esi + 0xc0]
jg 0x4310cf
mov ecx, 7
int 0x29
ud2
mov esi, dword [ecx + 4]
lock inc dword [esi + 0x100]
jg 0x4310cf
mov ecx, 7
int 0x29
ud2
mov esi, dword [ecx + 4]
lock inc dword [esi]
jle 0x431156
lea edx, [esp + 0xc]
mov ecx, ebp
push esi
push eax
call fcn.00454fa0
add esp, 8
jmp 0x431074
mov ecx, 0x4630f8
call fcn.004558c0
jmp 0x430f22
call fcn.00455ca0
test al, al
jne 0x430feb
mov byte [0x4630e0], 1
jmp 0x430feb
mov ecx, 4
mov edx, 0x18
call fcn.004537a0
ud2
lea eax, [esp + 0xc]
mov ecx, 0x45ece4
mov edx, 0x46
push 0x45ed7c
push 0x45ebe4
push eax
call fcn.00453cb0
add esp, 0xc
ud2
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 0x45ecb4
call fcn.00453d30
add esp, 4
ud2
mov ecx, 7
int 0x29
ud2