
NAME=auto entry (obj)
FILE=bins/elf/analysis/test.obj
CMDS=<<EOF
ie
EOF
EXPECT=<<EOF
[Entrypoints]

0 entrypoints
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

NAME=iee preinit
FILE=bins/elf/before-after-main
CMDS=<<EOF
iee~type=preinit
e asm.bytes=false
pd 1 @ 0x0804849f
EOF
EXPECT=<<EOF
vaddr=0x08048486 paddr=0x00000486 hvaddr=0x08049ed4 hpaddr=0x00000ed4 type=preinit
vaddr=0x0804849f paddr=0x0000049f hvaddr=0x08049ed8 hpaddr=0x00000ed8 type=preinit
            ;-- entry.preinit1:
            ;-- preinit2:
            0x0804849f      push ebp
EOF
RUN


NAME=iee* preinit
FILE=bins/elf/before-after-main
CMDS=iee*
EXPECT=<<EOF
fs+symbols
"f entry.preinit0 1 0x08048486"
"f entry.preinit0_hpaddr 1 0x00000ed4"
"s entry.preinit0"
"f entry.preinit1 1 0x0804849f"
"f entry.preinit1_hpaddr 1 0x00000ed8"
"s entry.preinit1"
"f entry.init0 1 0x08048480"
"f entry.init0_hpaddr 1 0x00000edc"
"s entry.init0"
"f entry.init1 1 0x080484b8"
"f entry.init1_hpaddr 1 0x00000ee0"
"s entry.init1"
"f entry.init2 1 0x080484d1"
"f entry.init2_hpaddr 1 0x00000ee4"
"s entry.init2"
"f entry.init3 1 0x080484ea"
"f entry.init3_hpaddr 1 0x00000ee8"
"s entry.init3"
"f entry.init4 1 0x08048503"
"f entry.init4_hpaddr 1 0x00000eec"
"s entry.init4"
"f entry.fini0 1 0x08048450"
"f entry.fini0_hpaddr 1 0x00000ef0"
"s entry.fini0"
"f entry.fini1 1 0x0804859c"
"f entry.fini1_hpaddr 1 0x00000ef4"
"s entry.fini1"
"f entry.fini2 1 0x080485b5"
"f entry.fini2_hpaddr 1 0x00000ef8"
"s entry.fini2"
"f entry.fini3 1 0x080485ce"
"f entry.fini3_hpaddr 1 0x00000efc"
"s entry.fini3"
"f entry.fini4 1 0x080485e7"
"f entry.fini4_hpaddr 1 0x00000f00"
"s entry.fini4"
fs-
EOF
RUN

NAME=auto entry (lib)
ARGS=-e io.cache=true
FILE=bins/elf/libverifyPass.so
CMDS=<<EOF
ie
EOF
EXPECT=<<EOF
[Entrypoints]
vaddr=0x00000f50 paddr=0x00000f50 haddr=0x00000018 hvaddr=0x00000018 type=program

1 entrypoints
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

NAME=auto entry (log.level test)
ARGS=-e io.cache=true -e log.level=6
FILE=bins/elf/libexploit.so
CMDS=<<EOF
ie
i~elf
EOF
EXPECT=<<EOF
[Entrypoints]
vaddr=0x00000d28 paddr=0x00000d28 haddr=0x00000018 hvaddr=0x00000018 type=program

