
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* wchar_t* std::wstring::_S_construct<wchar_t const*>(wchar_t const*, wchar_t const*,
   std::allocator<wchar_t> const&, std::forward_iterator_tag) [clone .part.25] */

wchar_t * __regparm3
std::wstring::_S_construct<wchar_t_const*>(wchar_t *param_1,int param_2,allocator *param_3)

{
  uint *puVar1;
  uint __n;
  
  __n = param_2 - (int)param_1 >> 2;
  puVar1 = (uint *)_Rep::_S_create(__n,0,param_3);
  if (__n == 1) {
    puVar1[3] = *param_1;
  }
  else {
    wmemcpy((wchar_t *)(puVar1 + 3),param_1,__n);
  }
  if (puVar1 != (uint *)PTR__S_empty_rep_storage_003aed74) {
    puVar1[2] = 0;
    *puVar1 = __n;
    *(undefined4 *)((int)puVar1 + (param_2 - (int)param_1) + 0xc) = 0;
  }
  return (wchar_t *)(puVar1 + 3);
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

wchar_t * __regparm3 FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)

{
  size_t *psVar1;
  size_t __n;
  
  __n = param_2 - (int)param_1 >> 2;
  psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);
  if (__n == 1) {
    psVar1[3] = *param_1;
  }
  else {
    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);
  }
  if (psVar1 != (size_t *)PTR_DAT_003aed74) {
    psVar1[2] = 0;
    *psVar1 = __n;
    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;
  }
  return (wchar_t *)(psVar1 + 3);
}


