Function at 0x101a6db0
Capabilities:
Get thread local storage value

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x30
mov edi, ecx
mov eax, dword [0x102b0014]
xor eax, ebp
mov dword [ebp - 0x10], eax
call dword [sym.imp.kernel32.dll_GetCurrentThreadId]
mov esi, eax
lea ecx, [edi + 0x68]
mov dword [ebp - 0x3c], ecx
call fcn.101405b0
mov dword [ebp - 0x24], edi
mov edi, dword [edi + 0x58]
test edi, edi
je 0x101a708a
mov eax, edi
shr eax, 1
and eax, 0x55555555
mov ecx, edi
sub ecx, eax
mov eax, ecx
and eax, 0x33333333
shr ecx, 2
and ecx, 0x33333333
add ecx, eax
mov eax, ecx
shr eax, 4
add eax, ecx
and eax, 0xf0f0f0f
imul edx, eax, 0x1010101
shr edx, 0x18
cmp edx, 1
mov dword [ebp - 0x28], edx
ja 0x101a6e29
lea ecx, [edi - 1]
and ecx, esi
jmp 0x101a6e3a
mov ecx, esi
cmp esi, edi
jb 0x101a6e3a
mov eax, esi
xor edx, edx
div edi
mov ecx, edx
mov edx, dword [ebp - 0x28]
mov eax, dword [ebp - 0x24]
mov eax, dword [eax + 0x54]
mov dword [ebp - 0x30], eax
mov eax, dword [eax + ecx*4]
test eax, eax
je 0x101a708a
mov ebx, dword [eax]
test ebx, ebx
je 0x101a708a
lea eax, [edi - 1]
mov dword [ebp - 0x2c], eax
jmp 0x101a6e6f
cmp dword [ebx + 8], esi
je 0x101a6e96
mov ebx, dword [ebx]
test ebx, ebx
je 0x101a708a
mov eax, dword [ebx + 4]
cmp eax, esi
je 0x101a6e60
cmp edx, 1
ja 0x101a6e80
and eax, dword [ebp - 0x2c]
jmp 0x101a6e8d
cmp eax, edi
jb 0x101a6e8d
xor edx, edx
div edi
mov eax, edx
mov edx, dword [ebp - 0x28]
cmp eax, ecx
je 0x101a6e65
jmp 0x101a708a
cmp edx, 1
ja 0x101a6ea0
and esi, dword [ebp - 0x2c]
jmp 0x101a6eaf
cmp esi, edi
jb 0x101a6eaf
mov eax, esi
xor edx, edx
div edi
mov esi, edx
mov edx, dword [ebp - 0x28]
mov eax, dword [ebp - 0x30]
mov eax, dword [eax + esi*4]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov ecx, eax
mov eax, dword [eax]
cmp eax, ebx
jne 0x101a6ec0
mov eax, dword [ebp - 0x24]
add eax, 0x5c
cmp ecx, eax
je 0x101a6ef0
mov eax, dword [ecx + 4]
cmp edx, 1
ja 0x101a6edf
and eax, dword [ebp - 0x2c]
jmp 0x101a6eec
cmp eax, edi
jb 0x101a6eec
xor edx, edx
div edi
mov eax, edx
mov edx, dword [ebp - 0x28]
cmp eax, esi
je 0x101a6f1e
mov eax, dword [ebx]
test eax, eax
je 0x101a6f14
mov eax, dword [eax + 4]
cmp edx, 1
ja 0x101a6f03
and eax, dword [ebp - 0x2c]
jmp 0x101a6f10
cmp eax, edi
jb 0x101a6f10
xor edx, edx
div edi
mov eax, edx
mov edx, dword [ebp - 0x28]
cmp eax, esi
je 0x101a6f1e
mov eax, dword [ebp - 0x30]
mov dword [eax + esi*4], 0
mov eax, dword [ebx]
test eax, eax
je 0x101a6f34
mov dword [ebp - 0x28], eax
mov eax, dword [eax + 4]
cmp edx, 1
ja 0x101a6f38
and eax, dword [ebp - 0x2c]
jmp 0x101a6f42
xor edx, edx
jmp 0x101a6f54
cmp eax, edi
jb 0x101a6f42
xor edx, edx
div edi
mov eax, edx
cmp eax, esi
mov edx, dword [ebp - 0x28]
je 0x101a6f54
mov edx, dword [ebp - 0x24]
mov edx, dword [edx + 0x54]
mov dword [edx + eax*4], ecx
mov edx, dword [ebx]
mov dword [ecx], edx
mov dword [ebx], 0
mov eax, dword [ebp - 0x24]
add dword [eax + 0x60], 0xffffffff
test ebx, ebx
je 0x101a708a
call fcn.101aafb0
prefetcht0 byte [ebx]
mov esi, ebx
and esi, 0xffe00000
mov eax, ebx
shr eax, 9
and eax, 0xfe0
lea ecx, [esi + eax]
add ecx, 0x1000
movzx eax, byte [esi + eax + 0x101e]
mov edx, eax
neg edx
mov dword [ebp - 0x28], edx
shl eax, 5
mov dword [ebp - 0x2c], ecx
sub ecx, eax
prefetcht0 byte [ecx]
mov dword [ebp - 0x34], ecx
mov eax, ecx
and eax, 0xfffff000
mov edx, dword [eax]
cmp byte [edx], 2
mov dword [ebp - 0x24], edx
je 0x101a70a4
cmp byte [edx + 2], 0
je 0x101a71bd
mov eax, dword [ebp - 0x28]
shl eax, 5
mov ecx, dword [ebp - 0x2c]
mov edi, dword [ecx + eax + 8]
lea ecx, [edx + 0x10]
cmp ecx, edi
ja 0x101a71bd
lea eax, [edx + 0x1110]
cmp eax, edi
jb 0x101a71bd
mov dword [ebp - 0x30], ecx
mov esi, dword [0x102b910c]
call dword [sym.imp.kernel32.dll_GetLastError]
mov dword [ebp - 0x38], eax
push esi
call dword [sym.imp.kernel32.dll_TlsGetValue]
mov esi, eax
mov eax, dword [ebp - 0x38]
test eax, eax
jne 0x101a71a3
cmp esi, 2
mov edx, dword [ebp - 0x24]
mov eax, dword [ebp - 0x30]
jb 0x101a71bd
sub edi, eax
sar edi, 5
add dword [esi + 0x338], 1
adc dword [esi + 0x33c], 0
cmp edi, 0x30
ja 0x101a71af
mov eax, dword [esi + edi*8]
bswap eax
mov dword [ebx], eax
not eax
mov dword [ebx + 4], eax
mov dword [esi + edi*8], ebx
add byte [esi + edi*8 + 4], 1
movzx eax, word [esi + edi*8 + 6]
add dword [esi + 0x308], eax
add dword [esi + 0x340], 1
adc dword [esi + 0x344], 0
mov al, byte [esi + edi*8 + 5]
cmp byte [esi + edi*8 + 4], al
ja 0x101a728a
mov al, byte [esi + 0x30c]
test al, 1
jne 0x101a72a0
mov ecx, dword [ebp - 0x3c]
call fcn.101405bc
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.10205d16
add esp, 0x30
pop esi
pop edi
pop ebx
pop ebp
ret
mov al, byte [0x102b323c]
cmp al, 2
je 0x101a72ba
mov ecx, dword [ebp - 0x28]
shl ecx, 5
mov eax, dword [ebp - 0x2c]
mov eax, dword [eax + ecx + 8]
mov edi, dword [ebp - 0x24]
lea edx, [edi + 0x10]
cmp edx, eax
mov edx, edi
ja 0x101a6fc0
mov edx, dword [ebp - 0x24]
add edx, 0x1110
cmp edx, eax
mov edx, dword [ebp - 0x24]
jb 0x101a6fc0
mov edx, dword [ebp - 0x2c]
cmp byte [edx + ecx + 0x11], 0
jne 0x101a72c4
lea ecx, [eax + 0xc]
mov dword [ebp - 0x34], ecx
mov eax, dword [eax + 0xc]
mov dword [ebp - 0x2c], eax
mov eax, dword [ebp - 0x34]
mov eax, dword [eax]
mov dword [ebp - 0x28], eax
mov eax, dword [0x102b3228]
and eax, 1
shl eax, 0xf
lea ecx, [eax + esi]
mov dword [ebp - 0x24], ecx
add esi, eax
add esi, 0x4000
mov edx, ebx
shr edx, 8
and edx, 0x1fff
mov ecx, ebx
shr cl, 3
mov edi, 1
shl edi, cl
mov eax, dword [ebp - 0x24]
mov eax, dword [eax + edx*4 + 0x4000]
mov ecx, eax
or ecx, edi
lock cmpxchg dword [esi + edx*4], ecx
jne 0x101a713e
test eax, edi
jne 0x101a72cd
mov eax, dword [ebp - 0x2c]
mov esi, eax
lock xadd dword [0x102b3220], esi
add esi, eax
mov edi, dword [0x102b3224]
cmp byte [0x102b323d], 1
jne 0x101a717d
push dword [ebp - 0x28]
push 0
push ebx
call fcn.10208980
add esp, 0xc
cmp esi, edi
jbe 0x101a708a
mov al, byte [0x102b323c]
test al, al
jne 0x101a708a
mov ecx, 0x102b3220
push 1
call fcn.101a1290
jmp 0x101a708a
push eax
call dword [sym.imp.kernel32.dll_SetLastError]
jmp 0x101a7016
add dword [esi + 0x348], 1
adc dword [esi + 0x34c], 0
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
add edx, 8
mov esi, 1
mov dword [ebp - 0x30], 0
mov eax, dword [sym.imp.kernel32.dll_TryAcquireSRWLockExclusive]
mov dword [ebp - 0x24], edx
push edx
mov edi, eax
call eax
test al, al
jne 0x101a721f
mov ecx, esi
mov eax, esi
test esi, esi
jle 0x101a71fd
pause
add eax, 0xffffffff
jne 0x101a71f3
add dword [ebp - 0x30], esi
add esi, esi
cmp esi, 0x40
mov eax, 0x40
cmovge esi, eax
cmp dword [ebp - 0x30], 0x3e8
mov edx, dword [ebp - 0x24]
mov eax, edi
jl 0x101a71e2
push edx
call dword [sym.imp.kernel32.dll_AcquireSRWLockExclusive]
mov ecx, dword [ebp - 0x34]
mov eax, dword [ecx]
cmp eax, ebx
je 0x101a72d2
bswap eax
mov dword [ebx], eax
not eax
mov dword [ebx + 4], eax
mov dword [ecx], ebx
mov edx, dword [ebp - 0x28]
shl edx, 5
mov ecx, dword [ebp - 0x2c]
movzx eax, word [ecx + edx + 0xc]
add eax, 0xffffffff
mov word [ecx + edx + 0xc], ax
test ax, ax
jle 0x101a72ac
mov dword [ebp - 0x20], 0
mov dword [ebp - 0x1c], 0
mov esi, dword [ebp - 0x20]
mov eax, dword [ebp - 0x1c]
mov dword [ebp - 0x14], eax
mov dword [ebp - 0x18], esi
push dword [ebp - 0x24]
call dword [sym.imp.kernel32.dll_ReleaseSRWLockExclusive]
test esi, esi
je 0x101a708a
lea ecx, [ebp - 0x18]
call fcn.101aaf80
jmp 0x101a708a
lea edx, [esi + edi*8]
movzx eax, al
shr eax, 1
mov ecx, esi
push eax
push edx
call fcn.101a35a0
jmp 0x101a707c
mov ecx, esi
call fcn.101a2dd0
jmp 0x101a708a
lea eax, [ebp - 0x20]
mov ecx, dword [ebp - 0x34]
push eax
call fcn.101aad90
jmp 0x101a7260
call fcn.101a12f0
jmp 0x101a70b1
add dword [ebp - 0x34], 0x20
jmp 0x101a70f6
call fcn.101a37b0
int3