
char * parse_gnu_debuglink(dwarf_section *section,void *data)

{
  ulong __maxlen;
  uchar *__string;
  uint uVar1;
  size_t sVar2;
  elf_vma eVar3;
  
  __maxlen = section->size;
  __string = section->start;
  sVar2 = strnlen((char *)__string,__maxlen);
  uVar1 = (int)sVar2 + 4U & 0xfffffffc;
  if (uVar1 + 4 <= __maxlen) {
    eVar3 = (*byte_get)(__string + uVar1,4);
    *(elf_vma *)data = eVar3;
    return (char *)__string;
  }
  return (char *)0x0;
}



char * FUN_0010ead0(long param_1,undefined8 *param_2)

{
  ulong __maxlen;
  char *__string;
  uint uVar1;
  size_t sVar2;
  undefined8 uVar3;
  
  __maxlen = *(ulong *)(param_1 + 0x30);
  __string = *(char **)(param_1 + 0x20);
  sVar2 = strnlen(__string,__maxlen);
  uVar1 = (int)sVar2 + 4U & 0xfffffffc;
  if (uVar1 + 4 <= __maxlen) {
    uVar3 = (*DAT_00159e20)(__string + uVar1,4);
    *param_2 = uVar3;
    return __string;
  }
  return (char *)0x0;
}


