NAME=dbg.dc+ds.swstep
FILE=bins/elf/analysis/elf-nx
ARGS=-d
CMDS=<<EOF
e scr.color=0
e dbg.swstep=true
s 0
db @ entry0
dc
db- @ entry0
dr PC
ds
dr PC
p8 1@ sym.main
EOF
EXPECT=<<EOF
eip = 0x080482d0
eip = 0x080482d2
55
EOF
RUN

NAME=dbg.dc+ds.swstep2
FILE=bins/elf/analysis/x86-helloworld-gcc
ARGS=-d
CMDS=<<EOF
e scr.color=0
e dbg.swstep=true
db @ sym.main
dc
dr PC
ds
dr PC
p8 1@ sym.main
EOF
EXPECT=<<EOF
eip = 0x08048400
eip = 0x08048401
55
EOF
RUN

NAME=dbg.dc+ds.hwstep
FILE=bins/elf/analysis/elf-nx
ARGS=-d
CMDS=<<EOF
e scr.color=0
e dbg.swstep=false
s 0
db @ entry0
dc
db- @ entry0
dr PC
ds
dr PC
p8 1@ sym.main
EOF
EXPECT=<<EOF
eip = 0x080482d0
eip = 0x080482d2
55
EOF
RUN

NAME=dbg.dc+ds.hwstep2
FILE=bins/elf/analysis/x86-helloworld-gcc
ARGS=-d
CMDS=<<EOF
e scr.color=0
e dbg.swstep=false
db @ sym.main
dc
dr PC
ds
dr PC
p8 1@ sym.main
EOF
EXPECT=<<EOF
eip = 0x08048400
eip = 0x08048401
55
EOF
RUN

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;echo Loop `%vi times`;f+ times @ `%vi times-1`;%= times)
db @ 0x4000ce
dbC .(times_stop) @ 0x4000ce
dc
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 @ `drq rax`;f+ test @ `%vi reg_rax-0x31c0`;%= test)
db @ 0x4000ce
dbC .(break_rax) @ 0x4000ce
dc
dr rax
dr rip
EOF
EXPECT=<<EOF
rax = 0x00000000000031c0
rip = 0x00000000004000ce
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 @ `drq rax`;f+ test @ `%vi reg_rax-0x0440`;%= test)
db @ 0x4000ce
dbC .(trace_rax) @ 0x4000ce
dc
EOF
EXPECT=<<EOF
rax = 0x0000000000000000
rax = 0x0000000000000220
rax = 0x00000000000031c0
rax = 0x00000000000033c2
rax = 0x0000000000000249
rax = 0x0000000000000440
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
dblj
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":""}]
rip = 0x0000000000400523
rip = 0x000000000040051a
rip = 0x000000000040051a
rip = 0x0000000000400523
EOF
RUN

NAME=dbg.dc+db
FILE=bins/elf/analysis/x86-helloworld-gcc
ARGS=-d
CMDS=<<EOF
e dbg.swstep=true
e scr.null=true
db @ entry0
dc
dc
s entry0
e scr.null=false
p8 4
EOF
EXPECT=<<EOF
Hello world!
31ed5e89
EOF
RUN

NAME=valid db
FILE=bins/elf/analysis/x64-loop
ARGS=-d
CMDS=<<EOF
e scr.color=0
db @ main
dbl:valid~:2
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
dbl:valid~:2
EOF
EXPECT=<<EOF
invalid
EOF
RUN

NAME=dbg.bp_remove_index
FILE=bins/elf/analysis/x86-helloworld-gcc
ARGS=-d
CMDS=<<EOF
db @ main
db @ main+1
db @ main+2
db @ main+4
dbil~[0,2]
db- @@c:dblq
dbil
db @ main
db @ main+1
dbi- 1
echo ----------
dbil~[0,2]
dbi- 0
dbil~[0,2]
EOF
EXPECT=<<EOF
0 E:1
1 E:1
2 E:1
3 E:1
----------
0 E:1
EOF
RUN

NAME=dbH
FILE=bins/elf/analysis/x64-loop
ARGS=-d
CMDS=<<EOF
e scr.color=0
dbH @ main
dbl:hwsw~:2
EOF
EXPECT=<<EOF
hw
EOF
RUN

NAME=read core->block on short move
FILE=bins/elf/analysis/x64-loop
ARGS=-d
CMDS=<<EOF
e scr.color=0 asm.offset=false asm.flags=false asm.functions=false asm.lines=false asm.fcn.size=false asm.comments=false asm.debuginfo=false asm.indent=false
dcu main
pd 5
dbH @i:2
dc
pd 5
EOF
EXPECT=<<EOF
     push  rbp
     mov   rbp, rsp
     sub   rsp, 0x20
     mov   dword [rbp - 0x14], edi
     mov   qword [rbp - 0x20], rsi
b    sub   rsp, 0x20
     mov   dword [rbp - 0x14], edi
     mov   qword [rbp - 0x20], rsi
     mov   dword [rbp - 4], 0
     jmp   0x400523
EOF
RUN
