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

char * last_char_is(char *s,int c)

{
}



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

byte * __regparm3 FUN_00018e00(char *param_1,uint param_2)

{
  size_t sVar1;
  
  if (param_1 == (char *)0x0) {
    return (byte *)0x0;
  }
  if (*param_1 != '\0') {
    sVar1 = strlen(param_1);
    if ((byte)param_1[sVar1 - 1] == param_2) {
      return (byte *)(param_1 + (sVar1 - 1));
    }
  }
  return (byte *)0x0;
}


PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00017650
ADD EBX,0xc2c18
MOV ESI,EAX
TEST EAX,EAX
JZ 0x00018e32
CMP byte ptr [EAX],0x0
JZ 0x00018e38
MOV EDI,EDX
SUB ESP,0xc
PUSH EAX
CALL 0x00016b40
ADD ESP,0x10
LEA ESI,[ESI + EAX*0x1 + -0x1]
MOVZX EAX,byte ptr [ESI]
CMP EAX,EDI
JNZ 0x00018e38
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
RET
XOR ESI,ESI
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nbyte * __regparm3 FUN_00018e00(char *param_1,uint param_2)\n\n{\n  size_t sVar1;\n  \n  if (param_1 == (char *)0x0) {\n    return (byte *)0x0;\n  }\n  if (*param_1 != '\0') {\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }\n  return (byte *)0x0;\n}\n\n" comment (ERROR "byte * __regparm3 FUN_00018e00(char *param_1,uint param_2)" (binary_expression "byte * __regparm3 FUN_00018e00(char *param_1,uint param_2)" identifier * (ERROR "__regparm3" identifier) (call_expression "FUN_00018e00(char *param_1,uint param_2)" identifier (argument_list "(char *param_1,uint param_2)" ( (binary_expression "char *param_1" identifier * identifier) , (ERROR "uint" identifier) identifier ))))) (compound_statement "{\n  size_t sVar1;\n  \n  if (param_1 == (char *)0x0) {\n    return (byte *)0x0;\n  }\n  if (*param_1 != '\0') {\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }\n  return (byte *)0x0;\n}" { (declaration "size_t sVar1;" primitive_type identifier ;) (if_statement "if (param_1 == (char *)0x0) {\n    return (byte *)0x0;\n  }" if (parenthesized_expression "(param_1 == (char *)0x0)" ( (binary_expression "param_1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (byte *)0x0;\n  }" { (return_statement "return (byte *)0x0;" return (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (*param_1 != '\0') {\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }" if (parenthesized_expression "(*param_1 != '\0')" ( (binary_expression "*param_1 != '\0'" (pointer_expression "*param_1" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }" { (expression_statement "sVar1 = strlen(param_1);" (assignment_expression "sVar1 = strlen(param_1)" identifier = (call_expression "strlen(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }" if (parenthesized_expression "((byte)param_1[sVar1 - 1] == param_2)" ( (binary_expression "(byte)param_1[sVar1 - 1] == param_2" (cast_expression "(byte)param_1[sVar1 - 1]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[sVar1 - 1]" identifier [ (binary_expression "sVar1 - 1" identifier - number_literal) ])) == identifier) )) (compound_statement "{\n      return (byte *)(param_1 + (sVar1 - 1));\n    }" { (return_statement "return (byte *)(param_1 + (sVar1 - 1));" return (cast_expression "(byte *)(param_1 + (sVar1 - 1))" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (sVar1 - 1))" ( (binary_expression "param_1 + (sVar1 - 1)" identifier + (parenthesized_expression "(sVar1 - 1)" ( (binary_expression "sVar1 - 1" identifier - number_literal) ))) ))) ;) })) })) (return_statement "return (byte *)0x0;" return (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nchar * last_char_is(char *s,int c)\n\n{\n}\n\n" comment (function_definition "char * last_char_is(char *s,int c)\n\n{\n}" primitive_type (pointer_declarator "* last_char_is(char *s,int c)" * (function_declarator "last_char_is(char *s,int c)" identifier (parameter_list "(char *s,int c)" ( (parameter_declaration "char *s" primitive_type (pointer_declarator "*s" * identifier)) , (parameter_declaration "int c" primitive_type identifier) )))) (compound_statement "{\n}" { })))
(translation_unit "byte * __regparm3 FUN_00018e00(char *param_1,uint param_2)\n\n{\n  size_t sVar1;\n  \n  if (param_1 == (char *)0x0) {\n    return (byte *)0x0;\n  }\n  if (*param_1 != '\0') {\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }\n  return (byte *)0x0;\n}\n\n" (ERROR "byte * __regparm3 FUN_00018e00(char *param_1,uint param_2)" (binary_expression "byte * __regparm3 FUN_00018e00(char *param_1,uint param_2)" identifier * (ERROR "__regparm3" identifier) (call_expression "FUN_00018e00(char *param_1,uint param_2)" identifier (argument_list "(char *param_1,uint param_2)" ( (binary_expression "char *param_1" identifier * identifier) , (ERROR "uint" identifier) identifier ))))) (compound_statement "{\n  size_t sVar1;\n  \n  if (param_1 == (char *)0x0) {\n    return (byte *)0x0;\n  }\n  if (*param_1 != '\0') {\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }\n  return (byte *)0x0;\n}" { (declaration "size_t sVar1;" primitive_type identifier ;) (if_statement "if (param_1 == (char *)0x0) {\n    return (byte *)0x0;\n  }" if (parenthesized_expression "(param_1 == (char *)0x0)" ( (binary_expression "param_1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (byte *)0x0;\n  }" { (return_statement "return (byte *)0x0;" return (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (*param_1 != '\0') {\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }" if (parenthesized_expression "(*param_1 != '\0')" ( (binary_expression "*param_1 != '\0'" (pointer_expression "*param_1" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }" { (expression_statement "sVar1 = strlen(param_1);" (assignment_expression "sVar1 = strlen(param_1)" identifier = (call_expression "strlen(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }" if (parenthesized_expression "((byte)param_1[sVar1 - 1] == param_2)" ( (binary_expression "(byte)param_1[sVar1 - 1] == param_2" (cast_expression "(byte)param_1[sVar1 - 1]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[sVar1 - 1]" identifier [ (binary_expression "sVar1 - 1" identifier - number_literal) ])) == identifier) )) (compound_statement "{\n      return (byte *)(param_1 + (sVar1 - 1));\n    }" { (return_statement "return (byte *)(param_1 + (sVar1 - 1));" return (cast_expression "(byte *)(param_1 + (sVar1 - 1))" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (sVar1 - 1))" ( (binary_expression "param_1 + (sVar1 - 1)" identifier + (parenthesized_expression "(sVar1 - 1)" ( (binary_expression "sVar1 - 1" identifier - number_literal) ))) ))) ;) })) })) (return_statement "return (byte *)0x0;" return (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))
(translation_unit (ERROR (binary_expression IDENT * (ERROR IDENT) (call_expression IDENT (argument_list ( (binary_expression IDENT * IDENT) , (ERROR IDENT) IDENT ))))) (compound_statement { (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT - LIT) ])) == IDENT) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - LIT) ))) ))) ;) })) })) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) }))
(ERROR "byte * __regparm3 FUN_00018e00(char *param_1,uint param_2)" (binary_expression "byte * __regparm3 FUN_00018e00(char *param_1,uint param_2)" (identifier "byte") (* "*") (ERROR "__regparm3" (identifier "__regparm3")) (call_expression "FUN_00018e00(char *param_1,uint param_2)" (identifier "FUN_00018e00") (argument_list "(char *param_1,uint param_2)" (( "(") (binary_expression "char *param_1" (identifier "char") (* "*") (identifier "param_1")) (, ",") (ERROR "uint" (identifier "uint")) (identifier "param_2") () ")"))))) (compound_statement "{\n  size_t sVar1;\n  \n  if (param_1 == (char *)0x0) {\n    return (byte *)0x0;\n  }\n  if (*param_1 != '\0') {\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }\n  return (byte *)0x0;\n}" ({ "{") (declaration "size_t sVar1;" (primitive_type "size_t") (identifier "sVar1") (; ";")) (if_statement "if (param_1 == (char *)0x0) {\n    return (byte *)0x0;\n  }" (if "if") (parenthesized_expression "(param_1 == (char *)0x0)" (( "(") (binary_expression "param_1 == (char *)0x0" (identifier "param_1") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return (byte *)0x0;\n  }" ({ "{") (return_statement "return (byte *)0x0;" (return "return") (cast_expression "(byte *)0x0" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (if_statement "if (*param_1 != '\0') {\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }" (if "if") (parenthesized_expression "(*param_1 != '\0')" (( "(") (binary_expression "*param_1 != '\0'" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    sVar1 = strlen(param_1);\n    if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }\n  }" ({ "{") (expression_statement "sVar1 = strlen(param_1);" (assignment_expression "sVar1 = strlen(param_1)" (identifier "sVar1") (= "=") (call_expression "strlen(param_1)" (identifier "strlen") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (if_statement "if ((byte)param_1[sVar1 - 1] == param_2) {\n      return (byte *)(param_1 + (sVar1 - 1));\n    }" (if "if") (parenthesized_expression "((byte)param_1[sVar1 - 1] == param_2)" (( "(") (binary_expression "(byte)param_1[sVar1 - 1] == param_2" (cast_expression "(byte)param_1[sVar1 - 1]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "param_1[sVar1 - 1]" (identifier "param_1") ([ "[") (binary_expression "sVar1 - 1" (identifier "sVar1") (- "-") (number_literal "1")) (] "]"))) (== "==") (identifier "param_2")) () ")")) (compound_statement "{\n      return (byte *)(param_1 + (sVar1 - 1));\n    }" ({ "{") (return_statement "return (byte *)(param_1 + (sVar1 - 1));" (return "return") (cast_expression "(byte *)(param_1 + (sVar1 - 1))" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + (sVar1 - 1))" (( "(") (binary_expression "param_1 + (sVar1 - 1)" (identifier "param_1") (+ "+") (parenthesized_expression "(sVar1 - 1)" (( "(") (binary_expression "sVar1 - 1" (identifier "sVar1") (- "-") (number_literal "1")) () ")"))) () ")"))) (; ";")) (} "}"))) (} "}"))) (return_statement "return (byte *)0x0;" (return "return") (cast_expression "(byte *)0x0" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))

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

char * function_1(char *s,int c)

{
}


(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))))) (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal)))) right: (identifier))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))) (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))

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

byte * __regparm3 MASKED(char *param_1,uint param_2)

{
  size_t sVar1;
  
  if (param_1 == (char *)0x0) {
    return (byte *)0x0;
  }
  if (*param_1 != '\0') {
    sVar1 = strlen(param_1);
    if ((byte)param_1[sVar1 - 1] == param_2) {
      return (byte *)(param_1 + (sVar1 - 1));
    }
  }
  return (byte *)0x0;
}