PUSH R12
PUSH RBP
MOV RBP,RSI
PUSH RBX
MOV R12,qword ptr [RDI + 0x30]
MOV RBX,qword ptr [RDI + 0x20]
MOV RSI,R12
MOV RDI,RBX
CALL 0x00107340
ADD EAX,0x4
AND EAX,0xfffffffc
LEA EDX,[RAX + 0x4]
CMP R12,RDX
JC 0x0010eb18
LEA RDI,[RBX + RAX*0x1]
MOV ESI,0x4
CALL qword ptr [0x00159e20]
MOV qword ptr [RBP],RAX
MOV RAX,RBX
POP RBX
POP RBP
POP R12
RET
XOR EBX,EBX
MOV RAX,RBX
POP RBX
POP RBP
POP R12
RET
(translation_unit "char * FUN_0010ead0(long param_1,undefined8 *param_2)\n\n{\n  ulong __maxlen;\n  char *__string;\n  uint uVar1;\n  size_t sVar2;\n  undefined8 uVar3;\n  \n  __maxlen = *(ulong *)(param_1 + 0x30);\n  __string = *(char **)(param_1 + 0x20);\n  sVar2 = strnlen(__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }\n  return (char *)0x0;\n}\n\n" (function_definition "char * FUN_0010ead0(long param_1,undefined8 *param_2)\n\n{\n  ulong __maxlen;\n  char *__string;\n  uint uVar1;\n  size_t sVar2;\n  undefined8 uVar3;\n  \n  __maxlen = *(ulong *)(param_1 + 0x30);\n  __string = *(char **)(param_1 + 0x20);\n  sVar2 = strnlen(__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }\n  return (char *)0x0;\n}" primitive_type (pointer_declarator "* FUN_0010ead0(long param_1,undefined8 *param_2)" * (function_declarator "FUN_0010ead0(long param_1,undefined8 *param_2)" identifier (parameter_list "(long param_1,undefined8 *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  ulong __maxlen;\n  char *__string;\n  uint uVar1;\n  size_t sVar2;\n  undefined8 uVar3;\n  \n  __maxlen = *(ulong *)(param_1 + 0x30);\n  __string = *(char **)(param_1 + 0x20);\n  sVar2 = strnlen(__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }\n  return (char *)0x0;\n}" { (declaration "ulong __maxlen;" type_identifier identifier ;) (declaration "char *__string;" primitive_type (pointer_declarator "*__string" * identifier) ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (expression_statement "__maxlen = *(ulong *)(param_1 + 0x30);" (assignment_expression "__maxlen = *(ulong *)(param_1 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x30)" * (cast_expression "(ulong *)(param_1 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "__string = *(char **)(param_1 + 0x20);" (assignment_expression "__string = *(char **)(param_1 + 0x20)" identifier = (pointer_expression "*(char **)(param_1 + 0x20)" * (cast_expression "(char **)(param_1 + 0x20)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "sVar2 = strnlen(__string,__maxlen);" (assignment_expression "sVar2 = strnlen(__string,__maxlen)" identifier = (call_expression "strnlen(__string,__maxlen)" identifier (argument_list "(__string,__maxlen)" ( identifier , identifier )))) ;) (expression_statement "uVar1 = (int)sVar2 + 4U & 0xfffffffc;" (assignment_expression "uVar1 = (int)sVar2 + 4U & 0xfffffffc" identifier = (binary_expression "(int)sVar2 + 4U & 0xfffffffc" (binary_expression "(int)sVar2 + 4U" (cast_expression "(int)sVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) & number_literal)) ;) (if_statement "if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }" if (parenthesized_expression "(uVar1 + 4 <= __maxlen)" ( (binary_expression "uVar1 + 4 <= __maxlen" (binary_expression "uVar1 + 4" identifier + number_literal) <= identifier) )) (compound_statement "{\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }" { (expression_statement "uVar3 = (*DAT_00159e20)(__string + uVar1,4);" (assignment_expression "uVar3 = (*DAT_00159e20)(__string + uVar1,4)" identifier = (call_expression "(*DAT_00159e20)(__string + uVar1,4)" (parenthesized_expression "(*DAT_00159e20)" ( (pointer_expression "*DAT_00159e20" * identifier) )) (argument_list "(__string + uVar1,4)" ( (binary_expression "__string + uVar1" identifier + identifier) , number_literal )))) ;) (expression_statement "*param_2 = uVar3;" (assignment_expression "*param_2 = uVar3" (pointer_expression "*param_2" * identifier) = identifier) ;) (return_statement "return __string;" return identifier ;) })) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "char * parse_gnu_debuglink(dwarf_section *section,void *data)\n\n{\n  ulong __maxlen;\n  uchar *__string;\n  uint uVar1;\n  size_t sVar2;\n  elf_vma eVar3;\n  \n  __maxlen = section->size;\n  __string = section->start;\n  sVar2 = strnlen((char *)__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    eVar3 = (*byte_get)(__string + uVar1,4);\n    *(elf_vma *)data = eVar3;\n    return (char *)__string;\n  }\n  return (char *)0x0;\n}\n\n" (function_definition "char * parse_gnu_debuglink(dwarf_section *section,void *data)\n\n{\n  ulong __maxlen;\n  uchar *__string;\n  uint uVar1;\n  size_t sVar2;\n  elf_vma eVar3;\n  \n  __maxlen = section->size;\n  __string = section->start;\n  sVar2 = strnlen((char *)__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    eVar3 = (*byte_get)(__string + uVar1,4);\n    *(elf_vma *)data = eVar3;\n    return (char *)__string;\n  }\n  return (char *)0x0;\n}" primitive_type (pointer_declarator "* parse_gnu_debuglink(dwarf_section *section,void *data)" * (function_declarator "parse_gnu_debuglink(dwarf_section *section,void *data)" identifier (parameter_list "(dwarf_section *section,void *data)" ( (parameter_declaration "dwarf_section *section" type_identifier (pointer_declarator "*section" * identifier)) , (parameter_declaration "void *data" primitive_type (pointer_declarator "*data" * identifier)) )))) (compound_statement "{\n  ulong __maxlen;\n  uchar *__string;\n  uint uVar1;\n  size_t sVar2;\n  elf_vma eVar3;\n  \n  __maxlen = section->size;\n  __string = section->start;\n  sVar2 = strnlen((char *)__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    eVar3 = (*byte_get)(__string + uVar1,4);\n    *(elf_vma *)data = eVar3;\n    return (char *)__string;\n  }\n  return (char *)0x0;\n}" { (declaration "ulong __maxlen;" type_identifier identifier ;) (declaration "uchar *__string;" type_identifier (pointer_declarator "*__string" * identifier) ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "elf_vma eVar3;" type_identifier identifier ;) (expression_statement "__maxlen = section->size;" (assignment_expression "__maxlen = section->size" identifier = (field_expression "section->size" identifier -> field_identifier)) ;) (expression_statement "__string = section->start;" (assignment_expression "__string = section->start" identifier = (field_expression "section->start" identifier -> field_identifier)) ;) (expression_statement "sVar2 = strnlen((char *)__string,__maxlen);" (assignment_expression "sVar2 = strnlen((char *)__string,__maxlen)" identifier = (call_expression "strnlen((char *)__string,__maxlen)" identifier (argument_list "((char *)__string,__maxlen)" ( (cast_expression "(char *)__string" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (expression_statement "uVar1 = (int)sVar2 + 4U & 0xfffffffc;" (assignment_expression "uVar1 = (int)sVar2 + 4U & 0xfffffffc" identifier = (binary_expression "(int)sVar2 + 4U & 0xfffffffc" (binary_expression "(int)sVar2 + 4U" (cast_expression "(int)sVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) & number_literal)) ;) (if_statement "if (uVar1 + 4 <= __maxlen) {\n    eVar3 = (*byte_get)(__string + uVar1,4);\n    *(elf_vma *)data = eVar3;\n    return (char *)__string;\n  }" if (parenthesized_expression "(uVar1 + 4 <= __maxlen)" ( (binary_expression "uVar1 + 4 <= __maxlen" (binary_expression "uVar1 + 4" identifier + number_literal) <= identifier) )) (compound_statement "{\n    eVar3 = (*byte_get)(__string + uVar1,4);\n    *(elf_vma *)data = eVar3;\n    return (char *)__string;\n  }" { (expression_statement "eVar3 = (*byte_get)(__string + uVar1,4);" (assignment_expression "eVar3 = (*byte_get)(__string + uVar1,4)" identifier = (call_expression "(*byte_get)(__string + uVar1,4)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(__string + uVar1,4)" ( (binary_expression "__string + uVar1" identifier + identifier) , number_literal )))) ;) (expression_statement "*(elf_vma *)data = eVar3;" (assignment_expression "*(elf_vma *)data = eVar3" (pointer_expression "*(elf_vma *)data" * (cast_expression "(elf_vma *)data" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (return_statement "return (char *)__string;" return (cast_expression "(char *)__string" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ;) })) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "char * FUN_0010ead0(long param_1,undefined8 *param_2)\n\n{\n  ulong __maxlen;\n  char *__string;\n  uint uVar1;\n  size_t sVar2;\n  undefined8 uVar3;\n  \n  __maxlen = *(ulong *)(param_1 + 0x30);\n  __string = *(char **)(param_1 + 0x20);\n  sVar2 = strnlen(__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }\n  return (char *)0x0;\n}\n\n" (function_definition "char * FUN_0010ead0(long param_1,undefined8 *param_2)\n\n{\n  ulong __maxlen;\n  char *__string;\n  uint uVar1;\n  size_t sVar2;\n  undefined8 uVar3;\n  \n  __maxlen = *(ulong *)(param_1 + 0x30);\n  __string = *(char **)(param_1 + 0x20);\n  sVar2 = strnlen(__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }\n  return (char *)0x0;\n}" primitive_type (pointer_declarator "* FUN_0010ead0(long param_1,undefined8 *param_2)" * (function_declarator "FUN_0010ead0(long param_1,undefined8 *param_2)" identifier (parameter_list "(long param_1,undefined8 *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  ulong __maxlen;\n  char *__string;\n  uint uVar1;\n  size_t sVar2;\n  undefined8 uVar3;\n  \n  __maxlen = *(ulong *)(param_1 + 0x30);\n  __string = *(char **)(param_1 + 0x20);\n  sVar2 = strnlen(__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }\n  return (char *)0x0;\n}" { (declaration "ulong __maxlen;" type_identifier identifier ;) (declaration "char *__string;" primitive_type (pointer_declarator "*__string" * identifier) ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (expression_statement "__maxlen = *(ulong *)(param_1 + 0x30);" (assignment_expression "__maxlen = *(ulong *)(param_1 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x30)" * (cast_expression "(ulong *)(param_1 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "__string = *(char **)(param_1 + 0x20);" (assignment_expression "__string = *(char **)(param_1 + 0x20)" identifier = (pointer_expression "*(char **)(param_1 + 0x20)" * (cast_expression "(char **)(param_1 + 0x20)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "sVar2 = strnlen(__string,__maxlen);" (assignment_expression "sVar2 = strnlen(__string,__maxlen)" identifier = (call_expression "strnlen(__string,__maxlen)" identifier (argument_list "(__string,__maxlen)" ( identifier , identifier )))) ;) (expression_statement "uVar1 = (int)sVar2 + 4U & 0xfffffffc;" (assignment_expression "uVar1 = (int)sVar2 + 4U & 0xfffffffc" identifier = (binary_expression "(int)sVar2 + 4U & 0xfffffffc" (binary_expression "(int)sVar2 + 4U" (cast_expression "(int)sVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) & number_literal)) ;) (if_statement "if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }" if (parenthesized_expression "(uVar1 + 4 <= __maxlen)" ( (binary_expression "uVar1 + 4 <= __maxlen" (binary_expression "uVar1 + 4" identifier + number_literal) <= identifier) )) (compound_statement "{\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }" { (expression_statement "uVar3 = (*DAT_00159e20)(__string + uVar1,4);" (assignment_expression "uVar3 = (*DAT_00159e20)(__string + uVar1,4)" identifier = (call_expression "(*DAT_00159e20)(__string + uVar1,4)" (parenthesized_expression "(*DAT_00159e20)" ( (pointer_expression "*DAT_00159e20" * identifier) )) (argument_list "(__string + uVar1,4)" ( (binary_expression "__string + uVar1" identifier + identifier) , number_literal )))) ;) (expression_statement "*param_2 = uVar3;" (assignment_expression "*param_2 = uVar3" (pointer_expression "*param_2" * identifier) = identifier) ;) (return_statement "return __string;" return identifier ;) })) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (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)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE 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) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression IDENT + IDENT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return IDENT ;) })) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "char * FUN_0010ead0(long param_1,undefined8 *param_2)\n\n{\n  ulong __maxlen;\n  char *__string;\n  uint uVar1;\n  size_t sVar2;\n  undefined8 uVar3;\n  \n  __maxlen = *(ulong *)(param_1 + 0x30);\n  __string = *(char **)(param_1 + 0x20);\n  sVar2 = strnlen(__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }\n  return (char *)0x0;\n}" (primitive_type "char") (pointer_declarator "* FUN_0010ead0(long param_1,undefined8 *param_2)" (* "*") (function_declarator "FUN_0010ead0(long param_1,undefined8 *param_2)" (identifier "FUN_0010ead0") (parameter_list "(long param_1,undefined8 *param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")")))) (compound_statement "{\n  ulong __maxlen;\n  char *__string;\n  uint uVar1;\n  size_t sVar2;\n  undefined8 uVar3;\n  \n  __maxlen = *(ulong *)(param_1 + 0x30);\n  __string = *(char **)(param_1 + 0x20);\n  sVar2 = strnlen(__string,__maxlen);\n  uVar1 = (int)sVar2 + 4U & 0xfffffffc;\n  if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }\n  return (char *)0x0;\n}" ({ "{") (declaration "ulong __maxlen;" (type_identifier "ulong") (identifier "__maxlen") (; ";")) (declaration "char *__string;" (primitive_type "char") (pointer_declarator "*__string" (* "*") (identifier "__string")) (; ";")) (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "size_t sVar2;" (primitive_type "size_t") (identifier "sVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (expression_statement "__maxlen = *(ulong *)(param_1 + 0x30);" (assignment_expression "__maxlen = *(ulong *)(param_1 + 0x30)" (identifier "__maxlen") (= "=") (pointer_expression "*(ulong *)(param_1 + 0x30)" (* "*") (cast_expression "(ulong *)(param_1 + 0x30)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")"))))) (; ";")) (expression_statement "__string = *(char **)(param_1 + 0x20);" (assignment_expression "__string = *(char **)(param_1 + 0x20)" (identifier "__string") (= "=") (pointer_expression "*(char **)(param_1 + 0x20)" (* "*") (cast_expression "(char **)(param_1 + 0x20)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "sVar2 = strnlen(__string,__maxlen);" (assignment_expression "sVar2 = strnlen(__string,__maxlen)" (identifier "sVar2") (= "=") (call_expression "strnlen(__string,__maxlen)" (identifier "strnlen") (argument_list "(__string,__maxlen)" (( "(") (identifier "__string") (, ",") (identifier "__maxlen") () ")")))) (; ";")) (expression_statement "uVar1 = (int)sVar2 + 4U & 0xfffffffc;" (assignment_expression "uVar1 = (int)sVar2 + 4U & 0xfffffffc" (identifier "uVar1") (= "=") (binary_expression "(int)sVar2 + 4U & 0xfffffffc" (binary_expression "(int)sVar2 + 4U" (cast_expression "(int)sVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar2")) (+ "+") (number_literal "4U")) (& "&") (number_literal "0xfffffffc"))) (; ";")) (if_statement "if (uVar1 + 4 <= __maxlen) {\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }" (if "if") (parenthesized_expression "(uVar1 + 4 <= __maxlen)" (( "(") (binary_expression "uVar1 + 4 <= __maxlen" (binary_expression "uVar1 + 4" (identifier "uVar1") (+ "+") (number_literal "4")) (<= "<=") (identifier "__maxlen")) () ")")) (compound_statement "{\n    uVar3 = (*DAT_00159e20)(__string + uVar1,4);\n    *param_2 = uVar3;\n    return __string;\n  }" ({ "{") (expression_statement "uVar3 = (*DAT_00159e20)(__string + uVar1,4);" (assignment_expression "uVar3 = (*DAT_00159e20)(__string + uVar1,4)" (identifier "uVar3") (= "=") (call_expression "(*DAT_00159e20)(__string + uVar1,4)" (parenthesized_expression "(*DAT_00159e20)" (( "(") (pointer_expression "*DAT_00159e20" (* "*") (identifier "DAT_00159e20")) () ")")) (argument_list "(__string + uVar1,4)" (( "(") (binary_expression "__string + uVar1" (identifier "__string") (+ "+") (identifier "uVar1")) (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "*param_2 = uVar3;" (assignment_expression "*param_2 = uVar3" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "uVar3")) (; ";")) (return_statement "return __string;" (return "return") (identifier "__string") (; ";")) (} "}"))) (return_statement "return (char *)0x0;" (return "return") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))

char * function_1(type_1 *section,void *data)

{
  type_2 var_3;
  type_3 *var_4;
  type_4 var_2;
  size_t sVar2;
  type_5 eVar3;
  
  var_3 = section->size;
  var_4 = section->start;
  sVar2 = var_1((char *)var_4,var_3);
  var_2 = (int)sVar2 + 4U & 0xfffffffc;
  if (var_2 + 4 <= var_3) {
    eVar3 = (*byte_get)(var_4 + var_2,4);
    *(type_5 *)data = eVar3;
    return (char *)var_4;
  }
  return (char *)0x0;
}


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

char * MASKED(long param_1,undefined8 *param_2)

{
  ulong __maxlen;
  char *__string;
  uint uVar1;
  size_t sVar2;
  undefined8 uVar3;
  
  __maxlen = *(ulong *)(param_1 + 0x30);
  __string = *(char **)(param_1 + 0x20);
  sVar2 = strnlen(__string,__maxlen);
  uVar1 = (int)sVar2 + 4U & 0xfffffffc;
  if (uVar1 + 4 <= __maxlen) {
    uVar3 = (*DAT_00159e20)(__string + uVar1,4);
    *param_2 = uVar3;
    return __string;
  }
  return (char *)0x0;
}

