NAME=Printing il statements in various formats
FILE=bins/elf/emulateme.arm32
CMDS=<<EOF
s sym.decrypt
echo -- oneline
aoi 5
echo -- pretty
aoip 5
echo -- graph
agI
EOF
EXPECT=<<EOF
-- oneline
0x10468 (seq (set sp (- (var sp) (bv 32 0x4))) (storew 0 (var sp) (var r11)))
0x1046c (set r11 (+ (var sp) (bv 32 0x0)))
0x10470 (set sp (- (var sp) (bv 32 0x1c)))
0x10474 (storew 0 (- (var r11) (bv 32 0x18)) (var r0))
0x10478 (set r3 (bv 32 0x0))
-- pretty
0x10468
(seq
  (set sp
    (-
      (var sp)
      (bv 32 0x4)))
  (storew 0
    (var sp)
    (var r11)))
0x1046c
(set r11
  (+
    (var sp)
    (bv 32 0x0)))
0x10470
(set sp
  (-
    (var sp)
    (bv 32 0x1c)))
0x10474
(storew 0
  (-
    (var r11)
    (bv 32 0x18))
  (var r0))
0x10478
(set r3
  (bv 32 0x0))
-- graph
               .----------------------.
               |  str fp, [sp, #-4]!  |
               `----------------------'
                     v v
                     | |
             .-------' |
             |         '------------.
             |                      |
         .-----------.          .-------------.
         |  set: sp  |          |  storew: 0  |
         `-----------'          `-------------'
             v                        v v
             |                        | |
             |               .--------' |
             |               |          '----.
             |               |               |
         .-----------.   .-----------.   .------------.
         |  sub      |   |  var: sp  |   |  var: r11  |
         `-----------'   `-----------'   `------------'
               v v
               | |
    .----------' |
    |            '--.
    |               |
.-----------.   .--------------.
|  var: sp  |   |  bv: 32 0x4  |
`-----------'   `--------------'
EOF
RUN

NAME=arm cmp
FILE=malloc://0x100
ARGS=-aarm -b32
CMDS=<<EOF
wx 0f0053e3
aezi
ar r3=0
echo -- 0x0 - 0xf
aezs
ar 1
echo -- 0xf - 0xf
ar pc=0
ar r3=0xf
aezs
ar 1
echo -- 0x10 - 0xf
ar pc=0
ar r3=0x10
aezs
ar 1
EOF
EXPECT=<<EOF
-- 0x0 - 0xf
tf = 0x0
ef = 0x0
jf = 0x0
qf = 0x0
vf = 0x0
cf = 0x0
zf = 0x0
nf = 0x1
-- 0xf - 0xf
tf = 0x0
ef = 0x0
jf = 0x0
qf = 0x0
vf = 0x0
cf = 0x1
zf = 0x1
nf = 0x0
-- 0x10 - 0xf
tf = 0x0
ef = 0x0
jf = 0x0
qf = 0x0
vf = 0x0
cf = 0x1
zf = 0x0
nf = 0x0
EOF
RUN

NAME=emulateme
FILE=bins/elf/emulateme.arm32
TIMEOUT=30
CMDS=<<EOF
s sym.decrypt
e asm.bits=32
aezi
o malloc://0x1000 0x40000
o malloc://0x10 0x50000
oC 0x10 @ obj.seckrit   # New file mapping from 0x0-0xf
omb. obj.seckrit @ 0x0
w AnyColourYouLike @ 0x50000
ar sp=0x41000
ar r0=0x50000
aezsu 0x00010594
ps @ obj.seckrit
EOF
EXPECT=<<EOF
Hello from RzIL!
EOF
EXPECT_ERR=
RUN

NAME=arm sdiv
FILE=malloc://0x100
ARGS=-aarm -b32
CMDS=<<EOF
wx 10f110e7
aezi
ar r0=42
ar r1=5
echo -- 42 / 5
aezs
ar r0
echo -- 42 / 0
ar pc=0
ar r0=42
ar r1=0
aezs
ar r0
echo -- 0 / 0
ar pc=0
ar r0=0
ar r1=0
aezs
ar r0
echo -- -2^31 / -1
ar pc=0
ar r0=0x80000000
ar r1=0xffffffff
aezs
ar r0
echo -- -42 / 5
ar pc=0
ar r0=0xffffffd6
ar r1=5
aezs
ar r0
echo -- -42 / -5
ar pc=0
ar r0=0xffffffd6
ar r1=0xfffffffb
aezs
ar r0
EOF
EXPECT=<<EOF
-- 42 / 5
r0 = 0x00000008
-- 42 / 0
r0 = 0x00000000
-- 0 / 0
r0 = 0x00000000
-- -2^31 / -1
r0 = 0x80000000
-- -42 / 5
r0 = 0xfffffff8
-- -42 / -5
r0 = 0x00000008
EOF
RUN

NAME=arm udiv
FILE=malloc://0x100
ARGS=-aarm -b32
CMDS=<<EOF
wx 10f130e7
aezi
ar r0=42
ar r1=5
echo -- 42 / 5
aezs
ar r0
echo -- 42 / 0
ar pc=0
ar r0=42
ar r1=0
aezs
ar r0
echo -- 0 / 0
ar pc=0
ar r0=0
ar r1=0
aezs
ar r0
echo -- -2^31 / -1
ar pc=0
ar r0=0x80000000
ar r1=0xffffffff
aezs
ar r0
echo -- -42 / 5
ar pc=0
ar r0=0xffffffd6
ar r1=5
aezs
ar r0
echo -- -42 / -5
ar pc=0
ar r0=0xffffffd6
ar r1=0xfffffffb
aezs
ar r0
EOF
EXPECT=<<EOF
-- 42 / 5
r0 = 0x00000008
-- 42 / 0
r0 = 0x00000000
-- 0 / 0
r0 = 0x00000000
-- -2^31 / -1
r0 = 0x00000000
-- -42 / 5
r0 = 0x3333332a
-- -42 / -5
r0 = 0x00000000
EOF
TIMEOUT=10
RUN

NAME=emulateme_vfp
FILE=bins/elf/emulateme_vfp.arm32
TIMEOUT=30
CMDS=<<EOF
o malloc://0x1000 0x40000
o malloc://0x10 0x50000
# `o` resets the cpu for analysis.cpu
s main
e asm.bits=32
e asm.cpu=v8
aezi
e io.cache=1
ar sp=0x41000
aezsu 0x10548 # after vsub
ar d7
aezsu 0x10554 # after vmul
ar d7
aezs # after vadd
ar d7
aezs # after vcvt
ar d16
aezsu 0x1058c # before printf
ar r2
ar r3
pxq 16 @ sp
EOF
EXPECT=<<EOF
d7 = 0x370637bd40acccbc
d7 = 0x383531a640acccbc
d7 = 0x40accd1740acccbc
d16 = 0x401599a2e0000000
r2 = 0xa0000000
r3 = 0x40159999
0x00040fd0  0x3ee0c6f7a0000000  0x401599a2e0000000   .......>.......@
EOF
EXPECT_ERR=
RUN
