
/* DWARF original name: find_shdr<64, false>
   DWARF original prototype: uchar * find_shdr<64,_false>(Object * this, uchar * pshdrs, char *
   name, char * names, section_size_type names_size, uchar * hdr) */

uchar * __thiscall
gold::Object::find_shdr<64,_false>
          (Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr
          )

{
  uint uVar1;
  uint uVar2;
  size_t sVar3;
  void *pvVar4;
  ulong uVar5;
  uint *puVar6;
  size_t __haystacklen;
  char *__haystack;
  
  uVar1 = this->shnum_;
  if (hdr == (uchar *)0x0) {
    sVar3 = strlen(name);
    sVar3 = sVar3 + 1;
    __haystacklen = names_size;
    __haystack = names;
    goto LAB_001c13ff;
  }
  uVar5 = (ulong)*(uint *)hdr;
  while( true ) {
    puVar6 = (uint *)(hdr + 0x40);
    if (puVar6 < pshdrs + (uVar1 << 6)) {
      uVar2 = *(uint *)(hdr + 0x40);
      while( true ) {
        if (uVar5 == uVar2) {
          return (uchar *)puVar6;
        }
        puVar6 = puVar6 + 0x10;
        if (pshdrs + (uVar1 << 6) <= puVar6) break;
        uVar2 = *puVar6;
      }
    }
    if (uVar5 == 0) break;
    sVar3 = strlen(name);
    sVar3 = sVar3 + 1;
    __haystacklen = names_size - (uVar5 + sVar3);
    __haystack = names + uVar5 + sVar3;
LAB_001c13ff:
    pvVar4 = memmem(__haystack,__haystacklen,name,sVar3);
    if (pvVar4 == (void *)0x0) {
      return (uchar *)0x0;
    }
    uVar5 = (long)pvVar4 - (long)names;
    hdr = pshdrs;
    if (uVar5 == 0) {
      return pshdrs;
    }
  }
  return (uchar *)0x0;
}



uint * FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,
                   uint *param_6)

{
  int iVar1;
  uint uVar2;
  size_t sVar3;
  void *pvVar4;
  ulong uVar5;
  uint *puVar6;
  uint *puVar7;
  size_t __haystacklen;
  
  iVar1 = *(int *)(param_1 + 0x38);
  if (param_6 == (uint *)0x0) {
    sVar3 = strlen(param_3);
    sVar3 = sVar3 + 1;
    __haystacklen = param_5;
    pvVar4 = param_4;
    goto LAB_001c13ff;
  }
  uVar5 = (ulong)*param_6;
  while( true ) {
    puVar7 = param_6 + 0x10;
    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);
    if (puVar7 < puVar6) {
      uVar2 = param_6[0x10];
      while( true ) {
        if (uVar5 == uVar2) {
          return puVar7;
        }
        puVar7 = puVar7 + 0x10;
        if (puVar6 <= puVar7) break;
        uVar2 = *puVar7;
      }
    }
    if (uVar5 == 0) break;
    sVar3 = strlen(param_3);
    sVar3 = sVar3 + 1;
    __haystacklen = param_5 - (uVar5 + sVar3);
    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);
LAB_001c13ff:
    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);
    if (pvVar4 == (void *)0x0) {
      return (uint *)0x0;
    }
    uVar5 = (long)pvVar4 - (long)param_4;
    param_6 = param_2;
    if (uVar5 == 0) {
      return param_2;
    }
  }
  return (uint *)0x0;
}


