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

char * __regparm3
std::string::_S_construct<char_const*>(undefined1 *param_1,int param_2,allocator *param_3)

{
  uint *puVar1;
  uint __n;
  
  __n = param_2 - (int)param_1;
  puVar1 = (uint *)_Rep::_S_create(__n,0,param_3);
  if (__n == 1) {
    *(undefined1 *)(puVar1 + 3) = *param_1;
  }
  else {
    memcpy(puVar1 + 3,param_1,__n);
  }
  if (puVar1 != (uint *)PTR__S_empty_rep_storage_0038ecdc) {
    puVar1[2] = 0;
    *puVar1 = __n;
    *(undefined1 *)((int)puVar1 + __n + 0xc) = 0;
  }
  return (char *)(puVar1 + 3);
}



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

size_t * __regparm3 FUN_0021e940(undefined1 *param_1,int param_2,undefined4 param_3)

{
  size_t *psVar1;
  size_t __n;
  
  __n = param_2 - (int)param_1;
  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);
  if (__n == 1) {
    *(undefined1 *)(psVar1 + 3) = *param_1;
  }
  else {
    memcpy(psVar1 + 3,param_1,__n);
  }
  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {
    psVar1[2] = 0;
    *psVar1 = __n;
    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;
  }
  return psVar1 + 3;
}


