NAME=macho ls headers in json
FILE=bins/mach0/ls-osx-x86_64
ARGS=-e bin.types=true
CMDS=<<EOF
ihj~{}
EOF
EXPECT=<<EOF
[
  {
    "name": "header",
    "vaddr": 4294967296,
    "paddr": 0,
    "size": 1,
    "comment": "mach0_header",
    "format": "mach0_header",
    "pf": [
      {
        "name": "magic",
        "type": "x",
        "offset": 4294967296,
        "value": 4277009103
      },
      {
        "name": "cputype",
        "type": "x",
        "offset": 4294967300,
        "value": 16777223
      },
      {
        "name": "cpusubtype",
        "type": "x",
        "offset": 4294967304,
        "value": 2147483651
      },
      {
        "name": "filetype",
        "type": "E",
        "offset": 4294967308,
        "value": 2,
        "label": "MH_EXECUTE",
        "enum": "mach0_header_filetype"
      },
      {
        "name": "ncmds",
        "type": "d",
        "offset": 4294967312,
        "value": 19
      },
      {
        "name": "sizeofcmds",
        "type": "d",
        "offset": 4294967316,
        "value": 1816
      },
      {
        "name": "flags",
        "type": "B",
        "offset": 4294967320,
        "value": "0x00200085 : MH_NOUNDEFS | MH_DYLDLINK | MH_TWOLEVEL | MH_PIE"
      }
    ]
  },
  {
    "name": "load_command_0_LC_SEGMENT_64",
    "vaddr": 4294967328,
    "paddr": 32,
    "value": 1,
    "comment": "mach0_segment64",
    "format": "mach0_segment64",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294967328,
        "value": 25,
        "label": "LC_SEGMENT_64",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294967332,
        "value": 72
      },
      {
        "name": "segname",
        "type": "z",
        "offset": 4294967336,
        "value": "__PAGEZERO"
      },
      {
        "name": "vmaddr",
        "type": "q",
        "offset": 4294967352,
        "value": 0
      },
      {
        "name": "vmsize",
        "type": "q",
        "offset": 4294967360,
        "value": 4294967296
      },
      {
        "name": "fileoff",
        "type": "q",
        "offset": 4294967368,
        "value": 0
      },
      {
        "name": "filesize",
        "type": "q",
        "offset": 4294967376,
        "value": 0
      },
      {
        "name": "maxprot",
        "type": "o",
        "offset": 4294967384,
        "value": 0
      },
      {
        "name": "initprot",
        "type": "o",
        "offset": 4294967388,
        "value": 0
      },
      {
        "name": "nsects",
        "type": "d",
        "offset": 4294967392,
        "value": 0
      },
      {
        "name": "flags",
        "type": "x",
        "offset": 4294967396,
        "value": 0
      }
    ]
  },
  {
    "name": "load_command_1_LC_SEGMENT_64",
    "vaddr": 4294967400,
    "paddr": 104,
    "value": 1,
    "comment": "mach0_segment64",
    "format": "mach0_segment64",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294967400,
        "value": 25,
        "label": "LC_SEGMENT_64",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294967404,
        "value": 552
      },
      {
        "name": "segname",
        "type": "z",
        "offset": 4294967408,
        "value": "__TEXT"
      },
      {
        "name": "vmaddr",
        "type": "q",
        "offset": 4294967424,
        "value": 4294967296
      },
      {
        "name": "vmsize",
        "type": "q",
        "offset": 4294967432,
        "value": 20480
      },
      {
        "name": "fileoff",
        "type": "q",
        "offset": 4294967440,
        "value": 0
      },
      {
        "name": "filesize",
        "type": "q",
        "offset": 4294967448,
        "value": 20480
      },
      {
        "name": "maxprot",
        "type": "o",
        "offset": 4294967456,
        "value": 7
      },
      {
        "name": "initprot",
        "type": "o",
        "offset": 4294967460,
        "value": 5
      },
      {
        "name": "nsects",
        "type": "d",
        "offset": 4294967464,
        "value": 6
      },
      {
        "name": "flags",
        "type": "x",
        "offset": 4294967468,
        "value": 0
      }
    ]
  },
  {
    "name": "load_command_2_LC_SEGMENT_64",
    "vaddr": 4294967952,
    "paddr": 656,
    "value": 1,
    "comment": "mach0_segment64",
    "format": "mach0_segment64",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294967952,
        "value": 25,
        "label": "LC_SEGMENT_64",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294967956,
        "value": 632
      },
      {
        "name": "segname",
        "type": "z",
        "offset": 4294967960,
        "value": "__DATA"
      },
      {
        "name": "vmaddr",
        "type": "q",
        "offset": 4294967976,
        "value": 4294987776
      },
      {
        "name": "vmsize",
        "type": "q",
        "offset": 4294967984,
        "value": 4096
      },
      {
        "name": "fileoff",
        "type": "q",
        "offset": 4294967992,
        "value": 20480
      },
      {
        "name": "filesize",
        "type": "q",
        "offset": 4294968000,
        "value": 4096
      },
      {
        "name": "maxprot",
        "type": "o",
        "offset": 4294968008,
        "value": 7
      },
      {
        "name": "initprot",
        "type": "o",
        "offset": 4294968012,
        "value": 3
      },
      {
        "name": "nsects",
        "type": "d",
        "offset": 4294968016,
        "value": 7
      },
      {
        "name": "flags",
        "type": "x",
        "offset": 4294968020,
        "value": 0
      }
    ]
  },
  {
    "name": "load_command_3_LC_SEGMENT_64",
    "vaddr": 4294968584,
    "paddr": 1288,
    "value": 1,
    "comment": "mach0_segment64",
    "format": "mach0_segment64",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968584,
        "value": 25,
        "label": "LC_SEGMENT_64",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968588,
        "value": 72
      },
      {
        "name": "segname",
        "type": "z",
        "offset": 4294968592,
        "value": "__LINKEDIT"
      },
      {
        "name": "vmaddr",
        "type": "q",
        "offset": 4294968608,
        "value": 4294991872
      },
      {
        "name": "vmsize",
        "type": "q",
        "offset": 4294968616,
        "value": 12288
      },
      {
        "name": "fileoff",
        "type": "q",
        "offset": 4294968624,
        "value": 24576
      },
      {
        "name": "filesize",
        "type": "q",
        "offset": 4294968632,
        "value": 10160
      },
      {
        "name": "maxprot",
        "type": "o",
        "offset": 4294968640,
        "value": 7
      },
      {
        "name": "initprot",
        "type": "o",
        "offset": 4294968644,
        "value": 1
      },
      {
        "name": "nsects",
        "type": "d",
        "offset": 4294968648,
        "value": 0
      },
      {
        "name": "flags",
        "type": "x",
        "offset": 4294968652,
        "value": 0
      }
    ]
  },
  {
    "name": "load_command_4_LC_DYLD_INFO_ONLY",
    "vaddr": 4294968656,
    "paddr": 1360,
    "value": 1,
    "comment": "mach0_dyld_info_only_command",
    "format": "mach0_dyld_info_only_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968656,
        "value": 2147483682,
        "label": "LC_DYLD_INFO_ONLY",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968660,
        "value": 48
      },
      {
        "name": "rebase_off",
        "type": "x",
        "offset": 4294968664,
        "value": 24576
      },
      {
        "name": "rebase_size",
        "type": "d",
        "offset": 4294968668,
        "value": 24
      },
      {
        "name": "bind_off",
        "type": "x",
        "offset": 4294968672,
        "value": 24600
      },
      {
        "name": "bind_size",
        "type": "d",
        "offset": 4294968676,
        "value": 104
      },
      {
        "name": "weak_bind_off",
        "type": "x",
        "offset": 4294968680,
        "value": 0
      },
      {
        "name": "weak_bind_size",
        "type": "d",
        "offset": 4294968684,
        "value": 0
      },
      {
        "name": "lazy_bind_off",
        "type": "x",
        "offset": 4294968688,
        "value": 24704
      },
      {
        "name": "lazy_bind_size",
        "type": "d",
        "offset": 4294968692,
        "value": 1352
      },
      {
        "name": "export_off",
        "type": "x",
        "offset": 4294968696,
        "value": 26056
      },
      {
        "name": "export_size",
        "type": "d",
        "offset": 4294968700,
        "value": 32
      }
    ]
  },
  {
    "name": "load_command_5_LC_SYMTAB",
    "vaddr": 4294968704,
    "paddr": 1408,
    "value": 1,
    "comment": "mach0_symtab_command",
    "format": "mach0_symtab_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968704,
        "value": 2,
        "label": "LC_SYMTAB",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968708,
        "value": 24
      },
      {
        "name": "symoff",
        "type": "x",
        "offset": 4294968712,
        "value": 26312
      },
      {
        "name": "nsyms",
        "type": "d",
        "offset": 4294968716,
        "value": 83
      },
      {
        "name": "stroff",
        "type": "x",
        "offset": 4294968720,
        "value": 28268
      },
      {
        "name": "strsize",
        "type": "d",
        "offset": 4294968724,
        "value": 968
      }
    ]
  },
  {
    "name": "load_command_6_LC_DYSYMTAB",
    "vaddr": 4294968728,
    "paddr": 1432,
    "value": 1,
    "comment": "mach0_dysymtab_command",
    "format": "mach0_dysymtab_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968728,
        "value": 11,
        "label": "LC_DYSYMTAB",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968732,
        "value": 80
      },
      {
        "name": "ilocalsym",
        "type": "d",
        "offset": 4294968736,
        "value": 0
      },
      {
        "name": "nlocalsym",
        "type": "d",
        "offset": 4294968740,
        "value": 1
      },
      {
        "name": "iextdefsym",
        "type": "d",
        "offset": 4294968744,
        "value": 1
      },
      {
        "name": "nextdefsym",
        "type": "d",
        "offset": 4294968748,
        "value": 1
      },
      {
        "name": "iundefsym",
        "type": "d",
        "offset": 4294968752,
        "value": 2
      },
      {
        "name": "nundefsym",
        "type": "d",
        "offset": 4294968756,
        "value": 81
      },
      {
        "name": "tocoff",
        "type": "d",
        "offset": 4294968760,
        "value": 0
      },
      {
        "name": "ntoc",
        "type": "d",
        "offset": 4294968764,
        "value": 0
      },
      {
        "name": "moddtaboff",
        "type": "d",
        "offset": 4294968768,
        "value": 0
      },
      {
        "name": "nmodtab",
        "type": "d",
        "offset": 4294968772,
        "value": 0
      },
      {
        "name": "extrefsymoff",
        "type": "x",
        "offset": 4294968776,
        "value": 0
      },
      {
        "name": "nextrefsyms",
        "type": "d",
        "offset": 4294968780,
        "value": 0
      },
      {
        "name": "inddirectsymoff",
        "type": "x",
        "offset": 4294968784,
        "value": 27640
      },
      {
        "name": "nindirectsyms",
        "type": "d",
        "offset": 4294968788,
        "value": 157
      },
      {
        "name": "extreloff",
        "type": "x",
        "offset": 4294968792,
        "value": 0
      },
      {
        "name": "nextrel",
        "type": "x",
        "offset": 4294968796,
        "value": 0
      },
      {
        "name": "locreloff",
        "type": "x",
        "offset": 4294968800,
        "value": 0
      },
      {
        "name": "nlocrel",
        "type": "d",
        "offset": 4294968804,
        "value": 0
      }
    ]
  },
  {
    "name": "load_command_7_LC_LOAD_DYLINKER",
    "vaddr": 4294968808,
    "paddr": 1512,
    "value": 1,
    "comment": "mach0_load_dylinker_command",
    "format": "mach0_load_dylinker_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968808,
        "value": 14,
        "label": "LC_LOAD_DYLINKER",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968812,
        "value": 32
      },
      {
        "name": "name_offset",
        "type": "x",
        "offset": 4294968816,
        "value": 12
      },
      {
        "name": "name",
        "type": "z",
        "offset": 4294968820,
        "value": "/usr/lib/dyld"
      }
    ]
  },
  {
    "name": "load_command_8_LC_UUID",
    "vaddr": 4294968840,
    "paddr": 1544,
    "value": 1,
    "comment": "mach0_uuid_command",
    "format": "mach0_uuid_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968840,
        "value": 27,
        "label": "LC_UUID",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968844,
        "value": 24
      },
      {
        "name": "uuid",
        "type": "b",
        "offset": 4294968848,
        "value": [
          255,
          77,
          108,
          46,
          29,
          192,
          54,
          157,
          152,
          208,
          211,
          4,
          10,
          128,
          73,
          232
        ]
      }
    ]
  },
  {
    "name": "load_command_9_LC_VERSION_MIN_MACOSX",
    "vaddr": 4294968864,
    "paddr": 1568,
    "value": 1,
    "comment": "mach0_version_min_command",
    "format": "mach0_version_min_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968864,
        "value": 36,
        "label": "LC_VERSION_MIN_MACOSX",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968868,
        "value": 16
      },
      {
        "name": "version",
        "type": "x",
        "offset": 4294968872,
        "value": 657664
      },
      {
        "name": "reserved",
        "type": "x",
        "offset": 4294968876,
        "value": 657664
      }
    ]
  },
  {
    "name": "load_command_10_LC_SOURCE_VERSION",
    "vaddr": 4294968880,
    "paddr": 1584,
    "value": 1,
    "comment": "mach0_source_version_command",
    "format": "mach0_source_version_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968880,
        "value": 42,
        "label": "LC_SOURCE_VERSION",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968884,
        "value": 16
      },
      {
        "name": "version",
        "type": "q",
        "offset": 4294968888,
        "value": 252887674388480
      }
    ]
  },
  {
    "name": "load_command_11_LC_MAIN",
    "vaddr": 4294968896,
    "paddr": 1600,
    "value": 1,
    "comment": "mach0_entry_point_command",
    "format": "mach0_entry_point_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968896,
        "value": 2147483688,
        "label": "LC_MAIN",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968900,
        "value": 24
      },
      {
        "name": "entryoff",
        "type": "q",
        "offset": 4294968904,
        "value": 5080
      },
      {
        "name": "stacksize",
        "type": "q",
        "offset": 4294968912,
        "value": 0
      }
    ]
  },
  {
    "name": "load_command_12_LC_LOAD_DYLIB",
    "vaddr": 4294968920,
    "paddr": 1624,
    "value": 1,
    "comment": "mach0_dylib_command",
    "format": "mach0_dylib_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968920,
        "value": 12,
        "label": "LC_LOAD_DYLIB",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968924,
        "value": 48
      },
      {
        "name": "dylib",
        "type": "mach0_dylib",
        "offset": 4294968928,
        "value": [
          {
            "name": "name_offset",
            "type": "x",
            "offset": 4294968928,
            "value": 24
          },
          {
            "name": "timestamp",
            "type": "x",
            "offset": 4294968932,
            "value": 2
          },
          {
            "name": "current_version",
            "type": "x",
            "offset": 4294968936,
            "value": 65536
          },
          {
            "name": "compatibility_version",
            "type": "x",
            "offset": 4294968940,
            "value": 65536
          },
          {
            "name": "name",
            "type": "z",
            "offset": 4294968944,
            "value": "/usr/lib/libutil.dylib"
          }
        ]
      }
    ]
  },
  {
    "name": "load_command_13_LC_LOAD_DYLIB",
    "vaddr": 4294968968,
    "paddr": 1672,
    "value": 1,
    "comment": "mach0_dylib_command",
    "format": "mach0_dylib_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294968968,
        "value": 12,
        "label": "LC_LOAD_DYLIB",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294968972,
        "value": 56
      },
      {
        "name": "dylib",
        "type": "mach0_dylib",
        "offset": 4294968976,
        "value": [
          {
            "name": "name_offset",
            "type": "x",
            "offset": 4294968976,
            "value": 24
          },
          {
            "name": "timestamp",
            "type": "x",
            "offset": 4294968980,
            "value": 2
          },
          {
            "name": "current_version",
            "type": "x",
            "offset": 4294968984,
            "value": 328704
          },
          {
            "name": "compatibility_version",
            "type": "x",
            "offset": 4294968988,
            "value": 328704
          },
          {
            "name": "name",
            "type": "z",
            "offset": 4294968992,
            "value": "/usr/lib/libncurses.5.4.dylib"
          }
        ]
      }
    ]
  },
  {
    "name": "load_command_14_LC_LOAD_DYLIB",
    "vaddr": 4294969024,
    "paddr": 1728,
    "value": 1,
    "comment": "mach0_dylib_command",
    "format": "mach0_dylib_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294969024,
        "value": 12,
        "label": "LC_LOAD_DYLIB",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294969028,
        "value": 56
      },
      {
        "name": "dylib",
        "type": "mach0_dylib",
        "offset": 4294969032,
        "value": [
          {
            "name": "name_offset",
            "type": "x",
            "offset": 4294969032,
            "value": 24
          },
          {
            "name": "timestamp",
            "type": "x",
            "offset": 4294969036,
            "value": 2
          },
          {
            "name": "current_version",
            "type": "x",
            "offset": 4294969040,
            "value": 78446849
          },
          {
            "name": "compatibility_version",
            "type": "x",
            "offset": 4294969044,
            "value": 65536
          },
          {
            "name": "name",
            "type": "z",
            "offset": 4294969048,
            "value": "/usr/lib/libSystem.B.dylib"
          }
        ]
      }
    ]
  },
  {
    "name": "load_command_15_LC_FUNCTION_STARTS",
    "vaddr": 4294969080,
    "paddr": 1784,
    "value": 1,
    "comment": "mach0_function_starts_command",
    "format": "mach0_function_starts_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294969080,
        "value": 38,
        "label": "LC_FUNCTION_STARTS",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294969084,
        "value": 16
      },
      {
        "name": "offset",
        "type": "x",
        "offset": 4294969088,
        "value": 26088
      },
      {
        "name": "size",
        "type": "d",
        "offset": 4294969092,
        "value": 56
      }
    ]
  },
  {
    "name": "load_command_16_LC_DATA_IN_CODE",
    "vaddr": 4294969096,
    "paddr": 1800,
    "value": 1,
    "comment": "mach0_data_in_code_command",
    "format": "mach0_data_in_code_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294969096,
        "value": 41,
        "label": "LC_DATA_IN_CODE",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294969100,
        "value": 16
      },
      {
        "name": "offset",
        "type": "x",
        "offset": 4294969104,
        "value": 26144
      },
      {
        "name": "size",
        "type": "d",
        "offset": 4294969108,
        "value": 0
      }
    ]
  },
  {
    "name": "load_command_18_LC_CODE_SIGNATURE",
    "vaddr": 4294969128,
    "paddr": 1832,
    "value": 1,
    "comment": "mach0_code_signature_command",
    "format": "mach0_code_signature_command",
    "pf": [
      {
        "name": "cmd",
        "type": "E",
        "offset": 4294969128,
        "value": 29,
        "label": "LC_CODE_SIGNATURE",
        "enum": "mach0_load_command_type"
      },
      {
        "name": "cmdsize",
        "type": "d",
        "offset": 4294969132,
        "value": 16
      },
      {
        "name": "offset",
        "type": "x",
        "offset": 4294969136,
        "value": 29248
      },
      {
        "name": "size",
        "type": "d",
        "offset": 4294969140,
        "value": 5488
      }
    ]
  }
]
EOF
EXPECT_ERR=<<EOF
WARN: Relocs has not been applied. Please use `-e bin.relocs.apply=true` or `-e bin.cache=true` next time
EOF
RUN

