NAME=dbg.dcC+ds.swstep1
FILE=bins/elf/analysis/tiny-crackme-vm-x86_64
ARGS=-d
CMDS=<<EOF
e scr.color=0
e dbg.swstep=true
f times=5
(times_stop;?e Loop `?vi times`;f times=`?vi times-1`;?= times)
db 0x4000ce
dbC 0x4000ce .(times_stop)
dc
dk 9
EOF
EXPECT=<<EOF
Loop 5
Loop 4
Loop 3
Loop 2
Loop 1
EOF
RUN

NAME=dbg.dcC+ds.swstep2
FILE=bins/elf/analysis/tiny-crackme-vm-x86_64
ARGS=-d
CMDS=<<EOF
e scr.color=0
e dbg.swstep=true
e cmd.hitinfo=0
(break_rax;f reg_rax=`dr rax`;f test=`?vi reg_rax-0x31c0`;?= test)
db 0x4000ce
dbC 0x4000ce .(break_rax)
dc
dr rax
dr rip
dk 9
EOF
EXPECT=<<EOF
0x000031c0
0x004000ce
EOF
RUN

NAME=dbg.dcC+ds.swstep3
FILE=bins/elf/analysis/tiny-crackme-vm-x86_64
ARGS=-d
CMDS=<<EOF
e scr.color=0
e dbg.swstep=true
e cmd.hitinfo=0
(trace_rax;dr rax;f reg_rax=`dr rax`;f test=`?vi reg_rax-0x0440`;?= test)
db 0x4000ce
dbC 0x4000ce .(trace_rax)
dc
dk 9
EOF
EXPECT=<<EOF
0x00000000
0x00000220
0x000031c0
0x000033c2
0x00000249
0x00000440
EOF
RUN

NAME=dbg.dbd+dbe+dbj
FILE=bins/elf/analysis/x64-loop
ARGS=-d
CMDS=<<EOF
e scr.color=0
db 0x400523
db 0x40051a
dbj
dc
dr PC
dc
dr PC
dbd 0x400523
dc
dr PC
dbe 0x400523
dc
dr PC
EOF
EXPECT=<<EOF
[{"addr":4195619,"size":1,"perm":"--x","hw":false,"trace":false,"enabled":true,"valid":true,"data":"","cond":""},{"addr":4195610,"size":1,"perm":"--x","hw":false,"trace":false,"enabled":true,"valid":true,"data":"","cond":""}]
0x00400523
0x0040051a
0x0040051a
0x00400523
EOF
RUN


NAME=valid db
FILE=bins/elf/analysis/x64-loop
ARGS=-d
CMDS=<<EOF
e scr.color=0
db main
db~1[8]
EOF
EXPECT=<<EOF
valid
EOF
RUN

NAME=invalid db
FILE=bins/elf/analysis/x64-loop
ARGS=-d
CMDS=<<EOF
e scr.color=0
db 0x0
db~1[8]
EOF
EXPECT=<<EOF
invalid
EOF
RUN

NAME=dbH
FILE=bins/elf/analysis/x64-loop
ARGS=-d
CMDS=<<EOF
e scr.color=0
dbH main
db~1[5]
EOF
EXPECT=<<EOF
hw
EOF
RUN