PUSH R15
MOV R15,RSI
PUSH R14
MOV R14,R8
PUSH R13
PUSH R12
MOV R12,RDX
PUSH RBP
MOV RBP,RCX
PUSH RBX
SUB RSP,0x8
MOV R13D,dword ptr [RDI + 0x38]
TEST R9,R9
JZ 0x001c1430
MOV EBX,dword ptr [R9]
MOV ECX,R13D
LEA RDX,[R9 + 0x40]
SHL ECX,0x6
ADD RCX,R15
CMP RCX,RDX
JBE 0x001c13e0
MOV EAX,dword ptr [R9 + 0x40]
CMP RBX,RAX
JNZ 0x001c13d7
JMP 0x001c141a
MOV EAX,dword ptr [RDX]
CMP RAX,RBX
JZ 0x001c141a
ADD RDX,0x40
CMP RCX,RDX
JA 0x001c13d0
TEST RBX,RBX
JZ 0x001c1448
MOV RDI,R12
CALL 0x00147490
MOV RSI,R14
LEA RCX,[RAX + 0x1]
ADD RBX,RCX
LEA RDI,[RBP + RBX*0x1]
SUB RSI,RBX
MOV RDX,R12
CALL 0x00147810
TEST RAX,RAX
JZ 0x001c1448
SUB RAX,RBP
MOV R9,R15
MOV RDX,R15
MOV RBX,RAX
JNZ 0x001c13aa
ADD RSP,0x8
MOV RAX,RDX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RDI,RDX
CALL 0x00147490
MOV RSI,R14
MOV RDI,RBP
LEA RCX,[RAX + 0x1]
JMP 0x001c13ff
XOR EDX,EDX
JMP 0x001c141a
(translation_unit "uint * FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint *puVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*param_6;\n  while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}\n\n" (function_definition "uint * FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint *puVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*param_6;\n  while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" type_identifier (pointer_declarator "* FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" * (function_declarator "FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" identifier (parameter_list "(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "void *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "size_t param_5" primitive_type identifier) , (parameter_declaration "uint *param_6" type_identifier (pointer_declarator "*param_6" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint *puVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*param_6;\n  while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "size_t __haystacklen;" primitive_type identifier ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }" if (parenthesized_expression "(param_6 == (uint *)0x0)" ( (binary_expression "param_6 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }" { (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" identifier = (call_expression "strlen(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = param_5;" (assignment_expression "__haystacklen = param_5" identifier = identifier) ;) (expression_statement "pvVar4 = param_4;" (assignment_expression "pvVar4 = param_4" identifier = identifier) ;) (goto_statement "goto LAB_001c13ff;" goto statement_identifier ;) })) (expression_statement "uVar5 = (ulong)*param_6;" (assignment_expression "uVar5 = (ulong)*param_6" identifier = (binary_expression "(ulong)*param_6" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) ;) (while_statement "while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" { (expression_statement "puVar7 = param_6 + 0x10;" (assignment_expression "puVar7 = param_6 + 0x10" identifier = (binary_expression "param_6 + 0x10" identifier + number_literal)) ;) (expression_statement "puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);" (assignment_expression "puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2)" identifier = (cast_expression "(uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(uint)(iVar1 << 6) + (long)param_2)" ( (binary_expression "(ulong)(uint)(iVar1 << 6) + (long)param_2" (call_expression "(ulong)(uint)(iVar1 << 6)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(iVar1 << 6)" ( (binary_expression "iVar1 << 6" identifier << number_literal) ))) + (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (if_statement "if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }" if (parenthesized_expression "(puVar7 < puVar6)" ( (binary_expression "puVar7 < puVar6" identifier < identifier) )) (compound_statement "{\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }" { (expression_statement "uVar2 = param_6[0x10];" (assignment_expression "uVar2 = param_6[0x10]" identifier = (subscript_expression "param_6[0x10]" identifier [ number_literal ])) ;) (while_statement "while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }" { (if_statement "if (uVar5 == uVar2) {\n          return puVar7;\n        }" if (parenthesized_expression "(uVar5 == uVar2)" ( (binary_expression "uVar5 == uVar2" identifier == identifier) )) (compound_statement "{\n          return puVar7;\n        }" { (return_statement "return puVar7;" return identifier ;) })) (expression_statement "puVar7 = puVar7 + 0x10;" (assignment_expression "puVar7 = puVar7 + 0x10" identifier = (binary_expression "puVar7 + 0x10" identifier + number_literal)) ;) (if_statement "if (puVar6 <= puVar7) break;" if (parenthesized_expression "(puVar6 <= puVar7)" ( (binary_expression "puVar6 <= puVar7" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = *puVar7;" (assignment_expression "uVar2 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) })) })) (if_statement "if (uVar5 == 0) break;" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" identifier = (call_expression "strlen(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = param_5 - (uVar5 + sVar3);" (assignment_expression "__haystacklen = param_5 - (uVar5 + sVar3)" identifier = (binary_expression "param_5 - (uVar5 + sVar3)" identifier - (parenthesized_expression "(uVar5 + sVar3)" ( (binary_expression "uVar5 + sVar3" identifier + identifier) )))) ;) (expression_statement "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);" (assignment_expression "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3)" identifier = (cast_expression "(void *)((long)param_4 + uVar5 + sVar3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_4 + uVar5 + sVar3)" ( (binary_expression "(long)param_4 + uVar5 + sVar3" (binary_expression "(long)param_4 + uVar5" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + identifier) )))) ;) (labeled_statement "LAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" statement_identifier : (expression_statement "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" (assignment_expression "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3)" identifier = (call_expression "memmem(pvVar4,__haystacklen,param_3,sVar3)" identifier (argument_list "(pvVar4,__haystacklen,param_3,sVar3)" ( identifier , identifier , identifier , identifier )))) ;)) (if_statement "if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }" if (parenthesized_expression "(pvVar4 == (void *)0x0)" ( (binary_expression "pvVar4 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (uint *)0x0;\n    }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar5 = (long)pvVar4 - (long)param_4;" (assignment_expression "uVar5 = (long)pvVar4 - (long)param_4" identifier = (binary_expression "(long)pvVar4 - (long)param_4" (cast_expression "(long)pvVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "param_6 = param_2;" (assignment_expression "param_6 = param_2" identifier = identifier) ;) (if_statement "if (uVar5 == 0) {\n      return param_2;\n    }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return param_2;\n    }" { (return_statement "return param_2;" return identifier ;) })) })) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "/* DWARF original name: find_shdr<64, false>\n   DWARF original prototype: uchar * find_shdr<64,_false>(Object * this, uchar * pshdrs, char *\n   name, char * names, section_size_type names_size, uchar * hdr) */\n\nuchar * __thiscall\ngold::Object::find_shdr<64,_false>\n          (Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr\n          )\n\n{\n  uint uVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  size_t __haystacklen;\n  char *__haystack;\n  \n  uVar1 = this->shnum_;\n  if (hdr == (uchar *)0x0) {\n    sVar3 = strlen(name);\n    sVar3 = sVar3 + 1;\n    __haystacklen = names_size;\n    __haystack = names;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*(uint *)hdr;\n  while( true ) {\n    puVar6 = (uint *)(hdr + 0x40);\n    if (puVar6 < pshdrs + (uVar1 << 6)) {\n      uVar2 = *(uint *)(hdr + 0x40);\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return (uchar *)puVar6;\n        }\n        puVar6 = puVar6 + 0x10;\n        if (pshdrs + (uVar1 << 6) <= puVar6) break;\n        uVar2 = *puVar6;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(name);\n    sVar3 = sVar3 + 1;\n    __haystacklen = names_size - (uVar5 + sVar3);\n    __haystack = names + uVar5 + sVar3;\nLAB_001c13ff:\n    pvVar4 = memmem(__haystack,__haystacklen,name,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uchar *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)names;\n    hdr = pshdrs;\n    if (uVar5 == 0) {\n      return pshdrs;\n    }\n  }\n  return (uchar *)0x0;\n}\n\n" comment (ERROR "uchar * __thiscall\ngold::Object::find_shdr<64,_false>\n          (Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr\n          )" (binary_expression "uchar * __thiscall\ngold::Object::find_shdr<64,_false>\n          (Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr\n          )" (binary_expression "uchar * __thiscall\ngold::Object::find_shdr<64" (binary_expression "uchar * __thiscall" identifier * identifier) (ERROR "gold::Object::find_shdr" identifier : : identifier : : identifier) < number_literal) (ERROR ",_false" , identifier) > (parenthesized_expression "(Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr\n          )" ( (comma_expression "Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr" (binary_expression "Object *this" identifier * identifier) , (comma_expression "uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr" (binary_expression "uchar *pshdrs" identifier * identifier) , (comma_expression "char *name,char *names,section_size_type names_size,uchar *hdr" (binary_expression "char *name" identifier * identifier) , (comma_expression "char *names,section_size_type names_size,uchar *hdr" (binary_expression "char *names" identifier * identifier) , (comma_expression "section_size_type names_size,uchar *hdr" identifier (ERROR "names_size" identifier) , (binary_expression "uchar *hdr" identifier * identifier)))))) )))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  size_t __haystacklen;\n  char *__haystack;\n  \n  uVar1 = this->shnum_;\n  if (hdr == (uchar *)0x0) {\n    sVar3 = strlen(name);\n    sVar3 = sVar3 + 1;\n    __haystacklen = names_size;\n    __haystack = names;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*(uint *)hdr;\n  while( true ) {\n    puVar6 = (uint *)(hdr + 0x40);\n    if (puVar6 < pshdrs + (uVar1 << 6)) {\n      uVar2 = *(uint *)(hdr + 0x40);\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return (uchar *)puVar6;\n        }\n        puVar6 = puVar6 + 0x10;\n        if (pshdrs + (uVar1 << 6) <= puVar6) break;\n        uVar2 = *puVar6;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(name);\n    sVar3 = sVar3 + 1;\n    __haystacklen = names_size - (uVar5 + sVar3);\n    __haystack = names + uVar5 + sVar3;\nLAB_001c13ff:\n    pvVar4 = memmem(__haystack,__haystacklen,name,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uchar *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)names;\n    hdr = pshdrs;\n    if (uVar5 == 0) {\n      return pshdrs;\n    }\n  }\n  return (uchar *)0x0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "size_t __haystacklen;" primitive_type identifier ;) (declaration "char *__haystack;" primitive_type (pointer_declarator "*__haystack" * identifier) ;) (expression_statement "uVar1 = this->shnum_;" (assignment_expression "uVar1 = this->shnum_" identifier = (field_expression "this->shnum_" identifier -> field_identifier)) ;) (if_statement "if (hdr == (uchar *)0x0) {\n    sVar3 = strlen(name);\n    sVar3 = sVar3 + 1;\n    __haystacklen = names_size;\n    __haystack = names;\n    goto LAB_001c13ff;\n  }" if (parenthesized_expression "(hdr == (uchar *)0x0)" ( (binary_expression "hdr == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar3 = strlen(name);\n    sVar3 = sVar3 + 1;\n    __haystacklen = names_size;\n    __haystack = names;\n    goto LAB_001c13ff;\n  }" { (expression_statement "sVar3 = strlen(name);" (assignment_expression "sVar3 = strlen(name)" identifier = (call_expression "strlen(name)" identifier (argument_list "(name)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = names_size;" (assignment_expression "__haystacklen = names_size" identifier = identifier) ;) (expression_statement "__haystack = names;" (assignment_expression "__haystack = names" identifier = identifier) ;) (goto_statement "goto LAB_001c13ff;" goto statement_identifier ;) })) (expression_statement "uVar5 = (ulong)*(uint *)hdr;" (assignment_expression "uVar5 = (ulong)*(uint *)hdr" identifier = (binary_expression "(ulong)*(uint *)hdr" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)hdr" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (while_statement "while( true ) {\n    puVar6 = (uint *)(hdr + 0x40);\n    if (puVar6 < pshdrs + (uVar1 << 6)) {\n      uVar2 = *(uint *)(hdr + 0x40);\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return (uchar *)puVar6;\n        }\n        puVar6 = puVar6 + 0x10;\n        if (pshdrs + (uVar1 << 6) <= puVar6) break;\n        uVar2 = *puVar6;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(name);\n    sVar3 = sVar3 + 1;\n    __haystacklen = names_size - (uVar5 + sVar3);\n    __haystack = names + uVar5 + sVar3;\nLAB_001c13ff:\n    pvVar4 = memmem(__haystack,__haystacklen,name,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uchar *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)names;\n    hdr = pshdrs;\n    if (uVar5 == 0) {\n      return pshdrs;\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    puVar6 = (uint *)(hdr + 0x40);\n    if (puVar6 < pshdrs + (uVar1 << 6)) {\n      uVar2 = *(uint *)(hdr + 0x40);\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return (uchar *)puVar6;\n        }\n        puVar6 = puVar6 + 0x10;\n        if (pshdrs + (uVar1 << 6) <= puVar6) break;\n        uVar2 = *puVar6;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(name);\n    sVar3 = sVar3 + 1;\n    __haystacklen = names_size - (uVar5 + sVar3);\n    __haystack = names + uVar5 + sVar3;\nLAB_001c13ff:\n    pvVar4 = memmem(__haystack,__haystacklen,name,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uchar *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)names;\n    hdr = pshdrs;\n    if (uVar5 == 0) {\n      return pshdrs;\n    }\n  }" { (expression_statement "puVar6 = (uint *)(hdr + 0x40);" (assignment_expression "puVar6 = (uint *)(hdr + 0x40)" identifier = (cast_expression "(uint *)(hdr + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(hdr + 0x40)" ( (binary_expression "hdr + 0x40" identifier + number_literal) )))) ;) (if_statement "if (puVar6 < pshdrs + (uVar1 << 6)) {\n      uVar2 = *(uint *)(hdr + 0x40);\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return (uchar *)puVar6;\n        }\n        puVar6 = puVar6 + 0x10;\n        if (pshdrs + (uVar1 << 6) <= puVar6) break;\n        uVar2 = *puVar6;\n      }\n    }" if (parenthesized_expression "(puVar6 < pshdrs + (uVar1 << 6))" ( (binary_expression "puVar6 < pshdrs + (uVar1 << 6)" identifier < (binary_expression "pshdrs + (uVar1 << 6)" identifier + (parenthesized_expression "(uVar1 << 6)" ( (binary_expression "uVar1 << 6" identifier << number_literal) )))) )) (compound_statement "{\n      uVar2 = *(uint *)(hdr + 0x40);\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return (uchar *)puVar6;\n        }\n        puVar6 = puVar6 + 0x10;\n        if (pshdrs + (uVar1 << 6) <= puVar6) break;\n        uVar2 = *puVar6;\n      }\n    }" { (expression_statement "uVar2 = *(uint *)(hdr + 0x40);" (assignment_expression "uVar2 = *(uint *)(hdr + 0x40)" identifier = (pointer_expression "*(uint *)(hdr + 0x40)" * (cast_expression "(uint *)(hdr + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(hdr + 0x40)" ( (binary_expression "hdr + 0x40" identifier + number_literal) ))))) ;) (while_statement "while( true ) {\n        if (uVar5 == uVar2) {\n          return (uchar *)puVar6;\n        }\n        puVar6 = puVar6 + 0x10;\n        if (pshdrs + (uVar1 << 6) <= puVar6) break;\n        uVar2 = *puVar6;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (uVar5 == uVar2) {\n          return (uchar *)puVar6;\n        }\n        puVar6 = puVar6 + 0x10;\n        if (pshdrs + (uVar1 << 6) <= puVar6) break;\n        uVar2 = *puVar6;\n      }" { (if_statement "if (uVar5 == uVar2) {\n          return (uchar *)puVar6;\n        }" if (parenthesized_expression "(uVar5 == uVar2)" ( (binary_expression "uVar5 == uVar2" identifier == identifier) )) (compound_statement "{\n          return (uchar *)puVar6;\n        }" { (return_statement "return (uchar *)puVar6;" return (cast_expression "(uchar *)puVar6" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ;) })) (expression_statement "puVar6 = puVar6 + 0x10;" (assignment_expression "puVar6 = puVar6 + 0x10" identifier = (binary_expression "puVar6 + 0x10" identifier + number_literal)) ;) (if_statement "if (pshdrs + (uVar1 << 6) <= puVar6) break;" if (parenthesized_expression "(pshdrs + (uVar1 << 6) <= puVar6)" ( (binary_expression "pshdrs + (uVar1 << 6) <= puVar6" (binary_expression "pshdrs + (uVar1 << 6)" identifier + (parenthesized_expression "(uVar1 << 6)" ( (binary_expression "uVar1 << 6" identifier << number_literal) ))) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = *puVar6;" (assignment_expression "uVar2 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) })) })) (if_statement "if (uVar5 == 0) break;" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "sVar3 = strlen(name);" (assignment_expression "sVar3 = strlen(name)" identifier = (call_expression "strlen(name)" identifier (argument_list "(name)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = names_size - (uVar5 + sVar3);" (assignment_expression "__haystacklen = names_size - (uVar5 + sVar3)" identifier = (binary_expression "names_size - (uVar5 + sVar3)" identifier - (parenthesized_expression "(uVar5 + sVar3)" ( (binary_expression "uVar5 + sVar3" identifier + identifier) )))) ;) (expression_statement "__haystack = names + uVar5 + sVar3;" (assignment_expression "__haystack = names + uVar5 + sVar3" identifier = (binary_expression "names + uVar5 + sVar3" (binary_expression "names + uVar5" identifier + identifier) + identifier)) ;) (labeled_statement "LAB_001c13ff:\n    pvVar4 = memmem(__haystack,__haystacklen,name,sVar3);" statement_identifier : (expression_statement "pvVar4 = memmem(__haystack,__haystacklen,name,sVar3);" (assignment_expression "pvVar4 = memmem(__haystack,__haystacklen,name,sVar3)" identifier = (call_expression "memmem(__haystack,__haystacklen,name,sVar3)" identifier (argument_list "(__haystack,__haystacklen,name,sVar3)" ( identifier , identifier , identifier , identifier )))) ;)) (if_statement "if (pvVar4 == (void *)0x0) {\n      return (uchar *)0x0;\n    }" if (parenthesized_expression "(pvVar4 == (void *)0x0)" ( (binary_expression "pvVar4 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (uchar *)0x0;\n    }" { (return_statement "return (uchar *)0x0;" return (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar5 = (long)pvVar4 - (long)names;" (assignment_expression "uVar5 = (long)pvVar4 - (long)names" identifier = (binary_expression "(long)pvVar4 - (long)names" (cast_expression "(long)pvVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)names" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "hdr = pshdrs;" (assignment_expression "hdr = pshdrs" identifier = identifier) ;) (if_statement "if (uVar5 == 0) {\n      return pshdrs;\n    }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return pshdrs;\n    }" { (return_statement "return pshdrs;" return identifier ;) })) })) (return_statement "return (uchar *)0x0;" return (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))
(translation_unit "uint * FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint *puVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*param_6;\n  while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}\n\n" (function_definition "uint * FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint *puVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*param_6;\n  while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" type_identifier (pointer_declarator "* FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" * (function_declarator "FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" identifier (parameter_list "(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "void *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "size_t param_5" primitive_type identifier) , (parameter_declaration "uint *param_6" type_identifier (pointer_declarator "*param_6" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint *puVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*param_6;\n  while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "size_t __haystacklen;" primitive_type identifier ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }" if (parenthesized_expression "(param_6 == (uint *)0x0)" ( (binary_expression "param_6 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }" { (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" identifier = (call_expression "strlen(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = param_5;" (assignment_expression "__haystacklen = param_5" identifier = identifier) ;) (expression_statement "pvVar4 = param_4;" (assignment_expression "pvVar4 = param_4" identifier = identifier) ;) (goto_statement "goto LAB_001c13ff;" goto statement_identifier ;) })) (expression_statement "uVar5 = (ulong)*param_6;" (assignment_expression "uVar5 = (ulong)*param_6" identifier = (binary_expression "(ulong)*param_6" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) ;) (while_statement "while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" { (expression_statement "puVar7 = param_6 + 0x10;" (assignment_expression "puVar7 = param_6 + 0x10" identifier = (binary_expression "param_6 + 0x10" identifier + number_literal)) ;) (expression_statement "puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);" (assignment_expression "puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2)" identifier = (cast_expression "(uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(uint)(iVar1 << 6) + (long)param_2)" ( (binary_expression "(ulong)(uint)(iVar1 << 6) + (long)param_2" (call_expression "(ulong)(uint)(iVar1 << 6)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(iVar1 << 6)" ( (binary_expression "iVar1 << 6" identifier << number_literal) ))) + (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (if_statement "if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }" if (parenthesized_expression "(puVar7 < puVar6)" ( (binary_expression "puVar7 < puVar6" identifier < identifier) )) (compound_statement "{\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }" { (expression_statement "uVar2 = param_6[0x10];" (assignment_expression "uVar2 = param_6[0x10]" identifier = (subscript_expression "param_6[0x10]" identifier [ number_literal ])) ;) (while_statement "while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }" { (if_statement "if (uVar5 == uVar2) {\n          return puVar7;\n        }" if (parenthesized_expression "(uVar5 == uVar2)" ( (binary_expression "uVar5 == uVar2" identifier == identifier) )) (compound_statement "{\n          return puVar7;\n        }" { (return_statement "return puVar7;" return identifier ;) })) (expression_statement "puVar7 = puVar7 + 0x10;" (assignment_expression "puVar7 = puVar7 + 0x10" identifier = (binary_expression "puVar7 + 0x10" identifier + number_literal)) ;) (if_statement "if (puVar6 <= puVar7) break;" if (parenthesized_expression "(puVar6 <= puVar7)" ( (binary_expression "puVar6 <= puVar7" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = *puVar7;" (assignment_expression "uVar2 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) })) })) (if_statement "if (uVar5 == 0) break;" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" identifier = (call_expression "strlen(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = param_5 - (uVar5 + sVar3);" (assignment_expression "__haystacklen = param_5 - (uVar5 + sVar3)" identifier = (binary_expression "param_5 - (uVar5 + sVar3)" identifier - (parenthesized_expression "(uVar5 + sVar3)" ( (binary_expression "uVar5 + sVar3" identifier + identifier) )))) ;) (expression_statement "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);" (assignment_expression "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3)" identifier = (cast_expression "(void *)((long)param_4 + uVar5 + sVar3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_4 + uVar5 + sVar3)" ( (binary_expression "(long)param_4 + uVar5 + sVar3" (binary_expression "(long)param_4 + uVar5" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + identifier) )))) ;) (labeled_statement "LAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" statement_identifier : (expression_statement "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" (assignment_expression "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3)" identifier = (call_expression "memmem(pvVar4,__haystacklen,param_3,sVar3)" identifier (argument_list "(pvVar4,__haystacklen,param_3,sVar3)" ( identifier , identifier , identifier , identifier )))) ;)) (if_statement "if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }" if (parenthesized_expression "(pvVar4 == (void *)0x0)" ( (binary_expression "pvVar4 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (uint *)0x0;\n    }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar5 = (long)pvVar4 - (long)param_4;" (assignment_expression "uVar5 = (long)pvVar4 - (long)param_4" identifier = (binary_expression "(long)pvVar4 - (long)param_4" (cast_expression "(long)pvVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "param_6 = param_2;" (assignment_expression "param_6 = param_2" identifier = identifier) ;) (if_statement "if (uVar5 == 0) {\n      return param_2;\n    }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return param_2;\n    }" { (return_statement "return param_2;" return identifier ;) })) })) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression IDENT << LIT) ))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + IDENT) )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , 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) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) })) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "uint * FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint *puVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*param_6;\n  while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" (type_identifier "uint") (pointer_declarator "* FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" (* "*") (function_declarator "FUN_001c1380(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" (identifier "FUN_001c1380") (parameter_list "(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "char *param_3" (primitive_type "char") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "void *param_4" (primitive_type "void") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "size_t param_5" (primitive_type "size_t") (identifier "param_5")) (, ",") (parameter_declaration "uint *param_6" (type_identifier "uint") (pointer_declarator "*param_6" (* "*") (identifier "param_6"))) () ")")))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint *puVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }\n  uVar5 = (ulong)*param_6;\n  while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "size_t sVar3;" (primitive_type "size_t") (identifier "sVar3") (; ";")) (declaration "void *pvVar4;" (primitive_type "void") (pointer_declarator "*pvVar4" (* "*") (identifier "pvVar4")) (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "uint *puVar6;" (type_identifier "uint") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "uint *puVar7;" (type_identifier "uint") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "size_t __haystacklen;" (primitive_type "size_t") (identifier "__haystacklen") (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x38)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x38)" (* "*") (cast_expression "(int *)(param_1 + 0x38)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (if_statement "if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }" (if "if") (parenthesized_expression "(param_6 == (uint *)0x0)" (( "(") (binary_expression "param_6 == (uint *)0x0" (identifier "param_6") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_001c13ff;\n  }" ({ "{") (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" (identifier "sVar3") (= "=") (call_expression "strlen(param_3)" (identifier "strlen") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")")))) (; ";")) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" (identifier "sVar3") (= "=") (binary_expression "sVar3 + 1" (identifier "sVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "__haystacklen = param_5;" (assignment_expression "__haystacklen = param_5" (identifier "__haystacklen") (= "=") (identifier "param_5")) (; ";")) (expression_statement "pvVar4 = param_4;" (assignment_expression "pvVar4 = param_4" (identifier "pvVar4") (= "=") (identifier "param_4")) (; ";")) (goto_statement "goto LAB_001c13ff;" (goto "goto") (statement_identifier "LAB_001c13ff") (; ";")) (} "}"))) (expression_statement "uVar5 = (ulong)*param_6;" (assignment_expression "uVar5 = (ulong)*param_6" (identifier "uVar5") (= "=") (binary_expression "(ulong)*param_6" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (identifier "param_6"))) (; ";")) (while_statement "while( true ) {\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    puVar7 = param_6 + 0x10;\n    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);\n    if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" ({ "{") (expression_statement "puVar7 = param_6 + 0x10;" (assignment_expression "puVar7 = param_6 + 0x10" (identifier "puVar7") (= "=") (binary_expression "param_6 + 0x10" (identifier "param_6") (+ "+") (number_literal "0x10"))) (; ";")) (expression_statement "puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);" (assignment_expression "puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2)" (identifier "puVar6") (= "=") (cast_expression "(uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)(uint)(iVar1 << 6) + (long)param_2)" (( "(") (binary_expression "(ulong)(uint)(iVar1 << 6) + (long)param_2" (call_expression "(ulong)(uint)(iVar1 << 6)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uint)" (( "(") (identifier "uint") () ")"))) (argument_list "(iVar1 << 6)" (( "(") (binary_expression "iVar1 << 6" (identifier "iVar1") (<< "<<") (number_literal "6")) () ")"))) (+ "+") (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2"))) () ")")))) (; ";")) (if_statement "if (puVar7 < puVar6) {\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }" (if "if") (parenthesized_expression "(puVar7 < puVar6)" (( "(") (binary_expression "puVar7 < puVar6" (identifier "puVar7") (< "<") (identifier "puVar6")) () ")")) (compound_statement "{\n      uVar2 = param_6[0x10];\n      while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }\n    }" ({ "{") (expression_statement "uVar2 = param_6[0x10];" (assignment_expression "uVar2 = param_6[0x10]" (identifier "uVar2") (= "=") (subscript_expression "param_6[0x10]" (identifier "param_6") ([ "[") (number_literal "0x10") (] "]"))) (; ";")) (while_statement "while( true ) {\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        if (uVar5 == uVar2) {\n          return puVar7;\n        }\n        puVar7 = puVar7 + 0x10;\n        if (puVar6 <= puVar7) break;\n        uVar2 = *puVar7;\n      }" ({ "{") (if_statement "if (uVar5 == uVar2) {\n          return puVar7;\n        }" (if "if") (parenthesized_expression "(uVar5 == uVar2)" (( "(") (binary_expression "uVar5 == uVar2" (identifier "uVar5") (== "==") (identifier "uVar2")) () ")")) (compound_statement "{\n          return puVar7;\n        }" ({ "{") (return_statement "return puVar7;" (return "return") (identifier "puVar7") (; ";")) (} "}"))) (expression_statement "puVar7 = puVar7 + 0x10;" (assignment_expression "puVar7 = puVar7 + 0x10" (identifier "puVar7") (= "=") (binary_expression "puVar7 + 0x10" (identifier "puVar7") (+ "+") (number_literal "0x10"))) (; ";")) (if_statement "if (puVar6 <= puVar7) break;" (if "if") (parenthesized_expression "(puVar6 <= puVar7)" (( "(") (binary_expression "puVar6 <= puVar7" (identifier "puVar6") (<= "<=") (identifier "puVar7")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar2 = *puVar7;" (assignment_expression "uVar2 = *puVar7" (identifier "uVar2") (= "=") (pointer_expression "*puVar7" (* "*") (identifier "puVar7"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar5 == 0) break;" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" (identifier "sVar3") (= "=") (call_expression "strlen(param_3)" (identifier "strlen") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")")))) (; ";")) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" (identifier "sVar3") (= "=") (binary_expression "sVar3 + 1" (identifier "sVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "__haystacklen = param_5 - (uVar5 + sVar3);" (assignment_expression "__haystacklen = param_5 - (uVar5 + sVar3)" (identifier "__haystacklen") (= "=") (binary_expression "param_5 - (uVar5 + sVar3)" (identifier "param_5") (- "-") (parenthesized_expression "(uVar5 + sVar3)" (( "(") (binary_expression "uVar5 + sVar3" (identifier "uVar5") (+ "+") (identifier "sVar3")) () ")")))) (; ";")) (expression_statement "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);" (assignment_expression "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3)" (identifier "pvVar4") (= "=") (cast_expression "(void *)((long)param_4 + uVar5 + sVar3)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_4 + uVar5 + sVar3)" (( "(") (binary_expression "(long)param_4 + uVar5 + sVar3" (binary_expression "(long)param_4 + uVar5" (cast_expression "(long)param_4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_4")) (+ "+") (identifier "uVar5")) (+ "+") (identifier "sVar3")) () ")")))) (; ";")) (labeled_statement "LAB_001c13ff:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" (statement_identifier "LAB_001c13ff") (: ":") (expression_statement "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" (assignment_expression "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3)" (identifier "pvVar4") (= "=") (call_expression "memmem(pvVar4,__haystacklen,param_3,sVar3)" (identifier "memmem") (argument_list "(pvVar4,__haystacklen,param_3,sVar3)" (( "(") (identifier "pvVar4") (, ",") (identifier "__haystacklen") (, ",") (identifier "param_3") (, ",") (identifier "sVar3") () ")")))) (; ";"))) (if_statement "if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }" (if "if") (parenthesized_expression "(pvVar4 == (void *)0x0)" (( "(") (binary_expression "pvVar4 == (void *)0x0" (identifier "pvVar4") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return (uint *)0x0;\n    }" ({ "{") (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "uVar5 = (long)pvVar4 - (long)param_4;" (assignment_expression "uVar5 = (long)pvVar4 - (long)param_4" (identifier "uVar5") (= "=") (binary_expression "(long)pvVar4 - (long)param_4" (cast_expression "(long)pvVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar4")) (- "-") (cast_expression "(long)param_4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_4")))) (; ";")) (expression_statement "param_6 = param_2;" (assignment_expression "param_6 = param_2" (identifier "param_6") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (uVar5 == 0) {\n      return param_2;\n    }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return param_2;\n    }" ({ "{") (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}"))) (} "}"))) (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))

