NAME=pdu prints help
CMDS=<<EOF
pdu~[0]:0
EOF
EXPECT=<<EOF
Usage:
EOF
RUN

NAME=pdu subcommand help
CMDS=<<EOF
pdua?
pduaj?
pdua
pduaj
?e ---
pduc?
pducj?
?e ---
pdui?
pduij?
pdui
pduij
?e ---
pduo?
pduoj?
pduo
pduoj
?e ---
pdus?
pdusj?
EOF
EXPECT=<<EOF
| pdua[j] [addr]  disassemble until address
| pdua[j] [addr]  disassemble until address
| pdua[j] [addr]  disassemble until address
| pdua[j] [addr]  disassemble until address
---
| pduc[j]  disassemble until call
| pduc[j]  disassemble until call
---
| pdui[j] [inst]  disassemble until instruction (e.g.: add esp, 0x20)
| pdui[j] [inst]  disassemble until instruction (e.g.: add esp, 0x20)
| pdui[j] [inst]  disassemble until instruction (e.g.: add esp, 0x20)
| pdui[j] [inst]  disassemble until instruction (e.g.: add esp, 0x20)
---
| pduo[j] [opcode]  disassemble until opcode (e.g.: mul)
| pduo[j] [opcode]  disassemble until opcode (e.g.: mul)
| pduo[j] [opcode]  disassemble until opcode (e.g.: mul)
| pduo[j] [opcode]  disassemble until opcode (e.g.: mul)
---
| pdus[j]  disassemble until syscall
| pdus[j]  disassemble until syscall
EOF
RUN

NAME=pdua
ARGS=-a x86 -b 64
CMDS=<<EOF
wx 5e4889e24883e4f05054
pdua 10
?e ----
s 4
pdua 10
EOF
EXPECT=<<EOF
            0x00000000      5e             pop rsi
            0x00000001      4889e2         mov rdx, rsp
            0x00000004      4883e4f0       and rsp, 0xfffffffffffffff0
            0x00000008      50             push rax
            0x00000009      54             push rsp
----
            0x00000004      4883e4f0       and rsp, 0xfffffffffffffff0
            0x00000008      50             push rax
            0x00000009      54             push rsp
EOF
RUN

NAME=pduc
ARGS=-a x86 -b 64
CMDS=<<EOF
wx 5e4889e24883e4f0e841424344
pduc
EOF
EXPECT=<<EOF
            0x00000000      5e             pop rsi
            0x00000001      4889e2         mov rdx, rsp
            0x00000004      4883e4f0       and rsp, 0xfffffffffffffff0
            0x00000008      e841424344     call 0x4443424e
EOF
RUN

NAME=pdui
ARGS=-a x86 -b 64
CMDS=<<EOF
e asm.arch=x86
wx 5e4889e24883e4f05054
pdui push rsp
EOF
EXPECT=<<EOF
            0x00000000      5e             pop rsi
            0x00000001      4889e2         mov rdx, rsp
            0x00000004      4883e4f0       and rsp, 0xfffffffffffffff0
            0x00000008      50             push rax
            0x00000009      54             push rsp
EOF
RUN

NAME=pduo
ARGS=-a x86 -b 64
CMDS=<<EOF
wx 5e4889e24883e4f05054
pduo push
EOF
EXPECT=<<EOF
            0x00000000      5e             pop rsi
            0x00000001      4889e2         mov rdx, rsp
            0x00000004      4883e4f0       and rsp, 0xfffffffffffffff0
            0x00000008      50             push rax
EOF
RUN

NAME=pduoj
ARGS=-a x86 -b 64
CMDS=<<EOF
wx 5e4889e24883e4f05054
pduoj push
EOF
EXPECT=<<EOF
[{"offset":0,"esil":"rsp,[8],8,rsp,+=,rsi,=","refptr":0,"fcn_addr":0,"fcn_last":0,"size":1,"opcode":"pop rsi","disasm":"pop rsi","bytes":"5e","family":"cpu","type":"pop","reloc":false,"type_num":14,"type2_num":0},{"offset":1,"esil":"rsp,rdx,=","refptr":0,"fcn_addr":0,"fcn_last":0,"size":3,"opcode":"mov rdx, rsp","disasm":"mov rdx, rsp","bytes":"4889e2","family":"cpu","type":"mov","reloc":false,"type_num":9,"type2_num":0},{"offset":4,"val":18446744073709551600,"esil":"18446744073709551600,rsp,&=,$z,zf,:=,$p,pf,:=,63,$s,sf,:=,0,cf,:=,0,of,:=","refptr":0,"fcn_addr":0,"fcn_last":0,"size":4,"opcode":"and rsp, 0xfffffffffffffff0","disasm":"and rsp, 0xfffffffffffffff0","bytes":"4883e4f0","family":"cpu","type":"and","reloc":false,"type_num":27,"type2_num":0},{"offset":8,"esil":"rax,8,rsp,-,=[8],8,rsp,-=","refptr":0,"fcn_addr":0,"fcn_last":0,"size":1,"opcode":"push rax","disasm":"push rax","bytes":"50","family":"cpu","type":"rpush","reloc":false,"type_num":268435468,"type2_num":0}]
EOF
RUN

NAME=pdus
ARGS=-a x86 -b 64
CMDS=<<EOF
wx 5e4889e24883e4f00f05
pdus
EOF
EXPECT=<<EOF
            0x00000000      5e             pop rsi
            0x00000001      4889e2         mov rdx, rsp
            0x00000004      4883e4f0       and rsp, 0xfffffffffffffff0
            0x00000008      0f05           syscall
EOF
RUN
