Function at 0x4534b0
Capabilities:
Query environment variable
Set environment variable

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
sub esp, 0x228
mov eax, dword [sym.imp.kernel32.dll_SetEnvironmentVariableW]
mov dword [esp + 4], 0x596ca8
mov dword [esp], 0x596cc4
mov dword [ebp - 0x214], eax
call eax
sub esp, 8
mov ebx, eax
test eax, eax
jne 0x4534f1
mov eax, dword fs:[0x18]
cmp dword [eax + 0x34], 0x78
je 0x453dd0
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xd8
mov esi, dword fs:[0x18]
mov eax, dword [esi + 0x34]
mov dword [esp + 4], str.unexpected_error_in_SetEnvironmentVariableW__GetLastError_ld_n
mov dword [esp + 8], eax
xor eax, eax
cmp ebx, 1
sete al
mov dword [esp], eax
call fcn.00453360
mov dword [esi + 0x34], 0xdeadbeef
mov ebx, dword [sym.imp.kernel32.dll_GetEnvironmentVariableW]
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], 0x596cc4
call ebx
sub esp, 0xc
mov esi, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xdf
mov eax, 0x596ca8
lea esi, [esi]
nop
add eax, 2
cmp word [eax], 0
jne 0x453570
sub eax, 0x596ca8
mov dword [esp + 8], esi
sar eax, 1
mov dword [esp + 4], str.should_return_length_with_terminating_0_ret_size_ld_n
add eax, 1
cmp eax, esi
lea esi, [ebp - 0x20c]
sete al
movzx eax, al
mov dword [esp], eax
call fcn.00453360
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xe2
mov eax, dword fs:[0x18]
mov edx, dword [eax + 0x34]
mov dword [esp + 4], str.should_not_fail_with_zero_size_but_GetLastError_ld_n
mov dword [esp + 8], edx
cmp dword [eax + 0x34], 0xdeadbeef
sete al
movzx eax, al
mov dword [esp], eax
call fcn.00453360
xor eax, eax
lea esi, [esi]
nop
movzx edx, word [eax + 0x596ca0]
mov word [esi + eax], dx
add eax, 2
test dx, dx
jne 0x4535e8
mov eax, 0x596ca8
add eax, 2
cmp word [eax], 0
jne 0x453600
sub eax, 0x596ca8
mov dword [esp + 4], esi
sar eax, 1
mov dword [esp], 0x596cc4
mov dword [esp + 8], eax
call ebx
sub esp, 0xc
mov edi, eax
mov dword [esp + 0x1c], 0
mov dword [esp + 0x18], 0
mov dword [esp + 0x14], 0x104
mov dword [esp + 0x10], 0x747cc0
mov dword [esp + 0xc], 0xffffffff
mov dword [esp + 8], esi
mov dword [esp + 4], 0
mov dword [esp], 0
call dword [sym.imp.kernel32.dll_WideCharToMultiByte]
sub esp, 0x20
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xe7
mov eax, dword [sym.imp.kernel32.dll_lstrcmpW]
mov dword [esp + 4], 0x596ca0
mov dword [esp], esi
mov dword [ebp - 0x210], eax
call eax
mov ecx, eax
sub esp, 8
mov eax, 1
test ecx, ecx
je 0x4536c1
cmp word [ebp - 0x20c], 0
je 0x4536c1
mov eax, esi
nop
add eax, 2
cmp word [eax], 0
jne 0x4536b0
cmp eax, esi
sete al
movzx eax, al
mov dword [esp], eax
mov dword [esp + 8], 0x747cc0
mov dword [esp + 4], str.Expected_untouched_or_empty_buffer__got___s__n
call fcn.00453360
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xeb
mov eax, 0x596ca8
add eax, 2
cmp word [eax], 0
jne 0x4536f0
sub eax, 0x596ca8
mov dword [esp + 8], edi
sar eax, 1
mov dword [esp + 4], str.should_return_length_with_terminating_0_ret_size_ld_n
add eax, 1
cmp eax, edi
sete al
movzx eax, al
mov dword [esp], eax
call fcn.00453360
xor eax, eax
lea esi, [esi]
movzx edx, word [eax + 0x596ca0]
mov word [esi + eax], dx
add eax, 2
test dx, dx
jne 0x453728
mov eax, 0x596ca8
add eax, 2
cmp word [eax], 0
jne 0x453740
sub eax, 0x596ca8
mov dword [esp + 4], esi
sar eax, 1
mov dword [esp], 0x596cc4
add eax, 1
mov dword [esp + 8], eax
call ebx
sub esp, 0xc
mov edi, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xf0
mov dword [esp + 4], 0x596ca8
mov dword [esp], esi
mov eax, dword [ebp - 0x210]
call eax
sub esp, 8
test eax, eax
sete al
mov dword [esp + 4], str.should_touch_the_buffer_n
movzx eax, al
mov dword [esp], eax
call fcn.00453360
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xf1
mov eax, 0x596ca8
add eax, 2
cmp word [eax], 0
jne 0x4537c0
sub eax, 0x596ca8
mov dword [esp + 8], edi
sar eax, 1
mov dword [esp + 4], str.should_return_length_without_terminating_0_ret_size_ld_n
cmp eax, edi
sete al
movzx eax, al
mov dword [esp], eax
call fcn.00453360
xor eax, eax
nop
movzx edx, word [eax + 0x596ca0]
mov word [esi + eax], dx
add eax, 2
test dx, dx
jne 0x4537f0
mov eax, 0x596ca8
lea esi, [esi]
nop
add eax, 2
cmp word [eax], 0
jne 0x453810
sub eax, 0x596ca8
mov dword [esp + 4], esi
sar eax, 1
mov dword [esp], 0x596c84
add eax, 1
mov dword [esp + 8], eax
call ebx
sub esp, 0xc
mov edi, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xf6
mov dword [esp + 4], 0x596ca8
mov dword [esp], esi
mov eax, dword [ebp - 0x210]
call eax
sub esp, 8
test eax, eax
sete al
mov dword [esp + 4], str.should_touch_the_buffer_n
movzx eax, al
mov dword [esp], eax
call fcn.00453360
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xf7
mov eax, 0x596ca8
add eax, 2
cmp word [eax], 0
jne 0x453890
sub eax, 0x596ca8
mov dword [esp + 8], edi
sar eax, 1
mov dword [esp + 4], str.should_return_length_without_terminating_0_ret_size_ld_n
cmp eax, edi
sete al
movzx eax, al
mov dword [esp], eax
call fcn.00453360
mov dword [esp + 4], 0
mov dword [esp], 0x596c84
mov eax, dword [ebp - 0x214]
call eax
sub esp, 8
mov edi, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xfc
xor eax, eax
cmp edi, 1
sete al
mov dword [esp + 4], str.should_erase_existing_variable_n
mov dword [esp], eax
call fcn.00453360
xor eax, eax
lea esi, [esi]
movzx edx, word [eax + 0x596ca0]
mov word [esi + eax], dx
add eax, 2
test dx, dx
jne 0x453908
mov eax, dword fs:[0x18]
mov dword [eax + 0x34], 0xdeadbeef
mov eax, 0x596ca8
lea esi, [esi]
add eax, 2
cmp word [eax], 0
jne 0x453930
sub eax, 0x596ca8
mov dword [esp + 4], esi
sar eax, 1
mov dword [esp], 0x596cc4
add eax, 1
mov dword [esp + 8], eax
call ebx
sub esp, 0xc
mov edi, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x101
mov dword [esp + 4], 0x596ca0
mov dword [esp], esi
mov eax, dword [ebp - 0x210]
call eax
sub esp, 8
test eax, eax
sete al
mov dword [esp + 4], str.should_not_touch_the_buffer_n
movzx eax, al
mov dword [esp], eax
call fcn.00453360
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x102
xor eax, eax
mov ecx, dword fs:[0x18]
mov edx, dword [ecx + 0x34]
test edi, edi
je 0x453d90
mov dword [esp + 0xc], edx
mov dword [esp + 8], edi
mov dword [esp], eax
mov dword [esp + 4], str.should_not_find_variable_but_ret_size_ld_GetLastError_ld_n
call fcn.00453360
mov dword [esp + 4], 0x596ca8
mov dword [esp], 0x596cc4
mov eax, dword [ebp - 0x214]
call eax
sub esp, 8
mov edi, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x108
mov eax, dword fs:[0x18]
mov eax, dword [eax + 0x34]
mov dword [esp + 4], str.unexpected_error_in_SetEnvironmentVariableW__GetLastError_ld_n
mov dword [esp + 8], eax
xor eax, eax
cmp edi, 1
sete al
mov dword [esp], eax
call fcn.00453360
xor eax, eax
lea esi, [esi]
movzx edx, word [eax + 0x596ca0]
mov word [esi + eax], dx
add eax, 2
test dx, dx
jne 0x453a30
mov eax, 0x596ca8
lea esi, [esi]
nop
add eax, 2
cmp word [eax], 0
jne 0x453a50
sub eax, 0x596ca8
mov dword [esp + 4], esi
sar eax, 1
mov dword [esp], 0x596cc4
add eax, 1
mov dword [esp + 8], eax
call ebx
sub esp, 0xc
mov edi, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x10e
mov dword [esp + 4], 0x596ca8
mov dword [esp], esi
mov eax, dword [ebp - 0x210]
call eax
sub esp, 8
test eax, eax
sete al
mov dword [esp + 4], str.should_touch_the_buffer_n
movzx eax, al
mov dword [esp], eax
call fcn.00453360
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x10f
mov eax, 0x596ca8
add eax, 2
cmp word [eax], 0
jne 0x453ad0
sub eax, 0x596ca8
mov dword [esp + 8], edi
sar eax, 1
mov dword [esp + 4], str.should_return_length_without_terminating_0_ret_size_ld_n
cmp eax, edi
sete al
movzx eax, al
mov dword [esp], eax
call fcn.00453360
mov dword [esp + 4], 0x596c82
mov dword [esp], 0x596c84
mov eax, dword [ebp - 0x214]
call eax
sub esp, 8
mov edi, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x113
mov eax, dword fs:[0x18]
mov eax, dword [eax + 0x34]
mov dword [esp + 4], str.should_not_fail_with_empty_value_but_GetLastError_ld_n
mov dword [esp + 8], eax
xor eax, eax
cmp edi, 1
sete al
mov dword [esp], eax
call fcn.00453360
xor eax, eax
lea esi, [esi]
movzx edx, word [eax + 0x596ca0]
mov word [esi + eax], dx
add eax, 2
test dx, dx
jne 0x453b58
mov eax, dword fs:[0x18]
mov dword [eax + 0x34], 0xdeadbeef
mov eax, 0x596ca8
lea esi, [esi]
add eax, 2
cmp word [eax], 0
jne 0x453b80
sub eax, 0x596ca8
mov dword [esp + 4], esi
sar eax, 1
mov dword [esp], 0x596cc4
add eax, 1
mov dword [esp + 8], eax
call ebx
sub esp, 0xc
mov edi, eax
call fcn.0057d110
xor ecx, ecx
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x118
mov eax, dword fs:[0x18]
mov edx, dword [eax + 0x34]
test edi, edi
je 0x453d70
mov dword [esp + 0xc], edx
mov dword [esp], ecx
mov dword [esp + 8], edi
mov dword [esp + 4], str.should_be_set_to_____NT__or_removed__Win9x__but_ret_size_ld_GetLastError_ld_n
call fcn.00453360
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x11d
mov dword [esp], esi
mov dword [esp + 4], 0x596c82
mov eax, dword [ebp - 0x210]
call eax
sub esp, 8
test eax, eax
sete al
mov dword [esp + 4], str.should_copy_an_empty_string_n
movzx eax, al
mov dword [esp], eax
mov edi, dword fs:[0x18]
call fcn.00453360
mov dword [edi + 0x34], 0xdeadbeef
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], 0x596cc4
call ebx
sub esp, 0xc
mov esi, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x121
mov eax, 1
mov edx, dword [edi + 0x34]
cmp esi, 1
je 0x453c7f
mov eax, esi
or eax, dword [0x8f0770]
sete al
movzx eax, al
mov dword [esp + 0xc], edx
mov dword [esp], eax
mov dword [esp + 8], esi
mov dword [esp + 4], str.should_return_1_for_empty_string_but_ret_size_ld_GetLastError_ld_n
call fcn.00453360
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x125
mov eax, 1
mov edx, dword fs:[0x18]
mov ecx, dword [edx + 0x34]
cmp ecx, 0xdeadbeef
je 0x453cd8
mov esi, dword [0x8f0770]
cmp ecx, 0xea
sete dl
xor eax, eax
test esi, esi
sete al
and eax, edx
mov dword [esp + 8], ecx
mov dword [esp + 4], str.should_not_fail_with_zero_size_but_GetLastError_ld_n
mov dword [esp], eax
mov esi, dword fs:[0x18]
call fcn.00453360
mov dword [esi + 0x34], 0xdeadbeef
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], 0
call ebx
sub esp, 0xc
mov ebx, eax
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0x12c
xor eax, eax
mov edx, dword [esi + 0x34]
test ebx, ebx
jne 0x453d48
mov eax, 1
cmp edx, 0x57
je 0x453d48
xor eax, eax
cmp edx, 0xcb
sete al
mov dword [esp + 0xc], edx
mov dword [esp + 8], ebx
mov dword [esp + 4], str.should_not_find_variable_but_ret_size_ld_GetLastError_ld_n
mov dword [esp], eax
call fcn.00453360
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
cmp edx, 0xdeadbeef
je 0x453da0
xor ecx, ecx
mov eax, dword fs:[0x18]
cmp dword [eax + 0x34], 0xcb
sete cl
jmp 0x453bce
xor eax, eax
cmp edx, 0xcb
sete al
jmp 0x4539bf
mov dword [ebp - 0x214], edx
mov dword [esp + 4], 0x596c82
mov dword [esp], esi
mov eax, dword [ebp - 0x210]
call eax
mov edx, dword [ebp - 0x214]
sub esp, 8
test eax, eax
jne 0x453d78
mov ecx, 1
jmp 0x453bce
call fcn.0057d110
mov dword [eax], 0x595e93
mov dword [eax + 4], 0xd5
mov dword [esp], str.SetEnvironmentVariableW_is_not_implemented_n
call fcn.00453330
jmp 0x453d60