/* DWARF original name: find_shdr<64, false>
   DWARF original prototype: uchar * find_shdr<64,_false>(Object * this, uchar * pshdrs, char *
   name, char * names, section_size_type names_size, uchar * hdr) */

type_3 * __thiscall
gold::Object::find_shdr<64,_false>
          (Object *this,type_3 *var_5,char *name,char *var_10,section_size_type var_9,type_3 *var_1
          )

{
  type_1 var_6;
  type_1 var_8;
  size_t var_3;
  void *var_12;
  type_2 var_7;
  type_1 *var_4;
  size_t __haystacklen;
  char *__haystack;
  
  var_6 = this->shnum_;
  if (var_1 == (type_3 *)0x0) {
    var_3 = var_2(name);
    var_3 = var_3 + 1;
    __haystacklen = var_9;
    __haystack = var_10;
    goto LAB_001c13ff;
  }
  var_7 = (type_2)*(type_1 *)var_1;
  while( true ) {
    var_4 = (type_1 *)(var_1 + 0x40);
    if (var_4 < var_5 + (var_6 << 6)) {
      var_8 = *(type_1 *)(var_1 + 0x40);
      while( true ) {
        if (var_7 == var_8) {
          return (type_3 *)var_4;
        }
        var_4 = var_4 + 0x10;
        if (var_5 + (var_6 << 6) <= var_4) break;
        var_8 = *var_4;
      }
    }
    if (var_7 == 0) break;
    var_3 = var_2(name);
    var_3 = var_3 + 1;
    __haystacklen = var_9 - (var_7 + var_3);
    __haystack = var_10 + var_7 + var_3;
LAB_001c13ff:
    var_12 = var_11(__haystack,__haystacklen,name,var_3);
    if (var_12 == (void *)0x0) {
      return (type_3 *)0x0;
    }
    var_7 = (long)var_12 - (long)var_10;
    var_1 = var_5;
    if (var_7 == 0) {
      return var_5;
    }
  }
  return (type_3 *)0x0;
}