1 entrypoints
file     bins/elf/libexploit.so
format   elf
bintype  elf
EOF
EXPECT_ERR=<<EOF
DEBUG: RCoreCmd: =!
DEBUG: Dynamic tag 16 not handled
DEBUG: Reloc type 23 not used for imports
DEBUG: Reloc type 23 not used for imports
DEBUG: Reloc type 23 not used for imports
DEBUG: Reloc type 23 not used for imports
DEBUG: bin object have no information
DEBUG: add dt.dyn.entry tag=3 value=0x0002fde8
DEBUG: add dt.dyn.entry tag=2 value=0x00000188
DEBUG: add dt.dyn.entry tag=23 value=0x00000940
DEBUG: add dt.dyn.entry tag=20 value=0x00000011
DEBUG: add dt.dyn.entry tag=17 value=0x000008b8
DEBUG: add dt.dyn.entry tag=18 value=0x00000088
DEBUG: add dt.dyn.entry tag=19 value=0x00000008
DEBUG: add dt.dyn.entry tag=1879048186 value=0x00000011
DEBUG: add dt.dyn.entry tag=6 value=0x000000b4
DEBUG: add dt.dyn.entry tag=11 value=0x00000010
DEBUG: add dt.dyn.entry tag=5 value=0x00000484
DEBUG: add dt.dyn.entry tag=10 value=0x000002a2
DEBUG: add dt.dyn.entry tag=4 value=0x00000728
DEBUG: add dt.dyn.entry tag=1 value=0x00000287
DEBUG: add dt.dyn.entry tag=1 value=0x0000028f
DEBUG: add dt.dyn.entry tag=1 value=0x00000298
DEBUG: add dt.dyn.entry tag=16 value=0x00000000
DEBUG: add dt.dyn.entry tag=30 value=0x00000002
ERROR: Cannot determine entrypoint, using 0x00000d28
DEBUG: (section .dynsym) Cd 4[244] @ 0xb4
DEBUG: RCoreCallAt(0x000000b4): Cd 4[244]
DEBUG: (cannot find opening [) in (244])
DEBUG: (section .dynstr) Css 674 @ 0x484
DEBUG: RCoreCallAt(0x00000484): Css 674
DEBUG: RCoreCmd: Cz@0x00000484
DEBUG: RCoreCmd: o;om
DEBUG: (section .hash) Cd 4[100] @ 0x728
DEBUG: RCoreCallAt(0x00000728): Cd 4[100]
DEBUG: (cannot find opening [) in (100])
DEBUG: (section .rel.plt) Cd 4[98] @ 0x940
DEBUG: RCoreCallAt(0x00000940): Cd 4[98]
DEBUG: (cannot find opening [) in (98])
DEBUG: (section .dynamic) Cd 4[48] @ 0x12000
DEBUG: RCoreCallAt(0x00012000): Cd 4[48]
DEBUG: (cannot find opening [) in (48])
DEBUG: (section .got) Cd 4[56] @ 0x2fdd8
DEBUG: RCoreCallAt(0x0002fdd8): Cd 4[56]
DEBUG: (cannot find opening [) in (56])
DEBUG: (section .dynsym) Cd 4[244] @ 0xb4
DEBUG: RCoreCallAt(0x000000b4): Cd 4[244]
DEBUG: (cannot find opening [) in (244])
DEBUG: (section .dynstr) Css 674 @ 0x484
DEBUG: RCoreCallAt(0x00000484): Css 674
DEBUG: RCoreCmd: Cz@0x00000484
DEBUG: RCoreCmd: o;om
DEBUG: (section .hash) Cd 4[100] @ 0x728
DEBUG: RCoreCallAt(0x00000728): Cd 4[100]
DEBUG: (cannot find opening [) in (100])
DEBUG: (section .rel.plt) Cd 4[98] @ 0x940
DEBUG: RCoreCallAt(0x00000940): Cd 4[98]
DEBUG: (cannot find opening [) in (98])
DEBUG: (section .dynamic) Cd 4[48] @ 0x12000
DEBUG: RCoreCallAt(0x00012000): Cd 4[48]
DEBUG: (cannot find opening [) in (48])
DEBUG: (section .got) Cd 4[56] @ 0x2fdd8
DEBUG: RCoreCallAt(0x0002fdd8): Cd 4[56]
DEBUG: (cannot find opening [) in (56])
WARN: Relocs has not been applied. Please use `-e bin.relocs.apply=true` or `-e bin.cache=true` next time
DEBUG: RCoreCmd: =!
DEBUG: RCoreCmd: ieq
DEBUG: RCoreCmd: ie
DEBUG: RCoreCmd: i~elf
EOF
RUN

NAME=auto entry (lib no e_entry)
ARGS=-e io.cache=true
FILE=bins/elf/libexploit.so
CMDS=<<EOF
ie
EOF
EXPECT=<<EOF
[Entrypoints]
vaddr=0x00000d28 paddr=0x00000d28 haddr=0x00000018 hvaddr=0x00000018 type=program

1 entrypoints
EOF
EXPECT_ERR=<<EOF
ERROR: Cannot determine entrypoint, using 0x00000d28
WARN: Relocs has not been applied. Please use `-e bin.relocs.apply=true` or `-e bin.cache=true` next time
EOF
RUN

NAME=iee for dt preinit
FILE=bins/elf/ieee.elf
CMDS=<<EOF
iee
EOF
EXPECT=<<EOF
[Constructors]
vaddr=0x00000740 paddr=0x00000740 hvaddr=0x0024dd88 hpaddr=0x0004dd88 type=init
vaddr=0x00000700 paddr=0x00000700 hvaddr=0x0024dd90 hpaddr=0x0004dd90 type=fini
vaddr=0x0000074a paddr=0x0000074a hvaddr=0x0004dd80 hpaddr=0x0004dd80 type=preinit

3 entrypoints
EOF
RUN
