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

bfd_boolean __regparm3 get_64bit_section_headers(Filedata *filedata,bfd_boolean probe)

{
  uint uVar1;
  char *pcVar2;
  uchar *__ptr;
  Elf_Internal_Shdr *pEVar3;
  elf_vma eVar6;
  uchar *puVar4;
  bool bVar5;
  uint local_38;
  uint local_34;
  
  uVar1 = (filedata->file_header).e_shentsize;
  if (probe == 0) {
    local_34 = (filedata->file_header).e_shnum;
    bVar5 = local_34 == 0;
  }
  else {
    bVar5 = false;
    local_34 = 1;
  }
  if (uVar1 == 0) {
    return 0;
  }
  if (bVar5) {
    return 0;
  }
  if (uVar1 < 0x40) {
    if (probe != 0) {
      return 0;
    }
    pcVar2 = (char *)dcgettext(0,
                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
                               ,5);
    error(pcVar2);
    return 0;
  }
  if (((probe & 1U) == 0) && (0x40 < uVar1)) {
    pcVar2 = (char *)dcgettext(0,
                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
                               ,5);
    warn(pcVar2);
  }
  else if (probe != 0) {
    pcVar2 = (char *)0x0;
    goto LAB_0001de46;
  }
  pcVar2 = (char *)dcgettext(0,"section headers",5);
LAB_0001de46:
  __ptr = (uchar *)get_data((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,
                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2);
  if (__ptr != (uchar *)0x0) {
    free(filedata->section_headers);
    pEVar3 = (Elf_Internal_Shdr *)cmalloc(local_34,0x48);
    filedata->section_headers = pEVar3;
    if (pEVar3 != (Elf_Internal_Shdr *)0x0) {
      local_38 = 0;
      puVar4 = __ptr;
      do {
        eVar6._0_4_ = (*byte_get)(puVar4,4);
                    /* WARNING: Store size is inaccurate */
        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;
        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);
                    /* WARNING: Store size is inaccurate */
        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;
        eVar6 = (*byte_get)(puVar4 + 8,8);
        pEVar3->sh_flags = eVar6;
        eVar6 = (*byte_get)(puVar4 + 0x10,8);
        pEVar3->sh_addr = eVar6;
        eVar6 = (*byte_get)(puVar4 + 0x20,8);
        pEVar3->sh_size = eVar6;
        eVar6 = (*byte_get)(puVar4 + 0x38,8);
        pEVar3->sh_entsize = eVar6;
        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);
                    /* WARNING: Store size is inaccurate */
        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;
        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);
                    /* WARNING: Store size is inaccurate */
        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;
        eVar6 = (*byte_get)(puVar4 + 0x18,8);
        pEVar3->sh_offset = eVar6;
        eVar6 = (*byte_get)(puVar4 + 0x30,8);
        pEVar3->sh_addralign = eVar6;
        if (probe == 0) {
          uVar1 = pEVar3->sh_link;
          if (local_34 < uVar1) {
            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);
            warn(pcVar2,local_38,uVar1);
          }
          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {
            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);
            warn(pcVar2,local_38,uVar1);
          }
        }
        local_38 = local_38 + 1;
        pEVar3 = pEVar3 + 1;
        puVar4 = puVar4 + 0x40;
      } while (local_38 < local_34);
      free(__ptr);
      return 1;
    }
    if (probe == 0) {
      pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5);
      error(pcVar2,local_34);
    }
  }
  return 0;
}



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

undefined4 __regparm3 FUN_0001dde0(int param_1,uint param_2)

{
  uint uVar1;
  undefined4 uVar2;
  void *__ptr;
  undefined4 *puVar3;
  void *pvVar4;
  bool bVar5;
  undefined8 uVar6;
  uint local_38;
  uint local_34;
  
  uVar1 = *(uint *)(param_1 + 0x50);
  if (param_2 == 0) {
    local_34 = *(uint *)(param_1 + 0x54);
    bVar5 = local_34 == 0;
  }
  else {
    bVar5 = false;
    local_34 = 1;
  }
  if (uVar1 == 0) {
    return 0;
  }
  if (bVar5) {
    return 0;
  }
  if (uVar1 < 0x40) {
    if (param_2 != 0) {
      return 0;
    }
    uVar2 = dcgettext(0,
                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
                      ,5);
    error(uVar2);
    return 0;
  }
  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {
    uVar2 = dcgettext(0,
                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
                      ,5);
    warn(uVar2);
  }
  else if (param_2 != 0) {
    uVar2 = 0;
    goto LAB_0001de46;
  }
  uVar2 = dcgettext(0,"section headers",5);
LAB_0001de46:
  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);
  if (__ptr != (void *)0x0) {
    free(*(void **)(param_1 + 0x5c));
    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);
    *(undefined4 **)(param_1 + 0x5c) = puVar3;
    if (puVar3 != (undefined4 *)0x0) {
      local_38 = 0;
      pvVar4 = __ptr;
      do {
        uVar2 = (*DAT_000b9dd8)(pvVar4,4);
        *puVar3 = uVar2;
        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);
        puVar3[1] = uVar2;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);
        *(undefined8 *)(puVar3 + 2) = uVar6;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);
        *(undefined8 *)(puVar3 + 4) = uVar6;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);
        *(undefined8 *)(puVar3 + 8) = uVar6;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);
        *(undefined8 *)(puVar3 + 0xe) = uVar6;
        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);
        puVar3[10] = uVar2;
        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);
        puVar3[0xb] = uVar2;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);
        *(undefined8 *)(puVar3 + 6) = uVar6;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);
        *(undefined8 *)(puVar3 + 0xc) = uVar6;
        if (param_2 == 0) {
          uVar1 = puVar3[10];
          if (local_34 < uVar1) {
            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);
            warn(uVar2,local_38,uVar1);
          }
          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {
            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);
            warn(uVar2,local_38,uVar1);
          }
        }
        local_38 = local_38 + 1;
        puVar3 = puVar3 + 0x12;
        pvVar4 = (void *)((int)pvVar4 + 0x40);
      } while (local_38 < local_34);
      free(__ptr);
      return 1;
    }
    if (param_2 == 0) {
      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);
      error(uVar2,local_34);
    }
  }
  return 0;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00013f70