PUSH EBP
MOV EBP,EAX
PUSH EDI
PUSH ESI
MOV ESI,EDX
PUSH EBX
SUB ESI,EAX
CALL 0x00036f20
ADD EBX,0x12d101
MOV EDI,ESI
SAR EDI,0x2
SUB ESP,0x20
PUSH ECX
PUSH 0x0
PUSH EDI
CALL 0x00281d30
ADD ESP,0x10
MOV EDX,EAX
LEA ECX,[EAX + 0xc]
CMP EDI,0x1
JZ 0x00281f58
MOV dword ptr [ESP + 0xc],EAX
SUB ESP,0x4
PUSH EDI
PUSH EBP
PUSH ECX
MOV dword ptr [ESP + 0x18],ECX
CALL 0x0002a380
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0xc]
MOV ECX,dword ptr [ESP + 0x8]
CMP EDX,dword ptr [EBX + 0xfffffd74]
JNZ 0x00281f66
ADD ESP,0x1c
MOV EAX,ECX
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [EBP]
MOV dword ptr [EDX + 0xc],EAX
CMP EDX,dword ptr [EBX + 0xfffffd74]
JZ 0x00281f49
MOV dword ptr [EDX + 0x8],0x0
MOV dword ptr [EDX],EDI
MOV dword ptr [EDX + ESI*0x1 + 0xc],0x0
JMP 0x00281f49
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nwchar_t * __regparm3 FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)\n\n{\n  size_t *psVar1;\n  size_t __n;\n  \n  __n = param_2 - (int)param_1 >> 2;\n  psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);\n  if (__n == 1) {\n    psVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_003aed74) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }\n  return (wchar_t *)(psVar1 + 3);\n}\n\n" comment (ERROR "wchar_t * __regparm3 FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)" (binary_expression "wchar_t * __regparm3 FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)" identifier * (ERROR "__regparm3" identifier) (call_expression "FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)" identifier (argument_list "(wchar_t *param_1,int param_2,undefined4 param_3)" ( (binary_expression "wchar_t *param_1" identifier * identifier) , (ERROR "int" identifier) identifier , identifier (ERROR "param_3" identifier) ))))) (compound_statement "{\n  size_t *psVar1;\n  size_t __n;\n  \n  __n = param_2 - (int)param_1 >> 2;\n  psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);\n  if (__n == 1) {\n    psVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_003aed74) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }\n  return (wchar_t *)(psVar1 + 3);\n}" { (declaration "size_t *psVar1;" primitive_type (pointer_declarator "*psVar1" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (expression_statement "__n = param_2 - (int)param_1 >> 2;" (assignment_expression "__n = param_2 - (int)param_1 >> 2" identifier = (binary_expression "param_2 - (int)param_1 >> 2" (binary_expression "param_2 - (int)param_1" identifier - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (expression_statement "psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);" (assignment_expression "psVar1 = (size_t *)FUN_00281d30(__n,0,param_3)" identifier = (cast_expression "(size_t *)FUN_00281d30(__n,0,param_3)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00281d30(__n,0,param_3)" identifier (argument_list "(__n,0,param_3)" ( identifier , number_literal , identifier ))))) ;) (if_statement "if (__n == 1) {\n    psVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }" if (parenthesized_expression "(__n == 1)" ( (binary_expression "__n == 1" identifier == number_literal) )) (compound_statement "{\n    psVar1[3] = *param_1;\n  }" { (expression_statement "psVar1[3] = *param_1;" (assignment_expression "psVar1[3] = *param_1" (subscript_expression "psVar1[3]" identifier [ number_literal ]) = (pointer_expression "*param_1" * identifier)) ;) }) (else_clause "else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }" else (compound_statement "{\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }" { (expression_statement "wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);" (call_expression "wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n)" identifier (argument_list "((wchar_t *)(psVar1 + 3),param_1,__n)" ( (cast_expression "(wchar_t *)(psVar1 + 3)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar1 + 3)" ( (binary_expression "psVar1 + 3" identifier + number_literal) ))) , identifier , identifier ))) ;) }))) (if_statement "if (psVar1 != (size_t *)PTR_DAT_003aed74) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }" if (parenthesized_expression "(psVar1 != (size_t *)PTR_DAT_003aed74)" ( (binary_expression "psVar1 != (size_t *)PTR_DAT_003aed74" identifier != (cast_expression "(size_t *)PTR_DAT_003aed74" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }" { (expression_statement "psVar1[2] = 0;" (assignment_expression "psVar1[2] = 0" (subscript_expression "psVar1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*psVar1 = __n;" (assignment_expression "*psVar1 = __n" (pointer_expression "*psVar1" * identifier) = identifier) ;) (expression_statement "*(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;" (assignment_expression "*(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0" (pointer_expression "*(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc)" * (cast_expression "(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)psVar1 + (param_2 - (int)param_1) + 0xc)" ( (binary_expression "(int)psVar1 + (param_2 - (int)param_1) + 0xc" (binary_expression "(int)psVar1 + (param_2 - (int)param_1)" (cast_expression "(int)psVar1" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(param_2 - (int)param_1)" ( (binary_expression "param_2 - (int)param_1" identifier - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) + number_literal) )))) = number_literal) ;) })) (return_statement "return (wchar_t *)(psVar1 + 3);" return (cast_expression "(wchar_t *)(psVar1 + 3)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar1 + 3)" ( (binary_expression "psVar1 + 3" identifier + number_literal) ))) ;) }))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* wchar_t* std::wstring::_S_construct<wchar_t const*>(wchar_t const*, wchar_t const*,\n   std::allocator<wchar_t> const&, std::forward_iterator_tag) [clone .part.25] */\n\nwchar_t * __regparm3\nstd::wstring::_S_construct<wchar_t_const*>(wchar_t *param_1,int param_2,allocator *param_3)\n\n{\n  uint *puVar1;\n  uint __n;\n  \n  __n = param_2 - (int)param_1 >> 2;\n  puVar1 = (uint *)_Rep::_S_create(__n,0,param_3);\n  if (__n == 1) {\n    puVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(puVar1 + 3),param_1,__n);\n  }\n  if (puVar1 != (uint *)PTR__S_empty_rep_storage_003aed74) {\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined4 *)((int)puVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }\n  return (wchar_t *)(puVar1 + 3);\n}\n\n" comment comment (ERROR "wchar_t * __regparm3\nstd::wstring::_S_construct<wchar_t_const*>(wchar_t *param_1,int param_2,allocator *param_3)" (binary_expression "wchar_t * __regparm3\nstd::wstring::_S_construct<wchar_t_const*>(wchar_t *param_1,int param_2,allocator *param_3)" (binary_expression "wchar_t * __regparm3\nstd::wstring::_S_construct<wchar_t_const" (binary_expression "wchar_t * __regparm3" identifier * identifier) (ERROR "std::wstring::_S_construct" identifier : : identifier : : identifier) < identifier) (ERROR "*" *) > (parenthesized_expression "(wchar_t *param_1,int param_2,allocator *param_3)" ( (comma_expression "wchar_t *param_1,int param_2,allocator *param_3" (binary_expression "wchar_t *param_1" identifier * identifier) , (ERROR "int" identifier) (comma_expression "param_2,allocator *param_3" identifier , (binary_expression "allocator *param_3" identifier * identifier))) )))) (compound_statement "{\n  uint *puVar1;\n  uint __n;\n  \n  __n = param_2 - (int)param_1 >> 2;\n  puVar1 = (uint *)_Rep::_S_create(__n,0,param_3);\n  if (__n == 1) {\n    puVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(puVar1 + 3),param_1,__n);\n  }\n  if (puVar1 != (uint *)PTR__S_empty_rep_storage_003aed74) {\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined4 *)((int)puVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }\n  return (wchar_t *)(puVar1 + 3);\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint __n;" type_identifier identifier ;) (expression_statement "__n = param_2 - (int)param_1 >> 2;" (assignment_expression "__n = param_2 - (int)param_1 >> 2" identifier = (binary_expression "param_2 - (int)param_1 >> 2" (binary_expression "param_2 - (int)param_1" identifier - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (ERROR "puVar1 = (uint *)_Rep::" (assignment_expression "puVar1 = (uint *)_Rep" identifier = (cast_expression "(uint *)_Rep" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) : :) (expression_statement "_S_create(__n,0,param_3);" (call_expression "_S_create(__n,0,param_3)" identifier (argument_list "(__n,0,param_3)" ( identifier , number_literal , identifier ))) ;) (if_statement "if (__n == 1) {\n    puVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(puVar1 + 3),param_1,__n);\n  }" if (parenthesized_expression "(__n == 1)" ( (binary_expression "__n == 1" identifier == number_literal) )) (compound_statement "{\n    puVar1[3] = *param_1;\n  }" { (expression_statement "puVar1[3] = *param_1;" (assignment_expression "puVar1[3] = *param_1" (subscript_expression "puVar1[3]" identifier [ number_literal ]) = (pointer_expression "*param_1" * identifier)) ;) }) (else_clause "else {\n    wmemcpy((wchar_t *)(puVar1 + 3),param_1,__n);\n  }" else (compound_statement "{\n    wmemcpy((wchar_t *)(puVar1 + 3),param_1,__n);\n  }" { (expression_statement "wmemcpy((wchar_t *)(puVar1 + 3),param_1,__n);" (call_expression "wmemcpy((wchar_t *)(puVar1 + 3),param_1,__n)" identifier (argument_list "((wchar_t *)(puVar1 + 3),param_1,__n)" ( (cast_expression "(wchar_t *)(puVar1 + 3)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + 3)" ( (binary_expression "puVar1 + 3" identifier + number_literal) ))) , identifier , identifier ))) ;) }))) (if_statement "if (puVar1 != (uint *)PTR__S_empty_rep_storage_003aed74) {\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined4 *)((int)puVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }" if (parenthesized_expression "(puVar1 != (uint *)PTR__S_empty_rep_storage_003aed74)" ( (binary_expression "puVar1 != (uint *)PTR__S_empty_rep_storage_003aed74" identifier != (cast_expression "(uint *)PTR__S_empty_rep_storage_003aed74" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined4 *)((int)puVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }" { (expression_statement "puVar1[2] = 0;" (assignment_expression "puVar1[2] = 0" (subscript_expression "puVar1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*puVar1 = __n;" (assignment_expression "*puVar1 = __n" (pointer_expression "*puVar1" * identifier) = identifier) ;) (expression_statement "*(undefined4 *)((int)puVar1 + (param_2 - (int)param_1) + 0xc) = 0;" (assignment_expression "*(undefined4 *)((int)puVar1 + (param_2 - (int)param_1) + 0xc) = 0" (pointer_expression "*(undefined4 *)((int)puVar1 + (param_2 - (int)param_1) + 0xc)" * (cast_expression "(undefined4 *)((int)puVar1 + (param_2 - (int)param_1) + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar1 + (param_2 - (int)param_1) + 0xc)" ( (binary_expression "(int)puVar1 + (param_2 - (int)param_1) + 0xc" (binary_expression "(int)puVar1 + (param_2 - (int)param_1)" (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(param_2 - (int)param_1)" ( (binary_expression "param_2 - (int)param_1" identifier - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) + number_literal) )))) = number_literal) ;) })) (return_statement "return (wchar_t *)(puVar1 + 3);" return (cast_expression "(wchar_t *)(puVar1 + 3)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + 3)" ( (binary_expression "puVar1 + 3" identifier + number_literal) ))) ;) }))
(translation_unit "wchar_t * __regparm3 FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)\n\n{\n  size_t *psVar1;\n  size_t __n;\n  \n  __n = param_2 - (int)param_1 >> 2;\n  psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);\n  if (__n == 1) {\n    psVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_003aed74) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }\n  return (wchar_t *)(psVar1 + 3);\n}\n\n" (ERROR "wchar_t * __regparm3 FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)" (binary_expression "wchar_t * __regparm3 FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)" identifier * (ERROR "__regparm3" identifier) (call_expression "FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)" identifier (argument_list "(wchar_t *param_1,int param_2,undefined4 param_3)" ( (binary_expression "wchar_t *param_1" identifier * identifier) , (ERROR "int" identifier) identifier , identifier (ERROR "param_3" identifier) ))))) (compound_statement "{\n  size_t *psVar1;\n  size_t __n;\n  \n  __n = param_2 - (int)param_1 >> 2;\n  psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);\n  if (__n == 1) {\n    psVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_003aed74) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }\n  return (wchar_t *)(psVar1 + 3);\n}" { (declaration "size_t *psVar1;" primitive_type (pointer_declarator "*psVar1" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (expression_statement "__n = param_2 - (int)param_1 >> 2;" (assignment_expression "__n = param_2 - (int)param_1 >> 2" identifier = (binary_expression "param_2 - (int)param_1 >> 2" (binary_expression "param_2 - (int)param_1" identifier - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (expression_statement "psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);" (assignment_expression "psVar1 = (size_t *)FUN_00281d30(__n,0,param_3)" identifier = (cast_expression "(size_t *)FUN_00281d30(__n,0,param_3)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00281d30(__n,0,param_3)" identifier (argument_list "(__n,0,param_3)" ( identifier , number_literal , identifier ))))) ;) (if_statement "if (__n == 1) {\n    psVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }" if (parenthesized_expression "(__n == 1)" ( (binary_expression "__n == 1" identifier == number_literal) )) (compound_statement "{\n    psVar1[3] = *param_1;\n  }" { (expression_statement "psVar1[3] = *param_1;" (assignment_expression "psVar1[3] = *param_1" (subscript_expression "psVar1[3]" identifier [ number_literal ]) = (pointer_expression "*param_1" * identifier)) ;) }) (else_clause "else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }" else (compound_statement "{\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }" { (expression_statement "wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);" (call_expression "wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n)" identifier (argument_list "((wchar_t *)(psVar1 + 3),param_1,__n)" ( (cast_expression "(wchar_t *)(psVar1 + 3)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar1 + 3)" ( (binary_expression "psVar1 + 3" identifier + number_literal) ))) , identifier , identifier ))) ;) }))) (if_statement "if (psVar1 != (size_t *)PTR_DAT_003aed74) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }" if (parenthesized_expression "(psVar1 != (size_t *)PTR_DAT_003aed74)" ( (binary_expression "psVar1 != (size_t *)PTR_DAT_003aed74" identifier != (cast_expression "(size_t *)PTR_DAT_003aed74" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }" { (expression_statement "psVar1[2] = 0;" (assignment_expression "psVar1[2] = 0" (subscript_expression "psVar1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*psVar1 = __n;" (assignment_expression "*psVar1 = __n" (pointer_expression "*psVar1" * identifier) = identifier) ;) (expression_statement "*(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;" (assignment_expression "*(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0" (pointer_expression "*(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc)" * (cast_expression "(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)psVar1 + (param_2 - (int)param_1) + 0xc)" ( (binary_expression "(int)psVar1 + (param_2 - (int)param_1) + 0xc" (binary_expression "(int)psVar1 + (param_2 - (int)param_1)" (cast_expression "(int)psVar1" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(param_2 - (int)param_1)" ( (binary_expression "param_2 - (int)param_1" identifier - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) + number_literal) )))) = number_literal) ;) })) (return_statement "return (wchar_t *)(psVar1 + 3);" return (cast_expression "(wchar_t *)(psVar1 + 3)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar1 + 3)" ( (binary_expression "psVar1 + 3" identifier + number_literal) ))) ;) }))
(translation_unit (ERROR (binary_expression IDENT * (ERROR IDENT) (call_expression IDENT (argument_list ( (binary_expression IDENT * IDENT) , (ERROR IDENT) IDENT , IDENT (ERROR IDENT) ))))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * IDENT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , IDENT , IDENT ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (parenthesized_expression ( (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) + LIT) )))) = LIT) ;) })) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) ;) }))
(ERROR "wchar_t * __regparm3 FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)" (binary_expression "wchar_t * __regparm3 FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)" (identifier "wchar_t") (* "*") (ERROR "__regparm3" (identifier "__regparm3")) (call_expression "FUN_00281ef0(wchar_t *param_1,int param_2,undefined4 param_3)" (identifier "FUN_00281ef0") (argument_list "(wchar_t *param_1,int param_2,undefined4 param_3)" (( "(") (binary_expression "wchar_t *param_1" (identifier "wchar_t") (* "*") (identifier "param_1")) (, ",") (ERROR "int" (identifier "int")) (identifier "param_2") (, ",") (identifier "undefined4") (ERROR "param_3" (identifier "param_3")) () ")"))))) (compound_statement "{\n  size_t *psVar1;\n  size_t __n;\n  \n  __n = param_2 - (int)param_1 >> 2;\n  psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);\n  if (__n == 1) {\n    psVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_003aed74) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }\n  return (wchar_t *)(psVar1 + 3);\n}" ({ "{") (declaration "size_t *psVar1;" (primitive_type "size_t") (pointer_declarator "*psVar1" (* "*") (identifier "psVar1")) (; ";")) (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (expression_statement "__n = param_2 - (int)param_1 >> 2;" (assignment_expression "__n = param_2 - (int)param_1 >> 2" (identifier "__n") (= "=") (binary_expression "param_2 - (int)param_1 >> 2" (binary_expression "param_2 - (int)param_1" (identifier "param_2") (- "-") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) (>> ">>") (number_literal "2"))) (; ";")) (expression_statement "psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);" (assignment_expression "psVar1 = (size_t *)FUN_00281d30(__n,0,param_3)" (identifier "psVar1") (= "=") (cast_expression "(size_t *)FUN_00281d30(__n,0,param_3)" (( "(") (type_descriptor "size_t *" (primitive_type "size_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00281d30(__n,0,param_3)" (identifier "FUN_00281d30") (argument_list "(__n,0,param_3)" (( "(") (identifier "__n") (, ",") (number_literal "0") (, ",") (identifier "param_3") () ")"))))) (; ";")) (if_statement "if (__n == 1) {\n    psVar1[3] = *param_1;\n  }\n  else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }" (if "if") (parenthesized_expression "(__n == 1)" (( "(") (binary_expression "__n == 1" (identifier "__n") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    psVar1[3] = *param_1;\n  }" ({ "{") (expression_statement "psVar1[3] = *param_1;" (assignment_expression "psVar1[3] = *param_1" (subscript_expression "psVar1[3]" (identifier "psVar1") ([ "[") (number_literal "3") (] "]")) (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (} "}")) (else_clause "else {\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }" (else "else") (compound_statement "{\n    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);\n  }" ({ "{") (expression_statement "wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);" (call_expression "wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n)" (identifier "wmemcpy") (argument_list "((wchar_t *)(psVar1 + 3),param_1,__n)" (( "(") (cast_expression "(wchar_t *)(psVar1 + 3)" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(psVar1 + 3)" (( "(") (binary_expression "psVar1 + 3" (identifier "psVar1") (+ "+") (number_literal "3")) () ")"))) (, ",") (identifier "param_1") (, ",") (identifier "__n") () ")"))) (; ";")) (} "}")))) (if_statement "if (psVar1 != (size_t *)PTR_DAT_003aed74) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }" (if "if") (parenthesized_expression "(psVar1 != (size_t *)PTR_DAT_003aed74)" (( "(") (binary_expression "psVar1 != (size_t *)PTR_DAT_003aed74" (identifier "psVar1") (!= "!=") (cast_expression "(size_t *)PTR_DAT_003aed74" (( "(") (type_descriptor "size_t *" (primitive_type "size_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_DAT_003aed74"))) () ")")) (compound_statement "{\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;\n  }" ({ "{") (expression_statement "psVar1[2] = 0;" (assignment_expression "psVar1[2] = 0" (subscript_expression "psVar1[2]" (identifier "psVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*psVar1 = __n;" (assignment_expression "*psVar1 = __n" (pointer_expression "*psVar1" (* "*") (identifier "psVar1")) (= "=") (identifier "__n")) (; ";")) (expression_statement "*(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;" (assignment_expression "*(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0" (pointer_expression "*(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc)" (* "*") (cast_expression "(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)psVar1 + (param_2 - (int)param_1) + 0xc)" (( "(") (binary_expression "(int)psVar1 + (param_2 - (int)param_1) + 0xc" (binary_expression "(int)psVar1 + (param_2 - (int)param_1)" (cast_expression "(int)psVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "psVar1")) (+ "+") (parenthesized_expression "(param_2 - (int)param_1)" (( "(") (binary_expression "param_2 - (int)param_1" (identifier "param_2") (- "-") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) () ")"))) (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (return_statement "return (wchar_t *)(psVar1 + 3);" (return "return") (cast_expression "(wchar_t *)(psVar1 + 3)" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(psVar1 + 3)" (( "(") (binary_expression "psVar1 + 3" (identifier "psVar1") (+ "+") (number_literal "3")) () ")"))) (; ";")) (} "}"))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* wchar_t* std::wstring::_S_construct<wchar_t const*>(wchar_t const*, wchar_t const*,
   std::allocator<wchar_t> const&, std::forward_iterator_tag) [clone .part.25] */

type_2 * __regparm3
std::wstring::_S_construct<wchar_t_const*>(type_2 *param_1,int var_1,allocator *param_3)

{
  type_1 *var_5;
  type_1 var_3;
  
  var_3 = var_1 - (int)param_1 >> 2;
  var_5 = (type_1 *)_Rep::var_2(var_3,0,param_3);
  if (var_3 == 1) {
    var_5[3] = *param_1;
  }
  else {
    var_4((type_2 *)(var_5 + 3),param_1,var_3);
  }
  if (var_5 != (type_1 *)PTR__S_empty_rep_storage_003aed74) {
    var_5[2] = 0;
    *var_5 = var_3;
    *(type_3 *)((int)var_5 + (var_1 - (int)param_1) + 0xc) = 0;
  }
  return (type_2 *)(var_5 + 3);
}


(translation_unit (ERROR (binary_expression left: (identifier) (ERROR (identifier)) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (ERROR (identifier)) (identifier) (identifier) (ERROR (identifier)))))) (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (identifier))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (identifier) (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) right: (number_literal))))) right: (number_literal))))) (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

wchar_t * __regparm3 MASKED(wchar_t *param_1,int param_2,undefined4 param_3)

{
  size_t *psVar1;
  size_t __n;
  
  __n = param_2 - (int)param_1 >> 2;
  psVar1 = (size_t *)FUN_00281d30(__n,0,param_3);
  if (__n == 1) {
    psVar1[3] = *param_1;
  }
  else {
    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);
  }
  if (psVar1 != (size_t *)PTR_DAT_003aed74) {
    psVar1[2] = 0;
    *psVar1 = __n;
    *(undefined4 *)((int)psVar1 + (param_2 - (int)param_1) + 0xc) = 0;
  }
  return (wchar_t *)(psVar1 + 3);
}

