NAME=pd asmdescribe on string
FILE=bins/mach0/mac-ls4
ARGS=-a arm -b64
CMDS=<<EOF
s 0x100003ac0
Csz
e asm.describe=1
pd 2
EOF
EXPECT=<<EOF
            0x100003ac0     .string "\xbf\n" ; len=3
            0x100003ac3      f9             unaligned
EOF
RUN

NAME=pd call sym bug
FILE=bins/mach0/hello-objc-arm
CMDS=<<EOF
e asm.lines.jmp=0
e asm.bytes=0
e asm.comments=0
s method.class.Test.callMeNot
pd 20~?NSLog
af
pd 20~?NSLog
EOF
EXPECT=<<EOF
1
1
EOF
RUN

NAME=pd+reloff+colors
FILE=bins/elf/analysis/ls-alxchk
CMDS=<<EOF
af
e asm.var.summary=0
e asm.addr.relto=func
pd 10
e scr.color=1
pd 10
EOF
EXPECT=<<EOF
/ 41: entry0 (int64_t arg1, void *stack_end);
|           ; arg int64_t arg1 @ rdx
|           ; arg void *stack_end @ xmm0
|           entry0                         31ed           xor ebp, ebp
|           entry0+0x2                     4989d1         mov r9, rdx  ; arg3
|           entry0+0x5                     5e             pop rsi
|           entry0+0x6                     4889e2         mov rdx, rsp
|           entry0+0x9                     4883e4f0       and rsp, 0xfffffffffffffff0
|           entry0+0xd                     50             push rax
|           entry0+0xe                     54             push rsp
|           entry0+0xf                     4c8b05e693..   mov r8, qword [reloc.fixup.UHH_] ; [0x1f220:8]=0x16ee0
|           entry0+0x16                    488b0de793..   mov rcx, qword [reloc.fixup.UHAWAVAUATSH8] ; [0x1f228:8]=0x16e60 ; "`n\x01"
|           entry0+0x1d                    488b3de893..   mov rdi, qword [reloc.fixup.UHAWAVAUATSHH] ; [0x1f230:8]=0x3bd0 main
[36m/[0m 41: [33mentry0[0m (int64_t arg1, void *stack_end);
[36m|[0m           [37m; [37marg [36mint64_t [33marg1 [32m@ rdx[0m
[36m|[0m           [37m; [37marg [36mvoid *[33mstack_end [32m@ xmm0[0m
[36m|[0m           [32mentry0[0m                          [33m31[36med[0m           [33mxor[37m ebp[0m,[37m ebp[0m[0m
[36m|[0m           [32mentry0[0m+0x2                      [33m49[36m89[36md1[0m         [36mmov[37m r9[0m,[37m rdx[0m[0m [37m; arg3[0m
[36m|[0m           [32mentry0[0m+0x5                      [33m5e[0m             [35mpop[37m rsi[0m[0m
[36m|[0m           [32mentry0[0m+0x6                      [33m48[36m89[36me2[0m         [36mmov[37m rdx[0m,[37m rsp[0m[0m
[36m|[0m           [32mentry0[0m+0x9                      [33m48[36m83[36me4[36mf0[0m       [33mand[37m rsp[0m,[33m[33m [32m0xfffffffffffffff0[0m[0m
[36m|[0m           [32mentry0[0m+0xd                      [33m50[0m             [35mpush[37m rax[0m[0m
[36m|[0m           [32mentry0[0m+0xe                      [33m54[0m             [35mpush[37m rsp[0m[0m
[36m|[0m           [32mentry0[0m+0xf                      [33m4c[36m8b[36m05[36me6[36m93[36m..   [36mmov[37m r8[0m,[33m qword[33m [0m[[33mreloc.fixup.UHH_[0m][37m[0m[31m [31m; [[31m0x1f220[31m:8]=0x16ee0[0m
[36m|[0m           [32mentry0[0m+0x16                     [33m48[36m8b[36m0d[36me7[36m93[36m..   [36mmov[37m rcx[0m,[33m qword[33m [0m[[33mreloc.fixup.UHAWAVAUATSH8[0m][37m[0m[31m [31m; [[31m0x1f228[31m:8]=0x16e60[31m [31m; "`n\x01"[0m
[36m|[0m           [32mentry0[0m+0x1d                     [33m48[36m8b[33m3d[36me8[36m93[36m..   [36mmov[37m rdi[0m,[33m qword[33m [0m[[33mreloc.fixup.UHAWAVAUATSHH[0m][37m[0m[31m [31m; [[31m0x1f230[31m:8]=0x3bd0 main[0m
EOF
RUN

NAME=pd flag without realname
FILE=malloc://512
ARGS=-a x86 -b 32
CMDS=<<EOF
e scr.color=0
e asm.bytes=0
e asm.comments=1
wx a100010000 @ 0
f first @ 0x100
f second @ 0x100
fN second base64:
pd 1 @ 0
EOF
EXPECT=<<EOF
            0x00000000      mov eax, dword [first]                     ; second
                                                                       ; [0x100:4]=0
EOF
RUN

NAME=pd arm cortex 0
FILE=-
ARGS=-a arm -b 16
CMDS=wx 80f30988; pi 1
EXPECT=<<EOF
invalid
EOF
RUN

NAME=pd arm cortex 1
FILE=-
ARGS=-a arm -b 16 -e asm.cpu=cortex
CMDS=wx 80f30988;pi 1
EXPECT=<<EOF
msr psp, r0
EOF
RUN

NAME=pd arm cortex 2
FILE=-
ARGS=-a arm -b 16
CMDS=e asm.cpu=cortex;wx 80f30988;pi 1
EXPECT=<<EOF
msr psp, r0
EOF
RUN

NAME=pd call sym bug
FILE=bins/mach0/hello-objc-arm
CMDS=<<EOF
e asm.lines.jmp=0
e asm.bytes=0
e asm.comments=0
s method.class.Test.callMeNot
# s+2
pi 2
EOF
EXPECT=<<EOF
push {r7, lr}
mov r7, sp
EOF
RUN

NAME=call fcn eip 32bit
FILE=bins/elf/analysis/ls-alxchk
CMDS=<<EOF
s 0x5e50
e asm.bits=32
af; afn eip
pd 1 @ 0x5f16~:0
e asm.lines.jmp=0
e asm.bytes=0
e asm.comments=0
EOF
EXPECT=<<EOF
            0x00005f16      e835ffffff     call fcn.00005e50
EOF
RUN

NAME=call fcn eip 64bit
FILE=bins/elf/analysis/ls-alxchk
BROKEN=1
CMDS=<<EOF
s 0x5e50
e asm.bits=64
af; afn eip
pd 1 @ 0x5f16~:0
e asm.lines.jmp=0
e asm.bytes=0
e asm.comments=0
EOF
EXPECT=<<EOF
|           0x00005f16      e835ffffff     call fcn.eip
EOF
RUN

NAME=call fcn rip 64bit
FILE=bins/elf/analysis/ls-alxchk
CMDS=<<EOF
s 0x5e50
e asm.bits=64
af; afn rip
pd 1 @ 0x5f16~:0
e asm.lines.jmp=0
e asm.bytes=0
e asm.comments=0
EOF
EXPECT=<<EOF
            0x00005f16      e835ffffff     call fcn.00005e50
EOF
RUN

NAME=lea edx bug segfault for x86 32bit #5710@radare2
FILE=malloc://128
CMDS=<<EOF
e asm.arch=x86
e asm.bits=32
e asm.lines.jmp=false
e asm.comments=false
pD@x:8d15d0830408
EOF
EXPECT=<<EOF
  0x00000000      8d15d0830408   lea edx, [0x80483d0]
EOF
RUN

NAME=p8@x
FILE=malloc://128
CMDS=<<EOF
e asm.comments=false
p8@x:8d15d0830408
EOF
EXPECT=<<EOF
8d15d0830408
EOF
RUN

NAME=px@x
FILE=malloc://128
CMDS=<<EOF
e asm.comments=false
e hex.header=false
px@x:8d15d0830408
EOF
EXPECT=<<EOF
0x00000000  8d15 d083 0408                           ......
EOF
RUN

NAME=size of function in elf x64 stub
FILE=bins/other/radiff2/hellocxx-osx-fat-intel_1
ARGS=-ax86 -b64
CMDS=<<EOF
s 0x100000dae
af
afi~^size[1]
EOF
EXPECT=<<EOF
6
EOF
RUN

NAME=crackme test
FILE=bins/elf/crackme
CMDS=<<EOF
pd 2
pi 2
EOF
EXPECT=<<EOF
            ;-- section..text:
            ;-- entry0:
            ;-- _start:
            0x004005c0      31ed           xor ebp, ebp                ; [14] -r-x section size 584 named .text
            0x004005c2      4989d1         mov r9, rdx
xor ebp, ebp
mov r9, rdx
EOF
RUN

NAME=indent asm.lines.fcn=0, asm.lines.jmp=1 for issue 9316
FILE=-
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
af+ 0 test
e asm.lines.fcn=0
e asm.lines.jmp=1
pd 2
EOF
EXPECT=<<EOF
0: test ();
          0x00000000      0000           add byte [rax], al
          0x00000002      0000           add byte [rax], al
EOF
RUN

NAME=indent asm.lines.fcn=1, asm.lines.jmp=0 for issue 9316
FILE=-
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
af+ 0 test
e asm.lines.fcn=1
e asm.lines.jmp=0
pd 2
EOF
EXPECT=<<EOF
/ 0: test ();
  0x00000000      0000           add byte [rax], al
  0x00000002      0000           add byte [rax], al
EOF
RUN

NAME=asm.flgoff indent
FILE=bins/elf/crackme0x05
CMDS=<<EOF
e asm.flags.offset=1
s sym.check
pd 1
EOF
EXPECT=<<EOF
            0x080484c8  ;-- check:
            0x080484c8      55             push ebp
EOF
RUN

NAME=invalid pid and pdi
FILE=bins/mach0/ls-osx-x86_64
# BROKEN=1
CMDS=<<EOF
pdi 270~invalid
?e ----
pid 270~invalid
pd 1
EOF
EXPECT=<<EOF
----
            ;-- main:
            ;-- entry0:
            ;-- func.1000013d8:
            0x1000013d8      55             push rbp
EOF
RUN

NAME=asm.tabs.once
FILE=bins/mach0/ls-osx-x86_64
CMDS=<<EOF
e asm.tabs=8
e asm.tabs.once=true
e asm.bytes=false
e asm.lines=false
pd 5
pdJ 3~{}
EOF
EXPECT=<<EOF
;-- main:
;-- entry0:
;-- func.1000013d8:
0x1000013d8      push     rbp
0x1000013d9      mov      rbp, rsp
0x1000013dc      push     r15
0x1000013de      push     r14
0x1000013e0      push     r13
[
  {
    "addr": 4294972376,
    "text": ";-- main:"
  },
  {
    "addr": 4294972376,
    "text": ";-- entry0:"
  },
  {
    "addr": 4294972376,
    "text": ";-- func.1000013d8:"
  },
  {
    "addr": 4294972376,
    "text": "0x1000013d8      push     rbp"
  },
  {
    "addr": 4294972377,
    "text": "0x1000013d9      mov      rbp, rsp"
  },
  {
    "addr": 4294972380,
    "text": "0x1000013dc      push     r15"
  }
]
EOF
RUN

NAME=pdi negative count without analysis
FILE=malloc://32
ARGS=-a arm -e asm.bits=64
CMDS=<<EOF
wx 1e0080d2e50300aa1f2003d5c0035fd6
s 8
pdi -2
EOF
EXPECT=<<EOF
0x00000000             1e0080d2  mov x30, 0
0x00000004             e50300aa  mov x5, x0
EOF
RUN

NAME=pdi negative count with invalid instruction in window
FILE=malloc://64
ARGS=-a arm -e asm.bits=64
CMDS=<<EOF
b 64
wow 1f2003d5
wx ffffffff @ 0x24
s 0x40
pdi -9
EOF
EXPECT=<<EOF
0x0000001c             1f2003d5  nop
0x00000020             1f2003d5  nop
0x00000024             ffffffff  invalid
0x00000028             1f2003d5  nop
0x0000002c             1f2003d5  nop
0x00000030             1f2003d5  nop
0x00000034             1f2003d5  nop
0x00000038             1f2003d5  nop
0x0000003c             1f2003d5  nop
EOF
RUN

NAME=pdi negative count near start of file
FILE=malloc://64
ARGS=-a arm -e asm.bits=64
CMDS=<<EOF
b 64
wow 1f2003d5
s 8
pdi -4
EOF
EXPECT=<<EOF
0x00000000             1f2003d5  nop
0x00000004             1f2003d5  nop
0x00000008             1f2003d5  nop
0x0000000c             1f2003d5  nop
EOF
RUN

NAME=pd negative count near start of file does not wrap around
FILE=malloc://64
ARGS=-a arm -e asm.bits=64
CMDS=<<EOF
b 64
wow 1f2003d5
s 8
pd -4
EOF
EXPECT=<<EOF
            0x00000000      1f2003d5       nop
            0x00000004      1f2003d5       nop
            0x00000008      1f2003d5       nop
            0x0000000c      1f2003d5       nop
EOF
RUN

NAME=pi negative count at the very start of the file shows the forward window like pd
FILE=malloc://64
ARGS=-a arm -e asm.bits=64
CMDS=<<EOF
b 64
wow 1f2003d5
s 0
e asm.lines=0
pi -4
EOF
EXPECT=<<EOF
nop
nop
nop
nop
EOF
RUN