ADD EBX,0x96217
SUB ESP,0x2c
MOV ESI,dword ptr [EAX + 0x50]
TEST EDX,EDX
JNZ 0x0001e020
MOV ECX,dword ptr [EAX + 0x54]
TEST ECX,ECX
MOV dword ptr [ESP + 0x8],ECX
SETZ CL
TEST ESI,ESI
JZ 0x0001e010
TEST CL,CL
JNZ 0x0001e010
MOV dword ptr [ESP + 0xc],EDX
MOV EDI,EAX
CMP ESI,0x3f
JBE 0x0001e030
TEST byte ptr [ESP + 0xc],0x1
JNZ 0x0001de38
CMP ESI,0x40
JA 0x0001e080
MOV ECX,dword ptr [ESP + 0xc]
TEST ECX,ECX
JZ 0x0001e09e
XOR EAX,EAX
SUB ESP,0xc
MOV ECX,dword ptr [EDI + 0x30]
XOR EDX,EDX
PUSH EAX
MOV EBP,dword ptr [ESP + 0x18]
XOR EAX,EAX
PUSH EDX
XOR EDX,EDX
PUSH EBP
PUSH EDX
MOV EDX,EDI
PUSH ESI
CALL 0x0001bf90
MOV dword ptr [ESP + 0x30],EAX
ADD ESP,0x20
TEST EAX,EAX
JZ 0x0001e010
SUB ESP,0xc
PUSH dword ptr [EDI + 0x5c]
CALL 0x000130a0
POP EAX
POP EDX
PUSH 0x48
PUSH EBP
CALL 0x0005dac0
ADD ESP,0x10
MOV ESI,EAX
MOV dword ptr [EDI + 0x5c],EAX
TEST EAX,EAX
JZ 0x0001dfe0
LEA EAX,[EBX + 0xfffcca88]
MOV EDI,dword ptr [ESP + 0x10]
MOV dword ptr [ESP + 0x4],0x0
MOV dword ptr [ESP + 0x1c],EAX
LEA EAX,[EBX + 0xfffcca54]
LEA EBP,[EBX + 0x5dd8]
MOV dword ptr [ESP + 0x18],EAX
JMP 0x0001def1
TEST byte ptr [ESI + 0x8],0x40
JZ 0x0001ded8
MOV EDX,dword ptr [ESI + 0x2c]
CMP EDX,dword ptr [ESP + 0x8]
JA 0x0001e0c0
LEA ESI,[ESI]
NOP
ADD dword ptr [ESP + 0x4],0x1
ADD ESI,0x48
MOV EAX,dword ptr [ESP + 0x4]
ADD EDI,0x40
CMP dword ptr [ESP + 0x8],EAX
JBE 0x0001e060
SUB ESP,0x8
PUSH 0x4
PUSH EDI
CALL dword ptr [EBP]
MOV dword ptr [ESI],EAX
POP EAX
LEA EAX,[EDI + 0x4]
POP EDX
PUSH 0x4
PUSH EAX
CALL dword ptr [EBP]
MOV dword ptr [ESI + 0x4],EAX
POP ECX
POP EAX
LEA EAX,[EDI + 0x8]
PUSH 0x8
PUSH EAX
CALL dword ptr [EBP]
MOV dword ptr [ESI + 0x8],EAX
MOV dword ptr [ESI + 0xc],EDX
POP EAX
LEA EAX,[EDI + 0x10]
POP EDX
PUSH 0x8
PUSH EAX
CALL dword ptr [EBP]
MOV dword ptr [ESI + 0x10],EAX
MOV dword ptr [ESI + 0x14],EDX
POP ECX
POP EAX
LEA EAX,[EDI + 0x20]
PUSH 0x8
PUSH EAX
CALL dword ptr [EBP]
MOV dword ptr [ESI + 0x20],EAX
MOV dword ptr [ESI + 0x24],EDX
POP EAX
LEA EAX,[EDI + 0x38]
POP EDX
PUSH 0x8
PUSH EAX
CALL dword ptr [EBP]
MOV dword ptr [ESI + 0x38],EAX
MOV dword ptr [ESI + 0x3c],EDX
POP ECX
POP EAX
LEA EAX,[EDI + 0x28]
PUSH 0x4
PUSH EAX
CALL dword ptr [EBP]
MOV dword ptr [ESI + 0x28],EAX
POP EAX
LEA EAX,[EDI + 0x2c]
POP EDX
PUSH 0x4
PUSH EAX
CALL dword ptr [EBP]
MOV dword ptr [ESI + 0x2c],EAX
POP ECX
POP EAX
LEA EAX,[EDI + 0x18]
PUSH 0x8
PUSH EAX
CALL dword ptr [EBP]
MOV dword ptr [ESI + 0x18],EAX
MOV dword ptr [ESI + 0x1c],EDX
POP EAX
LEA EAX,[EDI + 0x30]
POP EDX
PUSH 0x8
PUSH EAX
CALL dword ptr [EBP]
MOV ECX,dword ptr [ESP + 0x1c]
MOV dword ptr [ESI + 0x30],EAX
ADD ESP,0x10
MOV dword ptr [ESI + 0x34],EDX
TEST ECX,ECX
JNZ 0x0001ded8
MOV EDX,dword ptr [ESI + 0x28]
CMP EDX,dword ptr [ESP + 0x8]
JBE 0x0001dec0
MOV dword ptr [ESP + 0x14],EDX
SUB ESP,0x4
PUSH 0x5
PUSH dword ptr [ESP + 0x20]
PUSH 0x0
CALL 0x000130f0
ADD ESP,0xc
MOV EDX,dword ptr [ESP + 0x18]
PUSH EDX
PUSH dword ptr [ESP + 0xc]
PUSH EAX
CALL 0x00066db0
ADD ESP,0x10
JMP 0x0001dec0
MOV EBP,dword ptr [ESP + 0xc]
TEST EBP,EBP
JNZ 0x0001e010
SUB ESP,0x4
LEA EAX,[EBX + 0xfffcca28]
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x000130f0
POP ESI
POP EDI
PUSH dword ptr [ESP + 0x10]
PUSH EAX
CALL 0x00066870
ADD ESP,0x10
LEA ESI,[ESI]
XOR EAX,EAX
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
XOR ECX,ECX
MOV dword ptr [ESP + 0x8],0x1
JMP 0x0001de09
TEST EDX,EDX
JNZ 0x0001e010
SUB ESP,0x4
LEA EAX,[EBX + 0xfffcc974]
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x000130f0
MOV dword ptr [ESP],EAX
CALL 0x00066870
ADD ESP,0x10
XOR EAX,EAX
JMP 0x0001e012
SUB ESP,0xc
PUSH dword ptr [ESP + 0x1c]
CALL 0x000130a0
ADD ESP,0x10
MOV EAX,0x1
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
LEA EAX,[EBX + 0xfffcc9cc]
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x000130f0
MOV dword ptr [ESP],EAX
CALL 0x00066db0
ADD ESP,0x10
SUB ESP,0x4
LEA EAX,[EBX + 0xfffc290a]
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x000130f0
ADD ESP,0x10
JMP 0x0001de46
MOV dword ptr [ESP + 0x14],EDX
SUB ESP,0x4
PUSH 0x5
PUSH dword ptr [ESP + 0x24]
PUSH 0x0
CALL 0x000130f0
ADD ESP,0xc
MOV EDX,dword ptr [ESP + 0x18]
PUSH EDX
PUSH dword ptr [ESP + 0xc]
PUSH EAX
CALL 0x00066db0
ADD ESP,0x10
JMP 0x0001ded8
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined4 __regparm3 FUN_0001dde0(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  void *__ptr;\n  undefined4 *puVar3;\n  void *pvVar4;\n  bool bVar5;\n  undefined8 uVar6;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = *(uint *)(param_1 + 0x50);\n  if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }\n  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }\n  uVar2 = dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);\n  if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }\n  return 0;\n}\n\n" comment (function_definition "undefined4 __regparm3 FUN_0001dde0(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  void *__ptr;\n  undefined4 *puVar3;\n  void *pvVar4;\n  bool bVar5;\n  undefined8 uVar6;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = *(uint *)(param_1 + 0x50);\n  if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }\n  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }\n  uVar2 = dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);\n  if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }\n  return 0;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0001dde0(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  undefined4 uVar2;\n  void *__ptr;\n  undefined4 *puVar3;\n  void *pvVar4;\n  bool bVar5;\n  undefined8 uVar6;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = *(uint *)(param_1 + 0x50);\n  if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }\n  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }\n  uVar2 = dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);\n  if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }\n  return 0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "uint local_38;" type_identifier identifier ;) (declaration "uint local_34;" type_identifier identifier ;) (expression_statement "uVar1 = *(uint *)(param_1 + 0x50);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x50)" identifier = (pointer_expression "*(uint *)(param_1 + 0x50)" * (cast_expression "(uint *)(param_1 + 0x50)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) ))))) ;) (if_statement "if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }" { (expression_statement "local_34 = *(uint *)(param_1 + 0x54);" (assignment_expression "local_34 = *(uint *)(param_1 + 0x54)" identifier = (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "bVar5 = local_34 == 0;" (assignment_expression "bVar5 = local_34 == 0" identifier = (binary_expression "local_34 == 0" identifier == number_literal)) ;) }) (else_clause "else {\n    bVar5 = false;\n    local_34 = 1;\n  }" else (compound_statement "{\n    bVar5 = false;\n    local_34 = 1;\n  }" { (expression_statement "bVar5 = false;" (assignment_expression "bVar5 = false" identifier = false) ;) (expression_statement "local_34 = 1;" (assignment_expression "local_34 = 1" identifier = number_literal) ;) }))) (if_statement "if (uVar1 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (bVar5) {\n    return 0;\n  }" if (parenthesized_expression "(bVar5)" ( identifier )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }" if (parenthesized_expression "(uVar1 < 0x40)" ( (binary_expression "uVar1 < 0x40" identifier < number_literal) )) (compound_statement "{\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }" { (if_statement "if (param_2 != 0) {\n      return 0;\n    }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);" (assignment_expression "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5)" identifier = (call_expression "dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5)" identifier (argument_list "(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5)" ( number_literal , (string_literal ""The e_shentsize field in the ELF header is less than the size of an ELF section header\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar2);" (call_expression "error(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" if (parenthesized_expression "(((param_2 & 1) == 0) && (0x40 < uVar1))" ( (binary_expression "((param_2 & 1) == 0) && (0x40 < uVar1)" (parenthesized_expression "((param_2 & 1) == 0)" ( (binary_expression "(param_2 & 1) == 0" (parenthesized_expression "(param_2 & 1)" ( (binary_expression "param_2 & 1" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(0x40 < uVar1)" ( (binary_expression "0x40 < uVar1" number_literal < identifier) ))) )) (compound_statement "{\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }" { (expression_statement "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);" (assignment_expression "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5)" identifier = (call_expression "dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5)" identifier (argument_list "(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5)" ( number_literal , (string_literal ""The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "warn(uVar2);" (call_expression "warn(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) }) (else_clause "else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" else (if_statement "if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0001de46;" goto statement_identifier ;) })))) (expression_statement "uVar2 = dcgettext(0,"section headers",5);" (assignment_expression "uVar2 = dcgettext(0,"section headers",5)" identifier = (call_expression "dcgettext(0,"section headers",5)" identifier (argument_list "(0,"section headers",5)" ( number_literal , (string_literal ""section headers"" " string_content ") , number_literal )))) ;) (labeled_statement "LAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);" statement_identifier : (expression_statement "__ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);" (assignment_expression "__ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2)" identifier = (cast_expression "(void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001bf90(uVar1,0,local_34,0,uVar2)" identifier (argument_list "(uVar1,0,local_34,0,uVar2)" ( identifier , number_literal , identifier , number_literal , identifier ))))) ;)) (if_statement "if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }" if (parenthesized_expression "(__ptr != (void *)0x0)" ( (binary_expression "__ptr != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }" { (expression_statement "free(*(void **)(param_1 + 0x5c));" (call_expression "free(*(void **)(param_1 + 0x5c))" identifier (argument_list "(*(void **)(param_1 + 0x5c))" ( (pointer_expression "*(void **)(param_1 + 0x5c)" * (cast_expression "(void **)(param_1 + 0x5c)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x5c)" ( (binary_expression "param_1 + 0x5c" identifier + number_literal) )))) ))) ;) (expression_statement "puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);" (assignment_expression "puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48)" identifier = (cast_expression "(undefined4 *)FUN_0005dac0(local_34,0x48)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005dac0(local_34,0x48)" identifier (argument_list "(local_34,0x48)" ( identifier , number_literal ))))) ;) (expression_statement "*(undefined4 **)(param_1 + 0x5c) = puVar3;" (assignment_expression "*(undefined4 **)(param_1 + 0x5c) = puVar3" (pointer_expression "*(undefined4 **)(param_1 + 0x5c)" * (cast_expression "(undefined4 **)(param_1 + 0x5c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x5c)" ( (binary_expression "param_1 + 0x5c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }" { (expression_statement "local_38 = 0;" (assignment_expression "local_38 = 0" identifier = number_literal) ;) (expression_statement "pvVar4 = __ptr;" (assignment_expression "pvVar4 = __ptr" identifier = identifier) ;) (do_statement "do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);" do (compound_statement "{\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      }" { (expression_statement "uVar2 = (*DAT_000b9dd8)(pvVar4,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)(pvVar4,4)" identifier = (call_expression "(*DAT_000b9dd8)(pvVar4,4)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "(pvVar4,4)" ( identifier , number_literal )))) ;) (expression_statement "*puVar3 = uVar2;" (assignment_expression "*puVar3 = uVar2" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 4,4)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 4,4)" ( (binary_expression "(int)pvVar4 + 4" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "puVar3[1] = uVar2;" (assignment_expression "puVar3[1] = uVar2" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 8,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 8,8)" ( (binary_expression "(int)pvVar4 + 8" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 2) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 2) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 2)" * (cast_expression "(undefined8 *)(puVar3 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x10,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x10,8)" ( (binary_expression "(int)pvVar4 + 0x10" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 4) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 4) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 4)" * (cast_expression "(undefined8 *)(puVar3 + 4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 4)" ( (binary_expression "puVar3 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x20,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x20,8)" ( (binary_expression "(int)pvVar4 + 0x20" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 8) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 8) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 8)" * (cast_expression "(undefined8 *)(puVar3 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 8)" ( (binary_expression "puVar3 + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x38,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x38,8)" ( (binary_expression "(int)pvVar4 + 0x38" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 0xe) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 0xe) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 0xe)" * (cast_expression "(undefined8 *)(puVar3 + 0xe)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 0xe)" ( (binary_expression "puVar3 + 0xe" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x28,4)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x28,4)" ( (binary_expression "(int)pvVar4 + 0x28" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "puVar3[10] = uVar2;" (assignment_expression "puVar3[10] = uVar2" (subscript_expression "puVar3[10]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x2c,4)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x2c,4)" ( (binary_expression "(int)pvVar4 + 0x2c" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "puVar3[0xb] = uVar2;" (assignment_expression "puVar3[0xb] = uVar2" (subscript_expression "puVar3[0xb]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x18,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x18,8)" ( (binary_expression "(int)pvVar4 + 0x18" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 6) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 6) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 6)" * (cast_expression "(undefined8 *)(puVar3 + 6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 6)" ( (binary_expression "puVar3 + 6" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x30,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x30,8)" ( (binary_expression "(int)pvVar4 + 0x30" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 0xc) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 0xc) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 0xc)" * (cast_expression "(undefined8 *)(puVar3 + 0xc)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 0xc)" ( (binary_expression "puVar3 + 0xc" identifier + number_literal) )))) = identifier) ;) (if_statement "if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }" { (expression_statement "uVar1 = puVar3[10];" (assignment_expression "uVar1 = puVar3[10]" identifier = (subscript_expression "puVar3[10]" identifier [ number_literal ])) ;) (if_statement "if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" if (parenthesized_expression "(local_34 < uVar1)" ( (binary_expression "local_34 < uVar1" identifier < identifier) )) (compound_statement "{\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" { (expression_statement "uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);" (assignment_expression "uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5)" identifier = (call_expression "dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5)" identifier (argument_list "(0,"Section %u has an out of range sh_link value of %u\n",5)" ( number_literal , (string_literal ""Section %u has an out of range sh_link value of %u\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "warn(uVar2,local_38,uVar1);" (call_expression "warn(uVar2,local_38,uVar1)" identifier (argument_list "(uVar2,local_38,uVar1)" ( identifier , identifier , identifier ))) ;) })) (if_statement "if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" if (parenthesized_expression "(((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1))" ( (binary_expression "((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)" (parenthesized_expression "((*(byte *)(puVar3 + 2) & 0x40) != 0)" ( (binary_expression "(*(byte *)(puVar3 + 2) & 0x40) != 0" (parenthesized_expression "(*(byte *)(puVar3 + 2) & 0x40)" ( (binary_expression "*(byte *)(puVar3 + 2) & 0x40" (pointer_expression "*(byte *)(puVar3 + 2)" * (cast_expression "(byte *)(puVar3 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(uVar1 = puVar3[0xb], local_34 < uVar1)" ( (comma_expression "uVar1 = puVar3[0xb], local_34 < uVar1" (assignment_expression "uVar1 = puVar3[0xb]" identifier = (subscript_expression "puVar3[0xb]" identifier [ number_literal ])) , (binary_expression "local_34 < uVar1" identifier < identifier)) ))) )) (compound_statement "{\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" { (expression_statement "uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);" (assignment_expression "uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5)" identifier = (call_expression "dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5)" identifier (argument_list "(0,"Section %u has an out of range sh_info value of %u\n",5)" ( number_literal , (string_literal ""Section %u has an out of range sh_info value of %u\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "warn(uVar2,local_38,uVar1);" (call_expression "warn(uVar2,local_38,uVar1)" identifier (argument_list "(uVar2,local_38,uVar1)" ( identifier , identifier , identifier ))) ;) })) })) (expression_statement "local_38 = local_38 + 1;" (assignment_expression "local_38 = local_38 + 1" identifier = (binary_expression "local_38 + 1" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar3 + 0x12;" (assignment_expression "puVar3 = puVar3 + 0x12" identifier = (binary_expression "puVar3 + 0x12" identifier + number_literal)) ;) (expression_statement "pvVar4 = (void *)((int)pvVar4 + 0x40);" (assignment_expression "pvVar4 = (void *)((int)pvVar4 + 0x40)" identifier = (cast_expression "(void *)((int)pvVar4 + 0x40)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar4 + 0x40)" ( (binary_expression "(int)pvVar4 + 0x40" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(local_38 < local_34)" ( (binary_expression "local_38 < local_34" identifier < identifier) )) ;) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }" { (expression_statement "uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);" (assignment_expression "uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5)" identifier = (call_expression "dcgettext(0,"Out of memory reading %u section headers\n",5)" identifier (argument_list "(0,"Out of memory reading %u section headers\n",5)" ( number_literal , (string_literal ""Out of memory reading %u section headers\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar2,local_34);" (call_expression "error(uVar2,local_34)" identifier (argument_list "(uVar2,local_34)" ( identifier , identifier ))) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nbfd_boolean __regparm3 get_64bit_section_headers(Filedata *filedata,bfd_boolean probe)\n\n{\n  uint uVar1;\n  char *pcVar2;\n  uchar *__ptr;\n  Elf_Internal_Shdr *pEVar3;\n  elf_vma eVar6;\n  uchar *puVar4;\n  bool bVar5;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = (filedata->file_header).e_shentsize;\n  if (probe == 0) {\n    local_34 = (filedata->file_header).e_shnum;\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (probe != 0) {\n      return 0;\n    }\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5);\n    error(pcVar2);\n    return 0;\n  }\n  if (((probe & 1U) == 0) && (0x40 < uVar1)) {\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5);\n    warn(pcVar2);\n  }\n  else if (probe != 0) {\n    pcVar2 = (char *)0x0;\n    goto LAB_0001de46;\n  }\n  pcVar2 = (char *)dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (uchar *)get_data((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,\n                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2);\n  if (__ptr != (uchar *)0x0) {\n    free(filedata->section_headers);\n    pEVar3 = (Elf_Internal_Shdr *)cmalloc(local_34,0x48);\n    filedata->section_headers = pEVar3;\n    if (pEVar3 != (Elf_Internal_Shdr *)0x0) {\n      local_38 = 0;\n      puVar4 = __ptr;\n      do {\n        eVar6._0_4_ = (*byte_get)(puVar4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 8,8);\n        pEVar3->sh_flags = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x10,8);\n        pEVar3->sh_addr = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x20,8);\n        pEVar3->sh_size = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x38,8);\n        pEVar3->sh_entsize = eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x18,8);\n        pEVar3->sh_offset = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x30,8);\n        pEVar3->sh_addralign = eVar6;\n        if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        pEVar3 = pEVar3 + 1;\n        puVar4 = puVar4 + 0x40;\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (probe == 0) {\n      pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(pcVar2,local_34);\n    }\n  }\n  return 0;\n}\n\n" comment (function_definition "bfd_boolean __regparm3 get_64bit_section_headers(Filedata *filedata,bfd_boolean probe)\n\n{\n  uint uVar1;\n  char *pcVar2;\n  uchar *__ptr;\n  Elf_Internal_Shdr *pEVar3;\n  elf_vma eVar6;\n  uchar *puVar4;\n  bool bVar5;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = (filedata->file_header).e_shentsize;\n  if (probe == 0) {\n    local_34 = (filedata->file_header).e_shnum;\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (probe != 0) {\n      return 0;\n    }\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5);\n    error(pcVar2);\n    return 0;\n  }\n  if (((probe & 1U) == 0) && (0x40 < uVar1)) {\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5);\n    warn(pcVar2);\n  }\n  else if (probe != 0) {\n    pcVar2 = (char *)0x0;\n    goto LAB_0001de46;\n  }\n  pcVar2 = (char *)dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (uchar *)get_data((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,\n                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2);\n  if (__ptr != (uchar *)0x0) {\n    free(filedata->section_headers);\n    pEVar3 = (Elf_Internal_Shdr *)cmalloc(local_34,0x48);\n    filedata->section_headers = pEVar3;\n    if (pEVar3 != (Elf_Internal_Shdr *)0x0) {\n      local_38 = 0;\n      puVar4 = __ptr;\n      do {\n        eVar6._0_4_ = (*byte_get)(puVar4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 8,8);\n        pEVar3->sh_flags = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x10,8);\n        pEVar3->sh_addr = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x20,8);\n        pEVar3->sh_size = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x38,8);\n        pEVar3->sh_entsize = eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x18,8);\n        pEVar3->sh_offset = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x30,8);\n        pEVar3->sh_addralign = eVar6;\n        if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        pEVar3 = pEVar3 + 1;\n        puVar4 = puVar4 + 0x40;\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (probe == 0) {\n      pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(pcVar2,local_34);\n    }\n  }\n  return 0;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "get_64bit_section_headers(Filedata *filedata,bfd_boolean probe)" identifier (parameter_list "(Filedata *filedata,bfd_boolean probe)" ( (parameter_declaration "Filedata *filedata" type_identifier (pointer_declarator "*filedata" * identifier)) , (parameter_declaration "bfd_boolean probe" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  char *pcVar2;\n  uchar *__ptr;\n  Elf_Internal_Shdr *pEVar3;\n  elf_vma eVar6;\n  uchar *puVar4;\n  bool bVar5;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = (filedata->file_header).e_shentsize;\n  if (probe == 0) {\n    local_34 = (filedata->file_header).e_shnum;\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (probe != 0) {\n      return 0;\n    }\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5);\n    error(pcVar2);\n    return 0;\n  }\n  if (((probe & 1U) == 0) && (0x40 < uVar1)) {\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5);\n    warn(pcVar2);\n  }\n  else if (probe != 0) {\n    pcVar2 = (char *)0x0;\n    goto LAB_0001de46;\n  }\n  pcVar2 = (char *)dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (uchar *)get_data((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,\n                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2);\n  if (__ptr != (uchar *)0x0) {\n    free(filedata->section_headers);\n    pEVar3 = (Elf_Internal_Shdr *)cmalloc(local_34,0x48);\n    filedata->section_headers = pEVar3;\n    if (pEVar3 != (Elf_Internal_Shdr *)0x0) {\n      local_38 = 0;\n      puVar4 = __ptr;\n      do {\n        eVar6._0_4_ = (*byte_get)(puVar4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 8,8);\n        pEVar3->sh_flags = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x10,8);\n        pEVar3->sh_addr = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x20,8);\n        pEVar3->sh_size = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x38,8);\n        pEVar3->sh_entsize = eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x18,8);\n        pEVar3->sh_offset = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x30,8);\n        pEVar3->sh_addralign = eVar6;\n        if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        pEVar3 = pEVar3 + 1;\n        puVar4 = puVar4 + 0x40;\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (probe == 0) {\n      pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(pcVar2,local_34);\n    }\n  }\n  return 0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "uchar *__ptr;" type_identifier (pointer_declarator "*__ptr" * identifier) ;) (declaration "Elf_Internal_Shdr *pEVar3;" type_identifier (pointer_declarator "*pEVar3" * identifier) ;) (declaration "elf_vma eVar6;" type_identifier identifier ;) (declaration "uchar *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "uint local_38;" type_identifier identifier ;) (declaration "uint local_34;" type_identifier identifier ;) (expression_statement "uVar1 = (filedata->file_header).e_shentsize;" (assignment_expression "uVar1 = (filedata->file_header).e_shentsize" identifier = (field_expression "(filedata->file_header).e_shentsize" (parenthesized_expression "(filedata->file_header)" ( (field_expression "filedata->file_header" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (probe == 0) {\n    local_34 = (filedata->file_header).e_shnum;\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }" if (parenthesized_expression "(probe == 0)" ( (binary_expression "probe == 0" identifier == number_literal) )) (compound_statement "{\n    local_34 = (filedata->file_header).e_shnum;\n    bVar5 = local_34 == 0;\n  }" { (expression_statement "local_34 = (filedata->file_header).e_shnum;" (assignment_expression "local_34 = (filedata->file_header).e_shnum" identifier = (field_expression "(filedata->file_header).e_shnum" (parenthesized_expression "(filedata->file_header)" ( (field_expression "filedata->file_header" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "bVar5 = local_34 == 0;" (assignment_expression "bVar5 = local_34 == 0" identifier = (binary_expression "local_34 == 0" identifier == number_literal)) ;) }) (else_clause "else {\n    bVar5 = false;\n    local_34 = 1;\n  }" else (compound_statement "{\n    bVar5 = false;\n    local_34 = 1;\n  }" { (expression_statement "bVar5 = false;" (assignment_expression "bVar5 = false" identifier = false) ;) (expression_statement "local_34 = 1;" (assignment_expression "local_34 = 1" identifier = number_literal) ;) }))) (if_statement "if (uVar1 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (bVar5) {\n    return 0;\n  }" if (parenthesized_expression "(bVar5)" ( identifier )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (uVar1 < 0x40) {\n    if (probe != 0) {\n      return 0;\n    }\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5);\n    error(pcVar2);\n    return 0;\n  }" if (parenthesized_expression "(uVar1 < 0x40)" ( (binary_expression "uVar1 < 0x40" identifier < number_literal) )) (compound_statement "{\n    if (probe != 0) {\n      return 0;\n    }\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5);\n    error(pcVar2);\n    return 0;\n  }" { (if_statement "if (probe != 0) {\n      return 0;\n    }" if (parenthesized_expression "(probe != 0)" ( (binary_expression "probe != 0" identifier != number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5);" (assignment_expression "pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5)" identifier = (cast_expression "(char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5)" identifier (argument_list "(0,\n                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                               ,5)" ( number_literal , (string_literal ""The e_shentsize field in the ELF header is less than the size of an ELF section header\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "error(pcVar2);" (call_expression "error(pcVar2)" identifier (argument_list "(pcVar2)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (((probe & 1U) == 0) && (0x40 < uVar1)) {\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5);\n    warn(pcVar2);\n  }\n  else if (probe != 0) {\n    pcVar2 = (char *)0x0;\n    goto LAB_0001de46;\n  }" if (parenthesized_expression "(((probe & 1U) == 0) && (0x40 < uVar1))" ( (binary_expression "((probe & 1U) == 0) && (0x40 < uVar1)" (parenthesized_expression "((probe & 1U) == 0)" ( (binary_expression "(probe & 1U) == 0" (parenthesized_expression "(probe & 1U)" ( (binary_expression "probe & 1U" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(0x40 < uVar1)" ( (binary_expression "0x40 < uVar1" number_literal < identifier) ))) )) (compound_statement "{\n    pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5);\n    warn(pcVar2);\n  }" { (expression_statement "pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5);" (assignment_expression "pcVar2 = (char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5)" identifier = (cast_expression "(char *)dcgettext(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5)" identifier (argument_list "(0,\n                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                               ,5)" ( number_literal , (string_literal ""The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "warn(pcVar2);" (call_expression "warn(pcVar2)" identifier (argument_list "(pcVar2)" ( identifier ))) ;) }) (else_clause "else if (probe != 0) {\n    pcVar2 = (char *)0x0;\n    goto LAB_0001de46;\n  }" else (if_statement "if (probe != 0) {\n    pcVar2 = (char *)0x0;\n    goto LAB_0001de46;\n  }" if (parenthesized_expression "(probe != 0)" ( (binary_expression "probe != 0" identifier != number_literal) )) (compound_statement "{\n    pcVar2 = (char *)0x0;\n    goto LAB_0001de46;\n  }" { (expression_statement "pcVar2 = (char *)0x0;" (assignment_expression "pcVar2 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_0001de46;" goto statement_identifier ;) })))) (expression_statement "pcVar2 = (char *)dcgettext(0,"section headers",5);" (assignment_expression "pcVar2 = (char *)dcgettext(0,"section headers",5)" identifier = (cast_expression "(char *)dcgettext(0,"section headers",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"section headers",5)" identifier (argument_list "(0,"section headers",5)" ( number_literal , (string_literal ""section headers"" " string_content ") , number_literal ))))) ;) (labeled_statement "LAB_0001de46:\n  __ptr = (uchar *)get_data((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,\n                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2);" statement_identifier : (expression_statement "__ptr = (uchar *)get_data((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,\n                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2);" (assignment_expression "__ptr = (uchar *)get_data((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,\n                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2)" identifier = (cast_expression "(uchar *)get_data((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,\n                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "get_data((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,\n                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2)" identifier (argument_list "((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,\n                            (ulonglong)uVar1,(ulonglong)local_34,pcVar2)" ( (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier , (field_expression "(ulong)(filedata->file_header).e_shoff" (call_expression "(ulong)(filedata->file_header)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(filedata->file_header)" ( (field_expression "filedata->file_header" identifier -> field_identifier) ))) . field_identifier) , (cast_expression "(ulonglong)uVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) , (cast_expression "(ulonglong)local_34" ( (type_descriptor "ulonglong" type_identifier) ) identifier) , identifier ))))) ;)) (if_statement "if (__ptr != (uchar *)0x0) {\n    free(filedata->section_headers);\n    pEVar3 = (Elf_Internal_Shdr *)cmalloc(local_34,0x48);\n    filedata->section_headers = pEVar3;\n    if (pEVar3 != (Elf_Internal_Shdr *)0x0) {\n      local_38 = 0;\n      puVar4 = __ptr;\n      do {\n        eVar6._0_4_ = (*byte_get)(puVar4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 8,8);\n        pEVar3->sh_flags = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x10,8);\n        pEVar3->sh_addr = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x20,8);\n        pEVar3->sh_size = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x38,8);\n        pEVar3->sh_entsize = eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x18,8);\n        pEVar3->sh_offset = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x30,8);\n        pEVar3->sh_addralign = eVar6;\n        if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        pEVar3 = pEVar3 + 1;\n        puVar4 = puVar4 + 0x40;\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (probe == 0) {\n      pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(pcVar2,local_34);\n    }\n  }" if (parenthesized_expression "(__ptr != (uchar *)0x0)" ( (binary_expression "__ptr != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    free(filedata->section_headers);\n    pEVar3 = (Elf_Internal_Shdr *)cmalloc(local_34,0x48);\n    filedata->section_headers = pEVar3;\n    if (pEVar3 != (Elf_Internal_Shdr *)0x0) {\n      local_38 = 0;\n      puVar4 = __ptr;\n      do {\n        eVar6._0_4_ = (*byte_get)(puVar4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 8,8);\n        pEVar3->sh_flags = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x10,8);\n        pEVar3->sh_addr = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x20,8);\n        pEVar3->sh_size = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x38,8);\n        pEVar3->sh_entsize = eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x18,8);\n        pEVar3->sh_offset = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x30,8);\n        pEVar3->sh_addralign = eVar6;\n        if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        pEVar3 = pEVar3 + 1;\n        puVar4 = puVar4 + 0x40;\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (probe == 0) {\n      pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(pcVar2,local_34);\n    }\n  }" { (expression_statement "free(filedata->section_headers);" (call_expression "free(filedata->section_headers)" identifier (argument_list "(filedata->section_headers)" ( (field_expression "filedata->section_headers" identifier -> field_identifier) ))) ;) (expression_statement "pEVar3 = (Elf_Internal_Shdr *)cmalloc(local_34,0x48);" (assignment_expression "pEVar3 = (Elf_Internal_Shdr *)cmalloc(local_34,0x48)" identifier = (cast_expression "(Elf_Internal_Shdr *)cmalloc(local_34,0x48)" ( (type_descriptor "Elf_Internal_Shdr *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "cmalloc(local_34,0x48)" identifier (argument_list "(local_34,0x48)" ( identifier , number_literal ))))) ;) (expression_statement "filedata->section_headers = pEVar3;" (assignment_expression "filedata->section_headers = pEVar3" (field_expression "filedata->section_headers" identifier -> field_identifier) = identifier) ;) (if_statement "if (pEVar3 != (Elf_Internal_Shdr *)0x0) {\n      local_38 = 0;\n      puVar4 = __ptr;\n      do {\n        eVar6._0_4_ = (*byte_get)(puVar4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 8,8);\n        pEVar3->sh_flags = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x10,8);\n        pEVar3->sh_addr = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x20,8);\n        pEVar3->sh_size = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x38,8);\n        pEVar3->sh_entsize = eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x18,8);\n        pEVar3->sh_offset = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x30,8);\n        pEVar3->sh_addralign = eVar6;\n        if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        pEVar3 = pEVar3 + 1;\n        puVar4 = puVar4 + 0x40;\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }" if (parenthesized_expression "(pEVar3 != (Elf_Internal_Shdr *)0x0)" ( (binary_expression "pEVar3 != (Elf_Internal_Shdr *)0x0" identifier != (cast_expression "(Elf_Internal_Shdr *)0x0" ( (type_descriptor "Elf_Internal_Shdr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      local_38 = 0;\n      puVar4 = __ptr;\n      do {\n        eVar6._0_4_ = (*byte_get)(puVar4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 8,8);\n        pEVar3->sh_flags = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x10,8);\n        pEVar3->sh_addr = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x20,8);\n        pEVar3->sh_size = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x38,8);\n        pEVar3->sh_entsize = eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x18,8);\n        pEVar3->sh_offset = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x30,8);\n        pEVar3->sh_addralign = eVar6;\n        if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        pEVar3 = pEVar3 + 1;\n        puVar4 = puVar4 + 0x40;\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }" { (expression_statement "local_38 = 0;" (assignment_expression "local_38 = 0" identifier = number_literal) ;) (expression_statement "puVar4 = __ptr;" (assignment_expression "puVar4 = __ptr" identifier = identifier) ;) (do_statement "do {\n        eVar6._0_4_ = (*byte_get)(puVar4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 8,8);\n        pEVar3->sh_flags = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x10,8);\n        pEVar3->sh_addr = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x20,8);\n        pEVar3->sh_size = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x38,8);\n        pEVar3->sh_entsize = eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x18,8);\n        pEVar3->sh_offset = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x30,8);\n        pEVar3->sh_addralign = eVar6;\n        if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        pEVar3 = pEVar3 + 1;\n        puVar4 = puVar4 + 0x40;\n      } while (local_38 < local_34);" do (compound_statement "{\n        eVar6._0_4_ = (*byte_get)(puVar4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 8,8);\n        pEVar3->sh_flags = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x10,8);\n        pEVar3->sh_addr = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x20,8);\n        pEVar3->sh_size = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x38,8);\n        pEVar3->sh_entsize = eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;\n        eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);\n                    /* WARNING: Store size is inaccurate */\n        *(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x18,8);\n        pEVar3->sh_offset = eVar6;\n        eVar6 = (*byte_get)(puVar4 + 0x30,8);\n        pEVar3->sh_addralign = eVar6;\n        if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        pEVar3 = pEVar3 + 1;\n        puVar4 = puVar4 + 0x40;\n      }" { (expression_statement "eVar6._0_4_ = (*byte_get)(puVar4,4);" (assignment_expression "eVar6._0_4_ = (*byte_get)(puVar4,4)" (field_expression "eVar6._0_4_" identifier . field_identifier) = (call_expression "(*byte_get)(puVar4,4)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4,4)" ( identifier , number_literal )))) ;) comment (expression_statement "*(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6;" (assignment_expression "*(elf_vma *)&pEVar3->sh_name = (elf_vma)eVar6" (pointer_expression "*(elf_vma *)&pEVar3->sh_name" * (cast_expression "(elf_vma *)&pEVar3->sh_name" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pEVar3->sh_name" & (field_expression "pEVar3->sh_name" identifier -> field_identifier)))) = (cast_expression "(elf_vma)eVar6" ( (type_descriptor "elf_vma" type_identifier) ) identifier)) ;) (expression_statement "eVar6._0_4_ = (*byte_get)(puVar4 + 4,4);" (assignment_expression "eVar6._0_4_ = (*byte_get)(puVar4 + 4,4)" (field_expression "eVar6._0_4_" identifier . field_identifier) = (call_expression "(*byte_get)(puVar4 + 4,4)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4 + 4,4)" ( (binary_expression "puVar4 + 4" identifier + number_literal) , number_literal )))) ;) comment (expression_statement "*(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6;" (assignment_expression "*(elf_vma *)&pEVar3->sh_type = (elf_vma)eVar6" (pointer_expression "*(elf_vma *)&pEVar3->sh_type" * (cast_expression "(elf_vma *)&pEVar3->sh_type" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pEVar3->sh_type" & (field_expression "pEVar3->sh_type" identifier -> field_identifier)))) = (cast_expression "(elf_vma)eVar6" ( (type_descriptor "elf_vma" type_identifier) ) identifier)) ;) (expression_statement "eVar6 = (*byte_get)(puVar4 + 8,8);" (assignment_expression "eVar6 = (*byte_get)(puVar4 + 8,8)" identifier = (call_expression "(*byte_get)(puVar4 + 8,8)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4 + 8,8)" ( (binary_expression "puVar4 + 8" identifier + number_literal) , number_literal )))) ;) (expression_statement "pEVar3->sh_flags = eVar6;" (assignment_expression "pEVar3->sh_flags = eVar6" (field_expression "pEVar3->sh_flags" identifier -> field_identifier) = identifier) ;) (expression_statement "eVar6 = (*byte_get)(puVar4 + 0x10,8);" (assignment_expression "eVar6 = (*byte_get)(puVar4 + 0x10,8)" identifier = (call_expression "(*byte_get)(puVar4 + 0x10,8)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4 + 0x10,8)" ( (binary_expression "puVar4 + 0x10" identifier + number_literal) , number_literal )))) ;) (expression_statement "pEVar3->sh_addr = eVar6;" (assignment_expression "pEVar3->sh_addr = eVar6" (field_expression "pEVar3->sh_addr" identifier -> field_identifier) = identifier) ;) (expression_statement "eVar6 = (*byte_get)(puVar4 + 0x20,8);" (assignment_expression "eVar6 = (*byte_get)(puVar4 + 0x20,8)" identifier = (call_expression "(*byte_get)(puVar4 + 0x20,8)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4 + 0x20,8)" ( (binary_expression "puVar4 + 0x20" identifier + number_literal) , number_literal )))) ;) (expression_statement "pEVar3->sh_size = eVar6;" (assignment_expression "pEVar3->sh_size = eVar6" (field_expression "pEVar3->sh_size" identifier -> field_identifier) = identifier) ;) (expression_statement "eVar6 = (*byte_get)(puVar4 + 0x38,8);" (assignment_expression "eVar6 = (*byte_get)(puVar4 + 0x38,8)" identifier = (call_expression "(*byte_get)(puVar4 + 0x38,8)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4 + 0x38,8)" ( (binary_expression "puVar4 + 0x38" identifier + number_literal) , number_literal )))) ;) (expression_statement "pEVar3->sh_entsize = eVar6;" (assignment_expression "pEVar3->sh_entsize = eVar6" (field_expression "pEVar3->sh_entsize" identifier -> field_identifier) = identifier) ;) (expression_statement "eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4);" (assignment_expression "eVar6._0_4_ = (*byte_get)(puVar4 + 0x28,4)" (field_expression "eVar6._0_4_" identifier . field_identifier) = (call_expression "(*byte_get)(puVar4 + 0x28,4)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4 + 0x28,4)" ( (binary_expression "puVar4 + 0x28" identifier + number_literal) , number_literal )))) ;) comment (expression_statement "*(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6;" (assignment_expression "*(elf_vma *)&pEVar3->sh_link = (elf_vma)eVar6" (pointer_expression "*(elf_vma *)&pEVar3->sh_link" * (cast_expression "(elf_vma *)&pEVar3->sh_link" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pEVar3->sh_link" & (field_expression "pEVar3->sh_link" identifier -> field_identifier)))) = (cast_expression "(elf_vma)eVar6" ( (type_descriptor "elf_vma" type_identifier) ) identifier)) ;) (expression_statement "eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4);" (assignment_expression "eVar6._0_4_ = (*byte_get)(puVar4 + 0x2c,4)" (field_expression "eVar6._0_4_" identifier . field_identifier) = (call_expression "(*byte_get)(puVar4 + 0x2c,4)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4 + 0x2c,4)" ( (binary_expression "puVar4 + 0x2c" identifier + number_literal) , number_literal )))) ;) comment (expression_statement "*(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6;" (assignment_expression "*(elf_vma *)&pEVar3->sh_info = (elf_vma)eVar6" (pointer_expression "*(elf_vma *)&pEVar3->sh_info" * (cast_expression "(elf_vma *)&pEVar3->sh_info" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pEVar3->sh_info" & (field_expression "pEVar3->sh_info" identifier -> field_identifier)))) = (cast_expression "(elf_vma)eVar6" ( (type_descriptor "elf_vma" type_identifier) ) identifier)) ;) (expression_statement "eVar6 = (*byte_get)(puVar4 + 0x18,8);" (assignment_expression "eVar6 = (*byte_get)(puVar4 + 0x18,8)" identifier = (call_expression "(*byte_get)(puVar4 + 0x18,8)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4 + 0x18,8)" ( (binary_expression "puVar4 + 0x18" identifier + number_literal) , number_literal )))) ;) (expression_statement "pEVar3->sh_offset = eVar6;" (assignment_expression "pEVar3->sh_offset = eVar6" (field_expression "pEVar3->sh_offset" identifier -> field_identifier) = identifier) ;) (expression_statement "eVar6 = (*byte_get)(puVar4 + 0x30,8);" (assignment_expression "eVar6 = (*byte_get)(puVar4 + 0x30,8)" identifier = (call_expression "(*byte_get)(puVar4 + 0x30,8)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(puVar4 + 0x30,8)" ( (binary_expression "puVar4 + 0x30" identifier + number_literal) , number_literal )))) ;) (expression_statement "pEVar3->sh_addralign = eVar6;" (assignment_expression "pEVar3->sh_addralign = eVar6" (field_expression "pEVar3->sh_addralign" identifier -> field_identifier) = identifier) ;) (if_statement "if (probe == 0) {\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }" if (parenthesized_expression "(probe == 0)" ( (binary_expression "probe == 0" identifier == number_literal) )) (compound_statement "{\n          uVar1 = pEVar3->sh_link;\n          if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n          if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }\n        }" { (expression_statement "uVar1 = pEVar3->sh_link;" (assignment_expression "uVar1 = pEVar3->sh_link" identifier = (field_expression "pEVar3->sh_link" identifier -> field_identifier)) ;) (if_statement "if (local_34 < uVar1) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }" if (parenthesized_expression "(local_34 < uVar1)" ( (binary_expression "local_34 < uVar1" identifier < identifier) )) (compound_statement "{\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }" { (expression_statement "pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);" (assignment_expression "pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5)" identifier (argument_list "(0,"Section %u has an out of range sh_link value of %u\n",5)" ( number_literal , (string_literal ""Section %u has an out of range sh_link value of %u\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "warn(pcVar2,local_38,uVar1);" (call_expression "warn(pcVar2,local_38,uVar1)" identifier (argument_list "(pcVar2,local_38,uVar1)" ( identifier , identifier , identifier ))) ;) })) (if_statement "if (((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)) {\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }" if (parenthesized_expression "(((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1))" ( (binary_expression "((pEVar3->sh_flags & 0x40) != 0) && (uVar1 = pEVar3->sh_info, local_34 < uVar1)" (parenthesized_expression "((pEVar3->sh_flags & 0x40) != 0)" ( (binary_expression "(pEVar3->sh_flags & 0x40) != 0" (parenthesized_expression "(pEVar3->sh_flags & 0x40)" ( (binary_expression "pEVar3->sh_flags & 0x40" (field_expression "pEVar3->sh_flags" identifier -> field_identifier) & number_literal) )) != number_literal) )) && (parenthesized_expression "(uVar1 = pEVar3->sh_info, local_34 < uVar1)" ( (comma_expression "uVar1 = pEVar3->sh_info, local_34 < uVar1" (assignment_expression "uVar1 = pEVar3->sh_info" identifier = (field_expression "pEVar3->sh_info" identifier -> field_identifier)) , (binary_expression "local_34 < uVar1" identifier < identifier)) ))) )) (compound_statement "{\n            pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(pcVar2,local_38,uVar1);\n          }" { (expression_statement "pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);" (assignment_expression "pcVar2 = (char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5)" identifier (argument_list "(0,"Section %u has an out of range sh_info value of %u\n",5)" ( number_literal , (string_literal ""Section %u has an out of range sh_info value of %u\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "warn(pcVar2,local_38,uVar1);" (call_expression "warn(pcVar2,local_38,uVar1)" identifier (argument_list "(pcVar2,local_38,uVar1)" ( identifier , identifier , identifier ))) ;) })) })) (expression_statement "local_38 = local_38 + 1;" (assignment_expression "local_38 = local_38 + 1" identifier = (binary_expression "local_38 + 1" identifier + number_literal)) ;) (expression_statement "pEVar3 = pEVar3 + 1;" (assignment_expression "pEVar3 = pEVar3 + 1" identifier = (binary_expression "pEVar3 + 1" identifier + number_literal)) ;) (expression_statement "puVar4 = puVar4 + 0x40;" (assignment_expression "puVar4 = puVar4 + 0x40" identifier = (binary_expression "puVar4 + 0x40" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_38 < local_34)" ( (binary_expression "local_38 < local_34" identifier < identifier) )) ;) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (probe == 0) {\n      pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(pcVar2,local_34);\n    }" if (parenthesized_expression "(probe == 0)" ( (binary_expression "probe == 0" identifier == number_literal) )) (compound_statement "{\n      pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(pcVar2,local_34);\n    }" { (expression_statement "pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5);" (assignment_expression "pcVar2 = (char *)dcgettext(0,"Out of memory reading %u section headers\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"Out of memory reading %u section headers\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"Out of memory reading %u section headers\n",5)" identifier (argument_list "(0,"Out of memory reading %u section headers\n",5)" ( number_literal , (string_literal ""Out of memory reading %u section headers\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "error(pcVar2,local_34);" (call_expression "error(pcVar2,local_34)" identifier (argument_list "(pcVar2,local_34)" ( identifier , identifier ))) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "undefined4 __regparm3 FUN_0001dde0(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  void *__ptr;\n  undefined4 *puVar3;\n  void *pvVar4;\n  bool bVar5;\n  undefined8 uVar6;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = *(uint *)(param_1 + 0x50);\n  if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }\n  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }\n  uVar2 = dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);\n  if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }\n  return 0;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_0001dde0(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  void *__ptr;\n  undefined4 *puVar3;\n  void *pvVar4;\n  bool bVar5;\n  undefined8 uVar6;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = *(uint *)(param_1 + 0x50);\n  if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }\n  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }\n  uVar2 = dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);\n  if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }\n  return 0;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0001dde0(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  undefined4 uVar2;\n  void *__ptr;\n  undefined4 *puVar3;\n  void *pvVar4;\n  bool bVar5;\n  undefined8 uVar6;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = *(uint *)(param_1 + 0x50);\n  if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }\n  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }\n  uVar2 = dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);\n  if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }\n  return 0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "uint local_38;" type_identifier identifier ;) (declaration "uint local_34;" type_identifier identifier ;) (expression_statement "uVar1 = *(uint *)(param_1 + 0x50);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x50)" identifier = (pointer_expression "*(uint *)(param_1 + 0x50)" * (cast_expression "(uint *)(param_1 + 0x50)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) ))))) ;) (if_statement "if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }" { (expression_statement "local_34 = *(uint *)(param_1 + 0x54);" (assignment_expression "local_34 = *(uint *)(param_1 + 0x54)" identifier = (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "bVar5 = local_34 == 0;" (assignment_expression "bVar5 = local_34 == 0" identifier = (binary_expression "local_34 == 0" identifier == number_literal)) ;) }) (else_clause "else {\n    bVar5 = false;\n    local_34 = 1;\n  }" else (compound_statement "{\n    bVar5 = false;\n    local_34 = 1;\n  }" { (expression_statement "bVar5 = false;" (assignment_expression "bVar5 = false" identifier = false) ;) (expression_statement "local_34 = 1;" (assignment_expression "local_34 = 1" identifier = number_literal) ;) }))) (if_statement "if (uVar1 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (bVar5) {\n    return 0;\n  }" if (parenthesized_expression "(bVar5)" ( identifier )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }" if (parenthesized_expression "(uVar1 < 0x40)" ( (binary_expression "uVar1 < 0x40" identifier < number_literal) )) (compound_statement "{\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }" { (if_statement "if (param_2 != 0) {\n      return 0;\n    }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);" (assignment_expression "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5)" identifier = (call_expression "dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5)" identifier (argument_list "(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5)" ( number_literal , (string_literal ""The e_shentsize field in the ELF header is less than the size of an ELF section header\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar2);" (call_expression "error(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" if (parenthesized_expression "(((param_2 & 1) == 0) && (0x40 < uVar1))" ( (binary_expression "((param_2 & 1) == 0) && (0x40 < uVar1)" (parenthesized_expression "((param_2 & 1) == 0)" ( (binary_expression "(param_2 & 1) == 0" (parenthesized_expression "(param_2 & 1)" ( (binary_expression "param_2 & 1" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(0x40 < uVar1)" ( (binary_expression "0x40 < uVar1" number_literal < identifier) ))) )) (compound_statement "{\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }" { (expression_statement "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);" (assignment_expression "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5)" identifier = (call_expression "dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5)" identifier (argument_list "(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5)" ( number_literal , (string_literal ""The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "warn(uVar2);" (call_expression "warn(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) }) (else_clause "else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" else (if_statement "if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0001de46;" goto statement_identifier ;) })))) (expression_statement "uVar2 = dcgettext(0,"section headers",5);" (assignment_expression "uVar2 = dcgettext(0,"section headers",5)" identifier = (call_expression "dcgettext(0,"section headers",5)" identifier (argument_list "(0,"section headers",5)" ( number_literal , (string_literal ""section headers"" " string_content ") , number_literal )))) ;) (labeled_statement "LAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);" statement_identifier : (expression_statement "__ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);" (assignment_expression "__ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2)" identifier = (cast_expression "(void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001bf90(uVar1,0,local_34,0,uVar2)" identifier (argument_list "(uVar1,0,local_34,0,uVar2)" ( identifier , number_literal , identifier , number_literal , identifier ))))) ;)) (if_statement "if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }" if (parenthesized_expression "(__ptr != (void *)0x0)" ( (binary_expression "__ptr != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }" { (expression_statement "free(*(void **)(param_1 + 0x5c));" (call_expression "free(*(void **)(param_1 + 0x5c))" identifier (argument_list "(*(void **)(param_1 + 0x5c))" ( (pointer_expression "*(void **)(param_1 + 0x5c)" * (cast_expression "(void **)(param_1 + 0x5c)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x5c)" ( (binary_expression "param_1 + 0x5c" identifier + number_literal) )))) ))) ;) (expression_statement "puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);" (assignment_expression "puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48)" identifier = (cast_expression "(undefined4 *)FUN_0005dac0(local_34,0x48)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005dac0(local_34,0x48)" identifier (argument_list "(local_34,0x48)" ( identifier , number_literal ))))) ;) (expression_statement "*(undefined4 **)(param_1 + 0x5c) = puVar3;" (assignment_expression "*(undefined4 **)(param_1 + 0x5c) = puVar3" (pointer_expression "*(undefined4 **)(param_1 + 0x5c)" * (cast_expression "(undefined4 **)(param_1 + 0x5c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x5c)" ( (binary_expression "param_1 + 0x5c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }" { (expression_statement "local_38 = 0;" (assignment_expression "local_38 = 0" identifier = number_literal) ;) (expression_statement "pvVar4 = __ptr;" (assignment_expression "pvVar4 = __ptr" identifier = identifier) ;) (do_statement "do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);" do (compound_statement "{\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      }" { (expression_statement "uVar2 = (*DAT_000b9dd8)(pvVar4,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)(pvVar4,4)" identifier = (call_expression "(*DAT_000b9dd8)(pvVar4,4)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "(pvVar4,4)" ( identifier , number_literal )))) ;) (expression_statement "*puVar3 = uVar2;" (assignment_expression "*puVar3 = uVar2" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 4,4)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 4,4)" ( (binary_expression "(int)pvVar4 + 4" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "puVar3[1] = uVar2;" (assignment_expression "puVar3[1] = uVar2" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 8,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 8,8)" ( (binary_expression "(int)pvVar4 + 8" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 2) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 2) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 2)" * (cast_expression "(undefined8 *)(puVar3 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x10,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x10,8)" ( (binary_expression "(int)pvVar4 + 0x10" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 4) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 4) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 4)" * (cast_expression "(undefined8 *)(puVar3 + 4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 4)" ( (binary_expression "puVar3 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x20,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x20,8)" ( (binary_expression "(int)pvVar4 + 0x20" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 8) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 8) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 8)" * (cast_expression "(undefined8 *)(puVar3 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 8)" ( (binary_expression "puVar3 + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x38,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x38,8)" ( (binary_expression "(int)pvVar4 + 0x38" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 0xe) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 0xe) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 0xe)" * (cast_expression "(undefined8 *)(puVar3 + 0xe)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 0xe)" ( (binary_expression "puVar3 + 0xe" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x28,4)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x28,4)" ( (binary_expression "(int)pvVar4 + 0x28" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "puVar3[10] = uVar2;" (assignment_expression "puVar3[10] = uVar2" (subscript_expression "puVar3[10]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x2c,4)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x2c,4)" ( (binary_expression "(int)pvVar4 + 0x2c" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "puVar3[0xb] = uVar2;" (assignment_expression "puVar3[0xb] = uVar2" (subscript_expression "puVar3[0xb]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x18,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x18,8)" ( (binary_expression "(int)pvVar4 + 0x18" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 6) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 6) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 6)" * (cast_expression "(undefined8 *)(puVar3 + 6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 6)" ( (binary_expression "puVar3 + 6" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8)" identifier = (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x30,8)" (parenthesized_expression "(*DAT_000b9dd8)" ( (pointer_expression "*DAT_000b9dd8" * identifier) )) (argument_list "((int)pvVar4 + 0x30,8)" ( (binary_expression "(int)pvVar4 + 0x30" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal )))) ;) (expression_statement "*(undefined8 *)(puVar3 + 0xc) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 0xc) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 0xc)" * (cast_expression "(undefined8 *)(puVar3 + 0xc)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 0xc)" ( (binary_expression "puVar3 + 0xc" identifier + number_literal) )))) = identifier) ;) (if_statement "if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }" { (expression_statement "uVar1 = puVar3[10];" (assignment_expression "uVar1 = puVar3[10]" identifier = (subscript_expression "puVar3[10]" identifier [ number_literal ])) ;) (if_statement "if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" if (parenthesized_expression "(local_34 < uVar1)" ( (binary_expression "local_34 < uVar1" identifier < identifier) )) (compound_statement "{\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" { (expression_statement "uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);" (assignment_expression "uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5)" identifier = (call_expression "dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5)" identifier (argument_list "(0,"Section %u has an out of range sh_link value of %u\n",5)" ( number_literal , (string_literal ""Section %u has an out of range sh_link value of %u\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "warn(uVar2,local_38,uVar1);" (call_expression "warn(uVar2,local_38,uVar1)" identifier (argument_list "(uVar2,local_38,uVar1)" ( identifier , identifier , identifier ))) ;) })) (if_statement "if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" if (parenthesized_expression "(((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1))" ( (binary_expression "((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)" (parenthesized_expression "((*(byte *)(puVar3 + 2) & 0x40) != 0)" ( (binary_expression "(*(byte *)(puVar3 + 2) & 0x40) != 0" (parenthesized_expression "(*(byte *)(puVar3 + 2) & 0x40)" ( (binary_expression "*(byte *)(puVar3 + 2) & 0x40" (pointer_expression "*(byte *)(puVar3 + 2)" * (cast_expression "(byte *)(puVar3 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(uVar1 = puVar3[0xb], local_34 < uVar1)" ( (comma_expression "uVar1 = puVar3[0xb], local_34 < uVar1" (assignment_expression "uVar1 = puVar3[0xb]" identifier = (subscript_expression "puVar3[0xb]" identifier [ number_literal ])) , (binary_expression "local_34 < uVar1" identifier < identifier)) ))) )) (compound_statement "{\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" { (expression_statement "uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);" (assignment_expression "uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5)" identifier = (call_expression "dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5)" identifier (argument_list "(0,"Section %u has an out of range sh_info value of %u\n",5)" ( number_literal , (string_literal ""Section %u has an out of range sh_info value of %u\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "warn(uVar2,local_38,uVar1);" (call_expression "warn(uVar2,local_38,uVar1)" identifier (argument_list "(uVar2,local_38,uVar1)" ( identifier , identifier , identifier ))) ;) })) })) (expression_statement "local_38 = local_38 + 1;" (assignment_expression "local_38 = local_38 + 1" identifier = (binary_expression "local_38 + 1" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar3 + 0x12;" (assignment_expression "puVar3 = puVar3 + 0x12" identifier = (binary_expression "puVar3 + 0x12" identifier + number_literal)) ;) (expression_statement "pvVar4 = (void *)((int)pvVar4 + 0x40);" (assignment_expression "pvVar4 = (void *)((int)pvVar4 + 0x40)" identifier = (cast_expression "(void *)((int)pvVar4 + 0x40)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar4 + 0x40)" ( (binary_expression "(int)pvVar4 + 0x40" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(local_38 < local_34)" ( (binary_expression "local_38 < local_34" identifier < identifier) )) ;) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }" { (expression_statement "uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);" (assignment_expression "uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5)" identifier = (call_expression "dcgettext(0,"Out of memory reading %u section headers\n",5)" identifier (argument_list "(0,"Out of memory reading %u section headers\n",5)" ( number_literal , (string_literal ""Out of memory reading %u section headers\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar2,local_34);" (call_expression "error(uVar2,local_34)" identifier (argument_list "(uVar2,local_34)" ( identifier , identifier ))) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE 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) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (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 = (binary_expression IDENT == LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) && (parenthesized_expression ( (binary_expression LIT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT , IDENT , LIT , IDENT ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) , LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) , LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) , LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) , (binary_expression IDENT < IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (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 (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) })) (return_statement return LIT ;) })))
(function_definition "undefined4 __regparm3 FUN_0001dde0(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  void *__ptr;\n  undefined4 *puVar3;\n  void *pvVar4;\n  bool bVar5;\n  undefined8 uVar6;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = *(uint *)(param_1 + 0x50);\n  if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }\n  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }\n  uVar2 = dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);\n  if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }\n  return 0;\n}" (type_identifier "undefined4") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0001dde0(int param_1,uint param_2)" (identifier "FUN_0001dde0") (parameter_list "(int param_1,uint param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")"))) (compound_statement "{\n  uint uVar1;\n  undefined4 uVar2;\n  void *__ptr;\n  undefined4 *puVar3;\n  void *pvVar4;\n  bool bVar5;\n  undefined8 uVar6;\n  uint local_38;\n  uint local_34;\n  \n  uVar1 = *(uint *)(param_1 + 0x50);\n  if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }\n  if (uVar1 == 0) {\n    return 0;\n  }\n  if (bVar5) {\n    return 0;\n  }\n  if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }\n  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }\n  uVar2 = dcgettext(0,"section headers",5);\nLAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);\n  if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "void *__ptr;" (primitive_type "void") (pointer_declarator "*__ptr" (* "*") (identifier "__ptr")) (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "void *pvVar4;" (primitive_type "void") (pointer_declarator "*pvVar4" (* "*") (identifier "pvVar4")) (; ";")) (declaration "bool bVar5;" (primitive_type "bool") (identifier "bVar5") (; ";")) (declaration "undefined8 uVar6;" (type_identifier "undefined8") (identifier "uVar6") (; ";")) (declaration "uint local_38;" (type_identifier "uint") (identifier "local_38") (; ";")) (declaration "uint local_34;" (type_identifier "uint") (identifier "local_34") (; ";")) (expression_statement "uVar1 = *(uint *)(param_1 + 0x50);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x50)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_1 + 0x50)" (* "*") (cast_expression "(uint *)(param_1 + 0x50)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")"))))) (; ";")) (if_statement "if (param_2 == 0) {\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }\n  else {\n    bVar5 = false;\n    local_34 = 1;\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    local_34 = *(uint *)(param_1 + 0x54);\n    bVar5 = local_34 == 0;\n  }" ({ "{") (expression_statement "local_34 = *(uint *)(param_1 + 0x54);" (assignment_expression "local_34 = *(uint *)(param_1 + 0x54)" (identifier "local_34") (= "=") (pointer_expression "*(uint *)(param_1 + 0x54)" (* "*") (cast_expression "(uint *)(param_1 + 0x54)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")"))))) (; ";")) (expression_statement "bVar5 = local_34 == 0;" (assignment_expression "bVar5 = local_34 == 0" (identifier "bVar5") (= "=") (binary_expression "local_34 == 0" (identifier "local_34") (== "==") (number_literal "0"))) (; ";")) (} "}")) (else_clause "else {\n    bVar5 = false;\n    local_34 = 1;\n  }" (else "else") (compound_statement "{\n    bVar5 = false;\n    local_34 = 1;\n  }" ({ "{") (expression_statement "bVar5 = false;" (assignment_expression "bVar5 = false" (identifier "bVar5") (= "=") (false "false")) (; ";")) (expression_statement "local_34 = 1;" (assignment_expression "local_34 = 1" (identifier "local_34") (= "=") (number_literal "1")) (; ";")) (} "}")))) (if_statement "if (uVar1 == 0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (bVar5) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(bVar5)" (( "(") (identifier "bVar5") () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (uVar1 < 0x40) {\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }" (if "if") (parenthesized_expression "(uVar1 < 0x40)" (( "(") (binary_expression "uVar1 < 0x40" (identifier "uVar1") (< "<") (number_literal "0x40")) () ")")) (compound_statement "{\n    if (param_2 != 0) {\n      return 0;\n    }\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);\n    error(uVar2);\n    return 0;\n  }" ({ "{") (if_statement "if (param_2 != 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5);" (assignment_expression "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5)" (identifier "uVar2") (= "=") (call_expression "dcgettext(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5)" (identifier "dcgettext") (argument_list "(0,\n                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"\n                      ,5)" (( "(") (number_literal "0") (, ",") (string_literal ""The e_shentsize field in the ELF header is less than the size of an ELF section header\n"" (" """) (string_content "The e_shentsize field in the ELF header is less than the size of an ELF section header") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "error(uVar2);" (call_expression "error(uVar2)" (identifier "error") (argument_list "(uVar2)" (( "(") (identifier "uVar2") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (((param_2 & 1) == 0) && (0x40 < uVar1)) {\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }\n  else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" (if "if") (parenthesized_expression "(((param_2 & 1) == 0) && (0x40 < uVar1))" (( "(") (binary_expression "((param_2 & 1) == 0) && (0x40 < uVar1)" (parenthesized_expression "((param_2 & 1) == 0)" (( "(") (binary_expression "(param_2 & 1) == 0" (parenthesized_expression "(param_2 & 1)" (( "(") (binary_expression "param_2 & 1" (identifier "param_2") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(0x40 < uVar1)" (( "(") (binary_expression "0x40 < uVar1" (number_literal "0x40") (< "<") (identifier "uVar1")) () ")"))) () ")")) (compound_statement "{\n    uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);\n    warn(uVar2);\n  }" ({ "{") (expression_statement "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5);" (assignment_expression "uVar2 = dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5)" (identifier "uVar2") (= "=") (call_expression "dcgettext(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5)" (identifier "dcgettext") (argument_list "(0,\n                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"\n                      ,5)" (( "(") (number_literal "0") (, ",") (string_literal ""The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"" (" """) (string_content "The e_shentsize field in the ELF header is larger than the size of an ELF section header") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "warn(uVar2);" (call_expression "warn(uVar2)" (identifier "warn") (argument_list "(uVar2)" (( "(") (identifier "uVar2") () ")"))) (; ";")) (} "}")) (else_clause "else if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" (else "else") (if_statement "if (param_2 != 0) {\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar2 = 0;\n    goto LAB_0001de46;\n  }" ({ "{") (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_0001de46;" (goto "goto") (statement_identifier "LAB_0001de46") (; ";")) (} "}"))))) (expression_statement "uVar2 = dcgettext(0,"section headers",5);" (assignment_expression "uVar2 = dcgettext(0,"section headers",5)" (identifier "uVar2") (= "=") (call_expression "dcgettext(0,"section headers",5)" (identifier "dcgettext") (argument_list "(0,"section headers",5)" (( "(") (number_literal "0") (, ",") (string_literal ""section headers"" (" """) (string_content "section headers") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (labeled_statement "LAB_0001de46:\n  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);" (statement_identifier "LAB_0001de46") (: ":") (expression_statement "__ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);" (assignment_expression "__ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2)" (identifier "__ptr") (= "=") (cast_expression "(void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0001bf90(uVar1,0,local_34,0,uVar2)" (identifier "FUN_0001bf90") (argument_list "(uVar1,0,local_34,0,uVar2)" (( "(") (identifier "uVar1") (, ",") (number_literal "0") (, ",") (identifier "local_34") (, ",") (number_literal "0") (, ",") (identifier "uVar2") () ")"))))) (; ";"))) (if_statement "if (__ptr != (void *)0x0) {\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }" (if "if") (parenthesized_expression "(__ptr != (void *)0x0)" (( "(") (binary_expression "__ptr != (void *)0x0" (identifier "__ptr") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    free(*(void **)(param_1 + 0x5c));\n    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);\n    *(undefined4 **)(param_1 + 0x5c) = puVar3;\n    if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }\n    if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }\n  }" ({ "{") (expression_statement "free(*(void **)(param_1 + 0x5c));" (call_expression "free(*(void **)(param_1 + 0x5c))" (identifier "free") (argument_list "(*(void **)(param_1 + 0x5c))" (( "(") (pointer_expression "*(void **)(param_1 + 0x5c)" (* "*") (cast_expression "(void **)(param_1 + 0x5c)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x5c)" (( "(") (binary_expression "param_1 + 0x5c" (identifier "param_1") (+ "+") (number_literal "0x5c")) () ")")))) () ")"))) (; ";")) (expression_statement "puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);" (assignment_expression "puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48)" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)FUN_0005dac0(local_34,0x48)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0005dac0(local_34,0x48)" (identifier "FUN_0005dac0") (argument_list "(local_34,0x48)" (( "(") (identifier "local_34") (, ",") (number_literal "0x48") () ")"))))) (; ";")) (expression_statement "*(undefined4 **)(param_1 + 0x5c) = puVar3;" (assignment_expression "*(undefined4 **)(param_1 + 0x5c) = puVar3" (pointer_expression "*(undefined4 **)(param_1 + 0x5c)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x5c)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x5c)" (( "(") (binary_expression "param_1 + 0x5c" (identifier "param_1") (+ "+") (number_literal "0x5c")) () ")")))) (= "=") (identifier "puVar3")) (; ";")) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }" (if "if") (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar3 != (undefined4 *)0x0" (identifier "puVar3") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      local_38 = 0;\n      pvVar4 = __ptr;\n      do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);\n      free(__ptr);\n      return 1;\n    }" ({ "{") (expression_statement "local_38 = 0;" (assignment_expression "local_38 = 0" (identifier "local_38") (= "=") (number_literal "0")) (; ";")) (expression_statement "pvVar4 = __ptr;" (assignment_expression "pvVar4 = __ptr" (identifier "pvVar4") (= "=") (identifier "__ptr")) (; ";")) (do_statement "do {\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      } while (local_38 < local_34);" (do "do") (compound_statement "{\n        uVar2 = (*DAT_000b9dd8)(pvVar4,4);\n        *puVar3 = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);\n        puVar3[1] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);\n        *(undefined8 *)(puVar3 + 2) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);\n        *(undefined8 *)(puVar3 + 4) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);\n        *(undefined8 *)(puVar3 + 8) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);\n        *(undefined8 *)(puVar3 + 0xe) = uVar6;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);\n        puVar3[10] = uVar2;\n        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);\n        puVar3[0xb] = uVar2;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);\n        *(undefined8 *)(puVar3 + 6) = uVar6;\n        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);\n        *(undefined8 *)(puVar3 + 0xc) = uVar6;\n        if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }\n        local_38 = local_38 + 1;\n        puVar3 = puVar3 + 0x12;\n        pvVar4 = (void *)((int)pvVar4 + 0x40);\n      }" ({ "{") (expression_statement "uVar2 = (*DAT_000b9dd8)(pvVar4,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)(pvVar4,4)" (identifier "uVar2") (= "=") (call_expression "(*DAT_000b9dd8)(pvVar4,4)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "(pvVar4,4)" (( "(") (identifier "pvVar4") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "*puVar3 = uVar2;" (assignment_expression "*puVar3 = uVar2" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4)" (identifier "uVar2") (= "=") (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 4,4)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "((int)pvVar4 + 4,4)" (( "(") (binary_expression "(int)pvVar4 + 4" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "4")) (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "puVar3[1] = uVar2;" (assignment_expression "puVar3[1] = uVar2" (subscript_expression "puVar3[1]" (identifier "puVar3") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8)" (identifier "uVar6") (= "=") (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 8,8)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "((int)pvVar4 + 8,8)" (( "(") (binary_expression "(int)pvVar4 + 8" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "8")) (, ",") (number_literal "8") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(puVar3 + 2) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 2) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 2)" (* "*") (cast_expression "(undefined8 *)(puVar3 + 2)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 2)" (( "(") (binary_expression "puVar3 + 2" (identifier "puVar3") (+ "+") (number_literal "2")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8)" (identifier "uVar6") (= "=") (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x10,8)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "((int)pvVar4 + 0x10,8)" (( "(") (binary_expression "(int)pvVar4 + 0x10" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "0x10")) (, ",") (number_literal "8") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(puVar3 + 4) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 4) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 4)" (* "*") (cast_expression "(undefined8 *)(puVar3 + 4)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 4)" (( "(") (binary_expression "puVar3 + 4" (identifier "puVar3") (+ "+") (number_literal "4")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8)" (identifier "uVar6") (= "=") (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x20,8)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "((int)pvVar4 + 0x20,8)" (( "(") (binary_expression "(int)pvVar4 + 0x20" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "0x20")) (, ",") (number_literal "8") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(puVar3 + 8) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 8) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 8)" (* "*") (cast_expression "(undefined8 *)(puVar3 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 8)" (( "(") (binary_expression "puVar3 + 8" (identifier "puVar3") (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8)" (identifier "uVar6") (= "=") (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x38,8)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "((int)pvVar4 + 0x38,8)" (( "(") (binary_expression "(int)pvVar4 + 0x38" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "0x38")) (, ",") (number_literal "8") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(puVar3 + 0xe) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 0xe) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 0xe)" (* "*") (cast_expression "(undefined8 *)(puVar3 + 0xe)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 0xe)" (( "(") (binary_expression "puVar3 + 0xe" (identifier "puVar3") (+ "+") (number_literal "0xe")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4)" (identifier "uVar2") (= "=") (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x28,4)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "((int)pvVar4 + 0x28,4)" (( "(") (binary_expression "(int)pvVar4 + 0x28" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "0x28")) (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "puVar3[10] = uVar2;" (assignment_expression "puVar3[10] = uVar2" (subscript_expression "puVar3[10]" (identifier "puVar3") ([ "[") (number_literal "10") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);" (assignment_expression "uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4)" (identifier "uVar2") (= "=") (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x2c,4)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "((int)pvVar4 + 0x2c,4)" (( "(") (binary_expression "(int)pvVar4 + 0x2c" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "0x2c")) (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "puVar3[0xb] = uVar2;" (assignment_expression "puVar3[0xb] = uVar2" (subscript_expression "puVar3[0xb]" (identifier "puVar3") ([ "[") (number_literal "0xb") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8)" (identifier "uVar6") (= "=") (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x18,8)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "((int)pvVar4 + 0x18,8)" (( "(") (binary_expression "(int)pvVar4 + 0x18" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "0x18")) (, ",") (number_literal "8") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(puVar3 + 6) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 6) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 6)" (* "*") (cast_expression "(undefined8 *)(puVar3 + 6)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 6)" (( "(") (binary_expression "puVar3 + 6" (identifier "puVar3") (+ "+") (number_literal "6")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);" (assignment_expression "uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8)" (identifier "uVar6") (= "=") (call_expression "(*DAT_000b9dd8)((int)pvVar4 + 0x30,8)" (parenthesized_expression "(*DAT_000b9dd8)" (( "(") (pointer_expression "*DAT_000b9dd8" (* "*") (identifier "DAT_000b9dd8")) () ")")) (argument_list "((int)pvVar4 + 0x30,8)" (( "(") (binary_expression "(int)pvVar4 + 0x30" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "0x30")) (, ",") (number_literal "8") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(puVar3 + 0xc) = uVar6;" (assignment_expression "*(undefined8 *)(puVar3 + 0xc) = uVar6" (pointer_expression "*(undefined8 *)(puVar3 + 0xc)" (* "*") (cast_expression "(undefined8 *)(puVar3 + 0xc)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 0xc)" (( "(") (binary_expression "puVar3 + 0xc" (identifier "puVar3") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (if_statement "if (param_2 == 0) {\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          uVar1 = puVar3[10];\n          if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }\n        }" ({ "{") (expression_statement "uVar1 = puVar3[10];" (assignment_expression "uVar1 = puVar3[10]" (identifier "uVar1") (= "=") (subscript_expression "puVar3[10]" (identifier "puVar3") ([ "[") (number_literal "10") (] "]"))) (; ";")) (if_statement "if (local_34 < uVar1) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" (if "if") (parenthesized_expression "(local_34 < uVar1)" (( "(") (binary_expression "local_34 < uVar1" (identifier "local_34") (< "<") (identifier "uVar1")) () ")")) (compound_statement "{\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" ({ "{") (expression_statement "uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);" (assignment_expression "uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5)" (identifier "uVar2") (= "=") (call_expression "dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5)" (identifier "dcgettext") (argument_list "(0,"Section %u has an out of range sh_link value of %u\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""Section %u has an out of range sh_link value of %u\n"" (" """) (string_content "Section %u has an out of range sh_link value of %u") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "warn(uVar2,local_38,uVar1);" (call_expression "warn(uVar2,local_38,uVar1)" (identifier "warn") (argument_list "(uVar2,local_38,uVar1)" (( "(") (identifier "uVar2") (, ",") (identifier "local_38") (, ",") (identifier "uVar1") () ")"))) (; ";")) (} "}"))) (if_statement "if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" (if "if") (parenthesized_expression "(((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1))" (( "(") (binary_expression "((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)" (parenthesized_expression "((*(byte *)(puVar3 + 2) & 0x40) != 0)" (( "(") (binary_expression "(*(byte *)(puVar3 + 2) & 0x40) != 0" (parenthesized_expression "(*(byte *)(puVar3 + 2) & 0x40)" (( "(") (binary_expression "*(byte *)(puVar3 + 2) & 0x40" (pointer_expression "*(byte *)(puVar3 + 2)" (* "*") (cast_expression "(byte *)(puVar3 + 2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 2)" (( "(") (binary_expression "puVar3 + 2" (identifier "puVar3") (+ "+") (number_literal "2")) () ")")))) (& "&") (number_literal "0x40")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(uVar1 = puVar3[0xb], local_34 < uVar1)" (( "(") (comma_expression "uVar1 = puVar3[0xb], local_34 < uVar1" (assignment_expression "uVar1 = puVar3[0xb]" (identifier "uVar1") (= "=") (subscript_expression "puVar3[0xb]" (identifier "puVar3") ([ "[") (number_literal "0xb") (] "]"))) (, ",") (binary_expression "local_34 < uVar1" (identifier "local_34") (< "<") (identifier "uVar1"))) () ")"))) () ")")) (compound_statement "{\n            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);\n            warn(uVar2,local_38,uVar1);\n          }" ({ "{") (expression_statement "uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);" (assignment_expression "uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5)" (identifier "uVar2") (= "=") (call_expression "dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5)" (identifier "dcgettext") (argument_list "(0,"Section %u has an out of range sh_info value of %u\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""Section %u has an out of range sh_info value of %u\n"" (" """) (string_content "Section %u has an out of range sh_info value of %u") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "warn(uVar2,local_38,uVar1);" (call_expression "warn(uVar2,local_38,uVar1)" (identifier "warn") (argument_list "(uVar2,local_38,uVar1)" (( "(") (identifier "uVar2") (, ",") (identifier "local_38") (, ",") (identifier "uVar1") () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "local_38 = local_38 + 1;" (assignment_expression "local_38 = local_38 + 1" (identifier "local_38") (= "=") (binary_expression "local_38 + 1" (identifier "local_38") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar3 = puVar3 + 0x12;" (assignment_expression "puVar3 = puVar3 + 0x12" (identifier "puVar3") (= "=") (binary_expression "puVar3 + 0x12" (identifier "puVar3") (+ "+") (number_literal "0x12"))) (; ";")) (expression_statement "pvVar4 = (void *)((int)pvVar4 + 0x40);" (assignment_expression "pvVar4 = (void *)((int)pvVar4 + 0x40)" (identifier "pvVar4") (= "=") (cast_expression "(void *)((int)pvVar4 + 0x40)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar4 + 0x40)" (( "(") (binary_expression "(int)pvVar4 + 0x40" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (number_literal "0x40")) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_38 < local_34)" (( "(") (binary_expression "local_38 < local_34" (identifier "local_38") (< "<") (identifier "local_34")) () ")")) (; ";")) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" (identifier "free") (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (param_2 == 0) {\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);\n      error(uVar2,local_34);\n    }" ({ "{") (expression_statement "uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);" (assignment_expression "uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5)" (identifier "uVar2") (= "=") (call_expression "dcgettext(0,"Out of memory reading %u section headers\n",5)" (identifier "dcgettext") (argument_list "(0,"Out of memory reading %u section headers\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""Out of memory reading %u section headers\n"" (" """) (string_content "Out of memory reading %u section headers") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "error(uVar2,local_34);" (call_expression "error(uVar2,local_34)" (identifier "error") (argument_list "(uVar2,local_34)" (( "(") (identifier "uVar2") (, ",") (identifier "local_34") () ")"))) (; ";")) (} "}"))) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

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

type_1 __regparm3 function_1(type_2 *filedata,type_1 var_1)

{
  type_3 var_3;
  char *pcVar2;
  type_4 *var_8;
  type_5 *var_11;
  type_6 eVar6;
  type_4 *var_12;
  bool bVar5;
  type_3 var_13;
  type_3 var_2;
  
  var_3 = (filedata->file_header).e_shentsize;
  if (var_1 == 0) {
    var_2 = (filedata->file_header).e_shnum;
    bVar5 = var_2 == 0;
  }
  else {
    bVar5 = false;
    var_2 = 1;
  }
  if (var_3 == 0) {
    return 0;
  }
  if (bVar5) {
    return 0;
  }
  if (var_3 < 0x40) {
    if (var_1 != 0) {
      return 0;
    }
    pcVar2 = (char *)var_4(0,
                               "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
                               ,5);
    var_5(pcVar2);
    return 0;
  }
  if (((var_1 & 1U) == 0) && (0x40 < var_3)) {
    pcVar2 = (char *)var_4(0,
                               "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
                               ,5);
    var_6(pcVar2);
  }
  else if (var_1 != 0) {
    pcVar2 = (char *)0x0;
    goto LAB_0001de46;
  }
  pcVar2 = (char *)var_4(0,"section headers",5);
LAB_0001de46:
  var_8 = (type_4 *)var_7((void *)0x0,filedata,(ulong)(filedata->file_header).e_shoff,
                            (type_7)var_3,(type_7)var_2,pcVar2);
  if (var_8 != (type_4 *)0x0) {
    var_9(filedata->section_headers);
    var_11 = (type_5 *)var_10(var_2,0x48);
    filedata->section_headers = var_11;
    if (var_11 != (type_5 *)0x0) {
      var_13 = 0;
      var_12 = var_8;
      do {
        eVar6._0_4_ = (*byte_get)(var_12,4);
                    /* WARNING: Store size is inaccurate */
        *(type_6 *)&var_11->sh_name = (type_6)eVar6;
        eVar6._0_4_ = (*byte_get)(var_12 + 4,4);
                    /* WARNING: Store size is inaccurate */
        *(type_6 *)&var_11->sh_type = (type_6)eVar6;
        eVar6 = (*byte_get)(var_12 + 8,8);
        var_11->sh_flags = eVar6;
        eVar6 = (*byte_get)(var_12 + 0x10,8);
        var_11->sh_addr = eVar6;
        eVar6 = (*byte_get)(var_12 + 0x20,8);
        var_11->sh_size = eVar6;
        eVar6 = (*byte_get)(var_12 + 0x38,8);
        var_11->sh_entsize = eVar6;
        eVar6._0_4_ = (*byte_get)(var_12 + 0x28,4);
                    /* WARNING: Store size is inaccurate */
        *(type_6 *)&var_11->sh_link = (type_6)eVar6;
        eVar6._0_4_ = (*byte_get)(var_12 + 0x2c,4);
                    /* WARNING: Store size is inaccurate */
        *(type_6 *)&var_11->sh_info = (type_6)eVar6;
        eVar6 = (*byte_get)(var_12 + 0x18,8);
        var_11->sh_offset = eVar6;
        eVar6 = (*byte_get)(var_12 + 0x30,8);
        var_11->sh_addralign = eVar6;
        if (var_1 == 0) {
          var_3 = var_11->sh_link;
          if (var_2 < var_3) {
            pcVar2 = (char *)var_4(0,"Section %u has an out of range sh_link value of %u\n",5);
            var_6(pcVar2,var_13,var_3);
          }
          if (((var_11->sh_flags & 0x40) != 0) && (var_3 = var_11->sh_info, var_2 < var_3)) {
            pcVar2 = (char *)var_4(0,"Section %u has an out of range sh_info value of %u\n",5);
            var_6(pcVar2,var_13,var_3);
          }
        }
        var_13 = var_13 + 1;
        var_11 = var_11 + 1;
        var_12 = var_12 + 0x40;
      } while (var_13 < var_2);
      var_9(var_8);
      return 1;
    }
    if (var_1 == 0) {
      pcVar2 = (char *)var_4(0,"Out of memory reading %u section headers\n",5);
      var_5(pcVar2,var_2);
    }
  }
  return 0;
}


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

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

undefined4 __regparm3 MASKED(int param_1,uint param_2)

{
  uint uVar1;
  undefined4 uVar2;
  void *__ptr;
  undefined4 *puVar3;
  void *pvVar4;
  bool bVar5;
  undefined8 uVar6;
  uint local_38;
  uint local_34;
  
  uVar1 = *(uint *)(param_1 + 0x50);
  if (param_2 == 0) {
    local_34 = *(uint *)(param_1 + 0x54);
    bVar5 = local_34 == 0;
  }
  else {
    bVar5 = false;
    local_34 = 1;
  }
  if (uVar1 == 0) {
    return 0;
  }
  if (bVar5) {
    return 0;
  }
  if (uVar1 < 0x40) {
    if (param_2 != 0) {
      return 0;
    }
    uVar2 = dcgettext(0,
                      "The e_shentsize field in the ELF header is less than the size of an ELF section header\n"
                      ,5);
    error(uVar2);
    return 0;
  }
  if (((param_2 & 1) == 0) && (0x40 < uVar1)) {
    uVar2 = dcgettext(0,
                      "The e_shentsize field in the ELF header is larger than the size of an ELF section header\n"
                      ,5);
    warn(uVar2);
  }
  else if (param_2 != 0) {
    uVar2 = 0;
    goto LAB_0001de46;
  }
  uVar2 = dcgettext(0,"section headers",5);
LAB_0001de46:
  __ptr = (void *)FUN_0001bf90(uVar1,0,local_34,0,uVar2);
  if (__ptr != (void *)0x0) {
    free(*(void **)(param_1 + 0x5c));
    puVar3 = (undefined4 *)FUN_0005dac0(local_34,0x48);
    *(undefined4 **)(param_1 + 0x5c) = puVar3;
    if (puVar3 != (undefined4 *)0x0) {
      local_38 = 0;
      pvVar4 = __ptr;
      do {
        uVar2 = (*DAT_000b9dd8)(pvVar4,4);
        *puVar3 = uVar2;
        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 4,4);
        puVar3[1] = uVar2;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 8,8);
        *(undefined8 *)(puVar3 + 2) = uVar6;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x10,8);
        *(undefined8 *)(puVar3 + 4) = uVar6;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x20,8);
        *(undefined8 *)(puVar3 + 8) = uVar6;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x38,8);
        *(undefined8 *)(puVar3 + 0xe) = uVar6;
        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x28,4);
        puVar3[10] = uVar2;
        uVar2 = (*DAT_000b9dd8)((int)pvVar4 + 0x2c,4);
        puVar3[0xb] = uVar2;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x18,8);
        *(undefined8 *)(puVar3 + 6) = uVar6;
        uVar6 = (*DAT_000b9dd8)((int)pvVar4 + 0x30,8);
        *(undefined8 *)(puVar3 + 0xc) = uVar6;
        if (param_2 == 0) {
          uVar1 = puVar3[10];
          if (local_34 < uVar1) {
            uVar2 = dcgettext(0,"Section %u has an out of range sh_link value of %u\n",5);
            warn(uVar2,local_38,uVar1);
          }
          if (((*(byte *)(puVar3 + 2) & 0x40) != 0) && (uVar1 = puVar3[0xb], local_34 < uVar1)) {
            uVar2 = dcgettext(0,"Section %u has an out of range sh_info value of %u\n",5);
            warn(uVar2,local_38,uVar1);
          }
        }
        local_38 = local_38 + 1;
        puVar3 = puVar3 + 0x12;
        pvVar4 = (void *)((int)pvVar4 + 0x40);
      } while (local_38 < local_34);
      free(__ptr);
      return 1;
    }
    if (param_2 == 0) {
      uVar2 = dcgettext(0,"Out of memory reading %u section headers\n",5);
      error(uVar2,local_34);
    }
  }
  return 0;
}

