NAME=sections list
FILE=bins/elf/analysis/main_wrong_sect
CMDS=iS;iSS
EXPECT=<<EOF
     paddr  size      vaddr vsize align perm name               type       flags         
-----------------------------------------------------------------------------------------
0x00000000   0x0 ----------   0x0   0x0 ----                    NULL       
0x00000200  0x1c 0x00404500  0x1c   0x0 -r-- .interp            PROGBITS   alloc
0x0000021c  0x20 0x0040021c  0x20   0x0 -r-- .note.ABI-tag      NOTE       alloc
0x0000023c  0x24 0x0040023c  0x24   0x0 -r-- .note.gnu.build-id NOTE       alloc
0x00000260  0x1c 0x00400260  0x1c   0x0 -r-- .gnu.hash          GNU_HASH   alloc
0x00000280  0x60 0x00400280  0x60   0x0 -r-- .dynsym            DYNSYM     alloc
0x000002e0  0x3d 0x004002e0  0x3d   0x0 -r-- .dynstr            STRTAB     alloc
0x0000031e   0x8 0x0040031e   0x8   0x0 -r-- .gnu.version       VERSYM     alloc
0x00000328  0x20 0x00400328  0x20   0x0 -r-- .gnu.version_r     VERNEED    alloc
0x00000348  0x18 0x00400348  0x18   0x0 -r-- .rela.dyn          RELA       alloc
0x00000360  0x48 0x00400360  0x48   0x0 -r-- .rela.plt          RELA       alloc
0x000003a8  0x1a 0x004003a8  0x1a   0x0 -r-x .init              PROGBITS   alloc,execute
0x000003d0  0x40 0x004003d0  0x40   0x0 -r-x .plt               PROGBITS   alloc,execute
0x00000410 0x1a2 0x00410570 0x1a2   0x0 -r-x .text              PROGBITS   alloc,execute
0x000005b4   0x9 0x004005b4   0x9   0x0 -r-x .fini              PROGBITS   alloc,execute
0x000005c0  0x10 0x004005c0  0x10   0x0 -r-- .rodata            PROGBITS   alloc
0x000005d0  0x34 0x004005d0  0x34   0x0 -r-- .eh_frame_hdr      PROGBITS   alloc
0x00000608  0xd4 0x00400608  0xd4   0x0 -r-- .eh_frame          PROGBITS   alloc
0x000006e0   0x8 0x006006e0   0x8   0x0 -rw- .init_array        INIT_ARRAY write,alloc
0x000006e8   0x8 0x006006e8   0x8   0x0 -rw- .fini_array        FINI_ARRAY write,alloc
0x000006f0   0x8 0x006006f0   0x8   0x0 -rw- .jcr               PROGBITS   write,alloc
0x000006f8 0x1d0 0x006006f8 0x1d0   0x0 -rw- .dynamic           DYNAMIC    write,alloc
0x000008c8   0x8 0x006008c8   0x8   0x0 -rw- .got               PROGBITS   write,alloc
0x000008d0  0x30 0x006008d0  0x30   0x0 -rw- .got.plt           PROGBITS   write,alloc
0x00000900  0x10 0x00600900  0x10   0x0 -rw- .data              PROGBITS   write,alloc
0x00000910   0x0 0x00600910   0x8   0x0 -rw- .bss               NOBITS     write,alloc
0x00000910  0x22 ----------  0x22   0x0 ---- .comment           PROGBITS   merge,strings
0x00000940  0xd0 ----------  0xd0   0x0 ---- .debug_aranges     PROGBITS   
0x00000a10 0x188 ---------- 0x188   0x0 ---- .debug_info        PROGBITS   
0x00000b98  0x76 ----------  0x76   0x0 ---- .debug_abbrev      PROGBITS   
0x00000c0e 0x149 ---------- 0x149   0x0 ---- .debug_line        PROGBITS   
0x00000d57  0x8a ----------  0x8a   0x0 ---- .debug_str         PROGBITS   merge,strings
0x00000df0  0x80 ----------  0x80   0x0 ---- .debug_ranges      PROGBITS   
0x00000e70 0x156 ---------- 0x156   0x0 ---- .shstrtab          STRTAB     
0x000018c8 0x6d8 ---------- 0x6d8   0x0 ---- .symtab            SYMTAB     
0x00001fa0 0x23a ---------- 0x23a   0x0 ---- .strtab            STRTAB     
     paddr  size      vaddr vsize    align perm name         