PUSH EBP
PUSH EDI
MOV EDI,EAX
PUSH ESI
MOV ESI,EDX
PUSH EBX
SUB ESI,EAX
CALL 0x00035840
ADD EBX,0x1706b1
SUB ESP,0x20
PUSH ECX
PUSH 0x0
PUSH ESI
CALL 0x0021e780
ADD ESP,0x10
MOV EBP,EAX
LEA EDX,[EAX + 0xc]
CMP ESI,0x1
JZ 0x0021e9a0
SUB ESP,0x4
PUSH ESI
PUSH EDI
PUSH EDX
MOV dword ptr [ESP + 0x1c],EDX
CALL 0x000295c0
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0xc]
CMP EBP,dword ptr [EBX + 0xfffffcdc]
JNZ 0x0021e9ae
ADD ESP,0x1c
MOV EAX,EDX
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOVZX EAX,byte ptr [EDI]
MOV byte ptr [EBP + 0xc],AL
CMP EBP,dword ptr [EBX + 0xfffffcdc]
JZ 0x0021e98c
MOV dword ptr [EBP + 0x8],0x0
MOV dword ptr [EBP],ESI
MOV byte ptr [EBP + ESI*0x1 + 0xc],0x0
JMP 0x0021e98c
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nsize_t * __regparm3 FUN_0021e940(undefined1 *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;\n  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }\n  return psVar1 + 3;\n}\n\n" comment (function_definition "size_t * __regparm3 FUN_0021e940(undefined1 *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;\n  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }\n  return psVar1 + 3;\n}" primitive_type (pointer_declarator "* __regparm3 FUN_0021e940(undefined1 *param_1,int param_2,undefined4 param_3)" * (ERROR "__regparm3" identifier) (function_declarator "FUN_0021e940(undefined1 *param_1,int param_2,undefined4 param_3)" identifier (parameter_list "(undefined1 *param_1,int param_2,undefined4 param_3)" ( (parameter_declaration "undefined1 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) )))) (compound_statement "{\n  size_t *psVar1;\n  size_t __n;\n  \n  __n = param_2 - (int)param_1;\n  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }\n  return 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;" (assignment_expression "__n = param_2 - (int)param_1" identifier = (binary_expression "param_2 - (int)param_1" identifier - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);" (assignment_expression "psVar1 = (size_t *)FUN_0021e780(__n,0,param_3)" identifier = (cast_expression "(size_t *)FUN_0021e780(__n,0,param_3)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0021e780(__n,0,param_3)" identifier (argument_list "(__n,0,param_3)" ( identifier , number_literal , identifier ))))) ;) (if_statement "if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }" if (parenthesized_expression "(__n == 1)" ( (binary_expression "__n == 1" identifier == number_literal) )) (compound_statement "{\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }" { (expression_statement "*(undefined1 *)(psVar1 + 3) = *param_1;" (assignment_expression "*(undefined1 *)(psVar1 + 3) = *param_1" (pointer_expression "*(undefined1 *)(psVar1 + 3)" * (cast_expression "(undefined1 *)(psVar1 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar1 + 3)" ( (binary_expression "psVar1 + 3" identifier + number_literal) )))) = (pointer_expression "*param_1" * identifier)) ;) }) (else_clause "else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }" else (compound_statement "{\n    memcpy(psVar1 + 3,param_1,__n);\n  }" { (expression_statement "memcpy(psVar1 + 3,param_1,__n);" (call_expression "memcpy(psVar1 + 3,param_1,__n)" identifier (argument_list "(psVar1 + 3,param_1,__n)" ( (binary_expression "psVar1 + 3" identifier + number_literal) , identifier , identifier ))) ;) }))) (if_statement "if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }" if (parenthesized_expression "(psVar1 != (size_t *)PTR_DAT_0038ecdc)" ( (binary_expression "psVar1 != (size_t *)PTR_DAT_0038ecdc" identifier != (cast_expression "(size_t *)PTR_DAT_0038ecdc" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 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 "*(undefined1 *)((int)psVar1 + __n + 0xc) = 0;" (assignment_expression "*(undefined1 *)((int)psVar1 + __n + 0xc) = 0" (pointer_expression "*(undefined1 *)((int)psVar1 + __n + 0xc)" * (cast_expression "(undefined1 *)((int)psVar1 + __n + 0xc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)psVar1 + __n + 0xc)" ( (binary_expression "(int)psVar1 + __n + 0xc" (binary_expression "(int)psVar1 + __n" (cast_expression "(int)psVar1" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = number_literal) ;) })) (return_statement "return psVar1 + 3;" return (binary_expression "psVar1 + 3" identifier + number_literal) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char>\n   const&, std::forward_iterator_tag) [clone .part.25] */\n\nchar * __regparm3\nstd::string::_S_construct<char_const*>(undefined1 *param_1,int param_2,allocator *param_3)\n\n{\n  uint *puVar1;\n  uint __n;\n  \n  __n = param_2 - (int)param_1;\n  puVar1 = (uint *)_Rep::_S_create(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(puVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(puVar1 + 3,param_1,__n);\n  }\n  if (puVar1 != (uint *)PTR__S_empty_rep_storage_0038ecdc) {\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined1 *)((int)puVar1 + __n + 0xc) = 0;\n  }\n  return (char *)(puVar1 + 3);\n}\n\n" comment comment (declaration "char * __regparm3" primitive_type (pointer_declarator "* __regparm3" * identifier) ;) (labeled_statement "std::string::_S_construct<char_const*>(undefined1 *param_1,int param_2,allocator *param_3)\n\n{\n  uint *puVar1;\n  uint __n;\n  \n  __n = param_2 - (int)param_1;\n  puVar1 = (uint *)_Rep::_S_create(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(puVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(puVar1 + 3,param_1,__n);\n  }\n  if (puVar1 != (uint *)PTR__S_empty_rep_storage_0038ecdc) {\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined1 *)((int)puVar1 + __n + 0xc) = 0;\n  }\n  return (char *)(puVar1 + 3);\n}" statement_identifier : (ERROR ":" :) (labeled_statement "string::_S_construct<char_const*>(undefined1 *param_1,int param_2,allocator *param_3)\n\n{\n  uint *puVar1;\n  uint __n;\n  \n  __n = param_2 - (int)param_1;\n  puVar1 = (uint *)_Rep::_S_create(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(puVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(puVar1 + 3,param_1,__n);\n  }\n  if (puVar1 != (uint *)PTR__S_empty_rep_storage_0038ecdc) {\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined1 *)((int)puVar1 + __n + 0xc) = 0;\n  }\n  return (char *)(puVar1 + 3);\n}" statement_identifier : (ERROR ":_S_construct<char_const*>(undefined1 *param_1,int param_2,allocator *param_3)" : (binary_expression "_S_construct<char_const*>(undefined1 *param_1,int param_2,allocator *param_3)" (binary_expression "_S_construct<char_const" identifier < identifier) (ERROR "*" *) > (parenthesized_expression "(undefined1 *param_1,int param_2,allocator *param_3)" ( (comma_expression "undefined1 *param_1,int param_2,allocator *param_3" (binary_expression "undefined1 *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;\n  puVar1 = (uint *)_Rep::_S_create(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(puVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(puVar1 + 3,param_1,__n);\n  }\n  if (puVar1 != (uint *)PTR__S_empty_rep_storage_0038ecdc) {\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined1 *)((int)puVar1 + __n + 0xc) = 0;\n  }\n  return (char *)(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;" (assignment_expression "__n = param_2 - (int)param_1" identifier = (binary_expression "param_2 - (int)param_1" identifier - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (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    *(undefined1 *)(puVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(puVar1 + 3,param_1,__n);\n  }" if (parenthesized_expression "(__n == 1)" ( (binary_expression "__n == 1" identifier == number_literal) )) (compound_statement "{\n    *(undefined1 *)(puVar1 + 3) = *param_1;\n  }" { (expression_statement "*(undefined1 *)(puVar1 + 3) = *param_1;" (assignment_expression "*(undefined1 *)(puVar1 + 3) = *param_1" (pointer_expression "*(undefined1 *)(puVar1 + 3)" * (cast_expression "(undefined1 *)(puVar1 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + 3)" ( (binary_expression "puVar1 + 3" identifier + number_literal) )))) = (pointer_expression "*param_1" * identifier)) ;) }) (else_clause "else {\n    memcpy(puVar1 + 3,param_1,__n);\n  }" else (compound_statement "{\n    memcpy(puVar1 + 3,param_1,__n);\n  }" { (expression_statement "memcpy(puVar1 + 3,param_1,__n);" (call_expression "memcpy(puVar1 + 3,param_1,__n)" identifier (argument_list "(puVar1 + 3,param_1,__n)" ( (binary_expression "puVar1 + 3" identifier + number_literal) , identifier , identifier ))) ;) }))) (if_statement "if (puVar1 != (uint *)PTR__S_empty_rep_storage_0038ecdc) {\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined1 *)((int)puVar1 + __n + 0xc) = 0;\n  }" if (parenthesized_expression "(puVar1 != (uint *)PTR__S_empty_rep_storage_0038ecdc)" ( (binary_expression "puVar1 != (uint *)PTR__S_empty_rep_storage_0038ecdc" identifier != (cast_expression "(uint *)PTR__S_empty_rep_storage_0038ecdc" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    puVar1[2] = 0;\n    *puVar1 = __n;\n    *(undefined1 *)((int)puVar1 + __n + 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 "*(undefined1 *)((int)puVar1 + __n + 0xc) = 0;" (assignment_expression "*(undefined1 *)((int)puVar1 + __n + 0xc) = 0" (pointer_expression "*(undefined1 *)((int)puVar1 + __n + 0xc)" * (cast_expression "(undefined1 *)((int)puVar1 + __n + 0xc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar1 + __n + 0xc)" ( (binary_expression "(int)puVar1 + __n + 0xc" (binary_expression "(int)puVar1 + __n" (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = number_literal) ;) })) (return_statement "return (char *)(puVar1 + 3);" return (cast_expression "(char *)(puVar1 + 3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + 3)" ( (binary_expression "puVar1 + 3" identifier + number_literal) ))) ;) }))))
(translation_unit "size_t * __regparm3 FUN_0021e940(undefined1 *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;\n  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }\n  return psVar1 + 3;\n}\n\n" (function_definition "size_t * __regparm3 FUN_0021e940(undefined1 *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;\n  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }\n  return psVar1 + 3;\n}" primitive_type (pointer_declarator "* __regparm3 FUN_0021e940(undefined1 *param_1,int param_2,undefined4 param_3)" * (ERROR "__regparm3" identifier) (function_declarator "FUN_0021e940(undefined1 *param_1,int param_2,undefined4 param_3)" identifier (parameter_list "(undefined1 *param_1,int param_2,undefined4 param_3)" ( (parameter_declaration "undefined1 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) )))) (compound_statement "{\n  size_t *psVar1;\n  size_t __n;\n  \n  __n = param_2 - (int)param_1;\n  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }\n  return 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;" (assignment_expression "__n = param_2 - (int)param_1" identifier = (binary_expression "param_2 - (int)param_1" identifier - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);" (assignment_expression "psVar1 = (size_t *)FUN_0021e780(__n,0,param_3)" identifier = (cast_expression "(size_t *)FUN_0021e780(__n,0,param_3)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0021e780(__n,0,param_3)" identifier (argument_list "(__n,0,param_3)" ( identifier , number_literal , identifier ))))) ;) (if_statement "if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }" if (parenthesized_expression "(__n == 1)" ( (binary_expression "__n == 1" identifier == number_literal) )) (compound_statement "{\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }" { (expression_statement "*(undefined1 *)(psVar1 + 3) = *param_1;" (assignment_expression "*(undefined1 *)(psVar1 + 3) = *param_1" (pointer_expression "*(undefined1 *)(psVar1 + 3)" * (cast_expression "(undefined1 *)(psVar1 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar1 + 3)" ( (binary_expression "psVar1 + 3" identifier + number_literal) )))) = (pointer_expression "*param_1" * identifier)) ;) }) (else_clause "else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }" else (compound_statement "{\n    memcpy(psVar1 + 3,param_1,__n);\n  }" { (expression_statement "memcpy(psVar1 + 3,param_1,__n);" (call_expression "memcpy(psVar1 + 3,param_1,__n)" identifier (argument_list "(psVar1 + 3,param_1,__n)" ( (binary_expression "psVar1 + 3" identifier + number_literal) , identifier , identifier ))) ;) }))) (if_statement "if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }" if (parenthesized_expression "(psVar1 != (size_t *)PTR_DAT_0038ecdc)" ( (binary_expression "psVar1 != (size_t *)PTR_DAT_0038ecdc" identifier != (cast_expression "(size_t *)PTR_DAT_0038ecdc" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 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 "*(undefined1 *)((int)psVar1 + __n + 0xc) = 0;" (assignment_expression "*(undefined1 *)((int)psVar1 + __n + 0xc) = 0" (pointer_expression "*(undefined1 *)((int)psVar1 + __n + 0xc)" * (cast_expression "(undefined1 *)((int)psVar1 + __n + 0xc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)psVar1 + __n + 0xc)" ( (binary_expression "(int)psVar1 + __n + 0xc" (binary_expression "(int)psVar1 + __n" (cast_expression "(int)psVar1" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = number_literal) ;) })) (return_statement "return psVar1 + 3;" return (binary_expression "psVar1 + 3" identifier + number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * IDENT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (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) + IDENT) + LIT) )))) = LIT) ;) })) (return_statement return (binary_expression IDENT + LIT) ;) })))
(function_definition "size_t * __regparm3 FUN_0021e940(undefined1 *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;\n  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }\n  return psVar1 + 3;\n}" (primitive_type "size_t") (pointer_declarator "* __regparm3 FUN_0021e940(undefined1 *param_1,int param_2,undefined4 param_3)" (* "*") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0021e940(undefined1 *param_1,int param_2,undefined4 param_3)" (identifier "FUN_0021e940") (parameter_list "(undefined1 *param_1,int param_2,undefined4 param_3)" (( "(") (parameter_declaration "undefined1 *param_1" (type_identifier "undefined1") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) () ")")))) (compound_statement "{\n  size_t *psVar1;\n  size_t __n;\n  \n  __n = param_2 - (int)param_1;\n  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);\n  if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }\n  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }\n  return 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;" (assignment_expression "__n = param_2 - (int)param_1" (identifier "__n") (= "=") (binary_expression "param_2 - (int)param_1" (identifier "param_2") (- "-") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")))) (; ";")) (expression_statement "psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);" (assignment_expression "psVar1 = (size_t *)FUN_0021e780(__n,0,param_3)" (identifier "psVar1") (= "=") (cast_expression "(size_t *)FUN_0021e780(__n,0,param_3)" (( "(") (type_descriptor "size_t *" (primitive_type "size_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0021e780(__n,0,param_3)" (identifier "FUN_0021e780") (argument_list "(__n,0,param_3)" (( "(") (identifier "__n") (, ",") (number_literal "0") (, ",") (identifier "param_3") () ")"))))) (; ";")) (if_statement "if (__n == 1) {\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }\n  else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }" (if "if") (parenthesized_expression "(__n == 1)" (( "(") (binary_expression "__n == 1" (identifier "__n") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    *(undefined1 *)(psVar1 + 3) = *param_1;\n  }" ({ "{") (expression_statement "*(undefined1 *)(psVar1 + 3) = *param_1;" (assignment_expression "*(undefined1 *)(psVar1 + 3) = *param_1" (pointer_expression "*(undefined1 *)(psVar1 + 3)" (* "*") (cast_expression "(undefined1 *)(psVar1 + 3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(psVar1 + 3)" (( "(") (binary_expression "psVar1 + 3" (identifier "psVar1") (+ "+") (number_literal "3")) () ")")))) (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (} "}")) (else_clause "else {\n    memcpy(psVar1 + 3,param_1,__n);\n  }" (else "else") (compound_statement "{\n    memcpy(psVar1 + 3,param_1,__n);\n  }" ({ "{") (expression_statement "memcpy(psVar1 + 3,param_1,__n);" (call_expression "memcpy(psVar1 + 3,param_1,__n)" (identifier "memcpy") (argument_list "(psVar1 + 3,param_1,__n)" (( "(") (binary_expression "psVar1 + 3" (identifier "psVar1") (+ "+") (number_literal "3")) (, ",") (identifier "param_1") (, ",") (identifier "__n") () ")"))) (; ";")) (} "}")))) (if_statement "if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;\n  }" (if "if") (parenthesized_expression "(psVar1 != (size_t *)PTR_DAT_0038ecdc)" (( "(") (binary_expression "psVar1 != (size_t *)PTR_DAT_0038ecdc" (identifier "psVar1") (!= "!=") (cast_expression "(size_t *)PTR_DAT_0038ecdc" (( "(") (type_descriptor "size_t *" (primitive_type "size_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_DAT_0038ecdc"))) () ")")) (compound_statement "{\n    psVar1[2] = 0;\n    *psVar1 = __n;\n    *(undefined1 *)((int)psVar1 + __n + 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 "*(undefined1 *)((int)psVar1 + __n + 0xc) = 0;" (assignment_expression "*(undefined1 *)((int)psVar1 + __n + 0xc) = 0" (pointer_expression "*(undefined1 *)((int)psVar1 + __n + 0xc)" (* "*") (cast_expression "(undefined1 *)((int)psVar1 + __n + 0xc)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)psVar1 + __n + 0xc)" (( "(") (binary_expression "(int)psVar1 + __n + 0xc" (binary_expression "(int)psVar1 + __n" (cast_expression "(int)psVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "psVar1")) (+ "+") (identifier "__n")) (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (return_statement "return psVar1 + 3;" (return "return") (binary_expression "psVar1 + 3" (identifier "psVar1") (+ "+") (number_literal "3")) (; ";")) (} "}")))

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

char * __regparm3
std::string::_S_construct<char_const*>(type_2 *param_1,int var_1,allocator *param_3)

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


(translation_unit (function_definition type: (primitive_type) declarator: (pointer_declarator (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier))))) body: (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: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (identifier))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (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: (identifier)) right: (number_literal))))) right: (number_literal))))) (return_statement (binary_expression left: (identifier) right: (number_literal))))))

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

size_t * __regparm3 MASKED(undefined1 *param_1,int param_2,undefined4 param_3)

{
  size_t *psVar1;
  size_t __n;
  
  __n = param_2 - (int)param_1;
  psVar1 = (size_t *)FUN_0021e780(__n,0,param_3);
  if (__n == 1) {
    *(undefined1 *)(psVar1 + 3) = *param_1;
  }
  else {
    memcpy(psVar1 + 3,param_1,__n);
  }
  if (psVar1 != (size_t *)PTR_DAT_0038ecdc) {
    psVar1[2] = 0;
    *psVar1 = __n;
    *(undefined1 *)((int)psVar1 + __n + 0xc) = 0;
  }
  return psVar1 + 3;
}