(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (call_expression function: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (identifier))) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)) right: (identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (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: (number_literal)))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))))) (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))

uint * MASKED(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,
                   uint *param_6)

{
  int iVar1;
  uint uVar2;
  size_t sVar3;
  void *pvVar4;
  ulong uVar5;
  uint *puVar6;
  uint *puVar7;
  size_t __haystacklen;
  
  iVar1 = *(int *)(param_1 + 0x38);
  if (param_6 == (uint *)0x0) {
    sVar3 = strlen(param_3);
    sVar3 = sVar3 + 1;
    __haystacklen = param_5;
    pvVar4 = param_4;
    goto LAB_001c13ff;
  }
  uVar5 = (ulong)*param_6;
  while( true ) {
    puVar7 = param_6 + 0x10;
    puVar6 = (uint *)((ulong)(uint)(iVar1 << 6) + (long)param_2);
    if (puVar7 < puVar6) {
      uVar2 = param_6[0x10];
      while( true ) {
        if (uVar5 == uVar2) {
          return puVar7;
        }
        puVar7 = puVar7 + 0x10;
        if (puVar6 <= puVar7) break;
        uVar2 = *puVar7;
      }
    }
    if (uVar5 == 0) break;
    sVar3 = strlen(param_3);
    sVar3 = sVar3 + 1;
    __haystacklen = param_5 - (uVar5 + sVar3);
    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);
LAB_001c13ff:
    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);
    if (pvVar4 == (void *)0x0) {
      return (uint *)0x0;
    }
    uVar5 = (long)pvVar4 - (long)param_4;
    param_6 = param_2;
    if (uVar5 == 0) {
      return param_2;
    }
  }
  return (uint *)0x0;
}