-------------------------------------------------------------
0x00000040 0x1c0 0x00400040 0x1c0      0x8 -r-x PHDR
0x00000200  0x1c 0x00400200  0x1c      0x1 -r-- INTERP
0x00000000 0x6dc 0x00400000 0x6dc 0x200000 -r-x LOAD0
0x000006e0 0x230 0x006006e0 0x238 0x200000 -rw- LOAD1
0x000006f8 0x1d0 0x006006f8 0x1d0      0x8 -rw- DYNAMIC
0x0000021c  0x44 0x0040021c  0x44      0x4 -r-- NOTE
0x000005d0  0x34 0x004005d0  0x34      0x4 -r-- GNU_EH_FRAME
0x00000000   0x0 0x00000000   0x0     0x10 -rw- GNU_STACK
0x00000000  0x40 0x00400000  0x40      0x0 -rw- ehdr
EOF
RUN

NAME=section text start (not mapped)
FILE=bins/elf/analysis/main_wrong_sect
CMDS=%v section..text
EXPECT=<<EOF
0x410570
EOF
RUN

NAME=only phdrs mapped
FILE=bins/elf/analysis/main_wrong_sect
CMDS=p8 10 @ section..text
EXPECT=<<EOF
ffffffffffffffffffff
EOF
RUN

NAME=also map ehdr if ET_REL
FILE=bins/elf/pngrutil_o
CMDS=oml
EXPECT=<<EOF
 1 fd: 4 +0x00000000 0x0800870c - 0x080090c7 r-- vmap.reloc-targets
 2 fd: 5 +0x00000034 0x08000034 * 0x080055c7 r-x vmap..text
 3 fd: 3 +0x00007328 0x08007328 - 0x0800852f --x fmap..rel.text
 4 fd: 5 +0x000055c8 0x080055c8 - 0x0800642b r-- vmap..rodata
 5 fd: 3 +0x00008530 0x08008530 - 0x0800858f --- fmap..rel.rodata
 6 fd: 3 +0x0000642c 0x0800642c - 0x08006461 --- fmap..comment
 7 fd: 5 +0x00006464 0x08006464 - 0x080068cb r-- vmap..eh_frame
 8 fd: 3 +0x00008590 0x08008590 - 0x0800869f --- fmap..rel.eh_frame
 9 fd: 3 +0x000086a0 0x080086a0 - 0x08008702 --- fmap..shstrtab
10 fd: 3 +0x000068cc 0x080068cc - 0x08006e5b --- fmap..symtab
11 fd: 3 +0x00006e5c 0x08006e5c - 0x08007325 --- fmap..strtab
12 fd: 3 +0x00000000 0x08000000 - 0x08000033 r-- fmap.ehdr
EOF
RUN

NAME=true binary invalid section offset
FILE=bins/elf/true-invalid-section-offset
CMDS=iS
EXPECT=<<EOF
paddr size vaddr vsize align perm name type flags 
--------------------------------------------------
EOF
RUN

NAME=disable sections load
FILE=bins/elf/analysis/hello-linux-x86_64
ARGS=-e elf.load.sections=false
CMDS=iS
EXPECT=<<EOF
     paddr size      vaddr vsize align perm name      type flags 
-----------------------------------------------------------------
0x000008d0  0x0 0x006008d0   0x0   0x0 ---- .got.plt  NULL 
0x00000348 0x18 0x00400348  0x18   0x0 ---- .rela.dyn NULL 
0x00000360 0x48 0x00400360  0x48   0x0 ---- .rela.plt NULL 
EOF
RUN

NAME=disable sections checks
FILE=bins/elf/libmemalloc-dump-mem
ARGS=-e elf.checks.sections=false
CMDS=iS
EXPECT=<<EOF
     paddr       size      vaddr      vsize align perm name      type              flags                                                                    
------------------------------------------------------------------------------------------------------------------------------------------------------------
0x67006570 0x6d007570 ---------- 0x6d007570   0x0 --w- invalid0  LOPROC+0x036f706d write,strings,info,TLS
0x6568206d 0x6c007061 ---------- 0x6c007061   0x0 ---x invalid1  0x206b6361        execute,merge,strings,info,extra_os_processing_reqd,group,TLS,compressed
0x61705f65 0x6e696464 ---------- 0x6e696464   0x0 --wx invalid2  LOPROC+0x0475706d write,execute,strings,info,extra_os_processing_reqd,group,TLS,compressed
0x65757274 0x6f207700 ---------- 0x6f207700   0x0 --wx invalid3  0x6d5f6266        write,execute,strings,info,extra_os_processing_reqd,TLS,compressed
0x68746469 0x20736920 0x77007461 0x20736920   0x0 -r-x invalid4  0x20323156        alloc,execute,strings,info,extra_os_processing_reqd,group,TLS,compressed
0x66754220 0x73726566 0x3a732500 0x73726566   0x0 -r-- invalid5  0x6f662050        alloc,merge,strings,info,extra_os_processing_reqd,TLS,compressed
0x2020424f 0x20202020 0x4c425f54 0x20202020   0x0 -rwx invalid6  0x465f4c45        write,alloc,execute,info,group
0x313d3d74 0x6e750020 0x68676965 0x6e750020   0x0 -r-x invalid7  0x61682074        alloc,execute,merge,strings,info,extra_os_processing_reqd,TLS
0x6c61203a 0x61636f6c ---------- 0x61636f6c   0x0 ---- invalid8  0x3a74616d        strings
0x69537265 0x6e41657a 0x66667542 0x6e41657a   0x0 -r-- invalid9  0x300726f         alloc,extra_os_processing_reqd,group,TLS
0x00000000        0x0 ----------        0x0   0x0 ---- invalid10 LOPROC+0x02656666 
0x00000000        0x0 ----------        0x0   0x0 ---- invalid11 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid12 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid13 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid14 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid15 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid16 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid17 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid18 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid19 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid20 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid21 NULL              
0x00000000        0x0 ----------        0x0   0x0 ---- invalid22 NULL              
EOF
EXPECT_ERR=<<EOF
WARNING: Invalid strtab at 0x0 (check array failed).
WARNING: Failed to initialize section string table.
EOF
RUN

NAME=disable segments checks
FILE=bins/elf/analysis/tiny.elf
ARGS=-e elf.checks.segments=false
CMDS=iS
EXPECT=<<EOF
paddr size vaddr vsize align perm name type flags 
--------------------------------------------------
EOF
EXPECT_ERR=<<EOF
WARNING: Failed to read ELF header (e_phnum).
WARNING: Failed to read ELF header (e_shentsize).
WARNING: Failed to read ELF header (e_shnum).
WARNING: Failed to read ELF header (e_shstrndx).
WARNING: The binary seems to be a tiny elf (45 bytes). Reload e_phnum value.
WARNING: Failed to initialize section header.
EOF
RUN

NAME=more than 65535 segments
FILE=gzip://bins/elf/core/more-than-65535-segments.gz
CMDS=iSS~?
TIMEOUT=2040
EXPECT=<<EOF
131073
EOF
RUN

NAME=no section headers - stripped
FILE=bins/elf/analysis/no_sections.elf
CMDS=iIj~{.stripped}
EXPECT=<<EOF
true
EOF
RUN

NAME=OpenBSD nobtcfi
FILE=bins/elf/openbsd-arm64-nobtcfi
CMDS=<<EOF
i~^nobtcfi
ij~{.bin.nobtcfi}
iSS~OPENBSD
EOF
EXPECT=<<EOF
nobtcfi  true
true
0x00000b58  0x30 0x00020b58  0x30     0x8 -rw- OPENBSD_RANDOMIZE
0x00000000   0x0 0x00000000   0x0     0x0 ---x OPENBSD_NOBTCFI
EOF
RUN
