NAME=pxr4
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
woe 1 255
s+11
b 8
pxr8
pxr4
pxr2
pxr1
b 4
pxr8
pxr4
pxr2
pxr1
b 2
pxr8
pxr4
pxr2
pxr1
pxr2
b 1
pxr8
pxr4
pxr2
pxr1
EOF
EXPECT=<<EOF
0x0000000b 0x0101010101010101   ........
0x0000000b 0x01010101  .... 16843009
0x0000000f 0x01010101  .... 16843009
0x0000000b 0101  .. 257 R W X 'add byte [rax], al'
0x0000000d 0101  .. 257 R W X 'add byte [rax], al'
0x0000000f 0101  .. 257 R W X 'add byte [rax], al'
0x00000011 0101  .. 257 R W X 'add byte [rax], al'
- offset -    0 0
0x0000000b 001 .
0x0000000c 001 .
0x0000000d 001 .
0x0000000e 001 .
0x0000000f 001 .
0x00000010 001 .
0x00000011 001 .
0x00000012 001 .
0x0000000b 0x0000000001010101   ....
0x0000000b 0x01010101  .... 16843009
0x0000000b 0101  .. 257 R W X 'add byte [rax], al'
0x0000000d 0101  .. 257 R W X 'add byte [rax], al'
- offset -    0 0
0x0000000b 001 .
0x0000000c 001 .
0x0000000d 001 .
0x0000000e 001 .
0x0000000b 0x0000000000000101   ..
0x0000000b 0x00000101  ..
0x0000000b 0101  .. 257 R W X 'add byte [rax], al'
- offset -    0 0
0x0000000b 001 .
0x0000000c 001 .
0x0000000b 0101  .. 257 R W X 'add byte [rax], al'
0x0000000b 0x0000000000000001   .
0x0000000b 0x00000001  .
0x0000000b 01    .
- offset -    0 0
0x0000000b 001 .
EOF
RUN

NAME=px 10
FILE=malloc://1024
CMDS=wx 90909090909090909090 ; px 10
EXPECT=<<EOF
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000000  9090 9090 9090 9090 9090                 ..........
EOF
RUN

NAME=px -10
FILE=malloc://1024
CMDS=wx 90909090909090909090 ; s 10 ; px -10
EXPECT=<<EOF
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000000  9090 9090 9090 9090 9090                 ..........
EOF
RUN

NAME=pxd 16
FILE=malloc://1024
CMDS=<<EOF
wx 1020ffff30400000
pxd 16
EOF
EXPECT=<<EOF
- offset -    0  1   2  3   4  5   6  7   8  9   A  B   C  D   E  F  0123456789ABCDEF
0x00000000         -57328         16432             0             0  . ..0@..........
EOF
RUN

NAME=pxd 8
FILE=malloc://1024
CMDS=<<EOF
wx 1020ffff30400000
pxd 8
EOF
EXPECT=<<EOF
- offset -    0  1   2  3   4  5   6  7   8  9   A  B   C  D   E  F  0123456789ABCDEF
0x00000000         -57328         16432                              . ..0@..
EOF
RUN

NAME=io.unalloc, io.unalloc.ch and pxc
FILE=bins/elf/analysis/tiny.elf
CMDS=<<EOF
. scripts/palette.r2
e io.unalloc=true
(dump; xc 0x00010060-0x0000ffd0 @ 0x0000ffd0-6)
e scr.color=3
e hex.comments=true
.(dump)
?e
e scr.color=0
.(dump)
?e
e hex.comments=false
e io.unalloc.ch=?
.(dump)
?e
e io.unalloc.ch=
.(dump)
EOF
EXPECT=<<EOF
[38;2;19;161;14m- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF  comment
[0m[38;2;19;161;14m0x0000ffca[0m  .... .... .... .... .... .... .... ....  [38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m
[38;2;19;161;14m0x0000ffda[0m  .... .... .... .... .... .... .... ....  [38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m
[38;2;19;161;14m0x0000ffea[0m  .... .... .... .... .... .... .... ....  [38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m
[38;2;19;161;14m0x0000fffa[0m  .... .... .... [38;2;58;150;221m7f[0m[38;2;193;156;0m45[0m [38;2;193;156;0m4c[0m[38;2;193;156;0m46[0m [38;2;204;204;204m01[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m  [38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;193;156;0m [0m[38;2;58;150;221m.[0m[38;2;193;156;0mE[0m[38;2;193;156;0mL[0m[38;2;193;156;0mF[0m[38;2;204;204;204m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m  ; segment.ehdr[0m[38;2;19;161;14m ; [01] -rw- segment size 45 named ehdr
[38;2;19;161;14m0x0001000a[0m  [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;204;204;204m01[0m[38;2;19;161;14m00[0m [38;2;204;204;204m02[0m[38;2;19;161;14m00[0m [38;2;204;204;204m03[0m[38;2;19;161;14m00[0m [38;2;193;156;0m20[0m[38;2;19;161;14m00[0m [38;2;204;204;204m01[0m[38;2;19;161;14m00[0m [38;2;193;156;0m20[0m[38;2;19;161;14m00[0m  [38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;204;204;204m.[0m[38;2;19;161;14m.[0m[38;2;204;204;204m.[0m[38;2;19;161;14m.[0m[38;2;204;204;204m.[0m[38;2;19;161;14m.[0m[38;2;193;156;0m [0m[38;2;19;161;14m.[0m[38;2;204;204;204m.[0m[38;2;19;161;14m.[0m[38;2;193;156;0m [0m[38;2;19;161;14m.[0m
[38;2;19;161;14m0x0001001a[0m  [38;2;204;204;204m01[0m[38;2;19;161;14m00[0m [38;2;204;204;204m04[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;204;204;204mb3[0m[38;2;193;156;0m2a[0m [38;2;193;156;0m31[0m[38;2;204;204;204mc0[0m [38;2;193;156;0m40[0m[38;2;204;204;204mcd[0m [38;2;204;204;204m80[0m[38;2;19;161;14m00[0m [38;2;193;156;0m34[0m[38;2;19;161;14m00[0m  [38;2;204;204;204m.[0m[38;2;19;161;14m.[0m[38;2;204;204;204m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;204;204;204m.[0m[38;2;193;156;0m*[0m[38;2;193;156;0m1[0m[38;2;204;204;204m.[0m[38;2;193;156;0m@[0m[38;2;204;204;204m.[0m[38;2;204;204;204m.[0m[38;2;19;161;14m.[0m[38;2;193;156;0m4[0m[38;2;19;161;14m.[0m[38;2;19;161;14m  ; entry0[0m
[38;2;19;161;14m0x0001002a[0m  [38;2;193;156;0m20[0m[38;2;19;161;14m00[0m [38;2;204;204;204m01[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m  [38;2;193;156;0m [0m[38;2;19;161;14m.[0m[38;2;204;204;204m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m
[38;2;19;161;14m0x0001003a[0m  [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m  [38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m
[38;2;19;161;14m0x0001004a[0m  [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m [38;2;19;161;14m00[0m[38;2;19;161;14m00[0m  [38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m[38;2;19;161;14m.[0m

- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF  comment
0x0000ffca  .... .... .... .... .... .... .... ....                  
0x0000ffda  .... .... .... .... .... .... .... ....                  
0x0000ffea  .... .... .... .... .... .... .... ....                  
0x0000fffa  .... .... .... 7f45 4c46 0100 0000 0000        .ELF......  ; segment.ehdr ; [01] -rw- segment size 45 named ehdr
0x0001000a  0000 0000 0100 0200 0300 2000 0100 2000  .......... ... .
0x0001001a  0100 0400 0000 b32a 31c0 40cd 8000 3400  .......*1.@...4.  ; entry0
0x0001002a  2000 0100 0000 0000 0000 0000 0000 0000   ...............
0x0001003a  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0001004a  0000 0000 0000 0000 0000 0000 0000 0000  ................

- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x0000ffca  ???? ???? ???? ???? ???? ???? ???? ????                  
0x0000ffda  ???? ???? ???? ???? ???? ???? ???? ????                  
0x0000ffea  ???? ???? ???? ???? ???? ???? ???? ????                  
0x0000fffa  ???? ???? ???? 7f45 4c46 0100 0000 0000        .ELF......
0x0001000a  0000 0000 0100 0200 0300 2000 0100 2000  .......... ... .
0x0001001a  0100 0400 0000 b32a 31c0 40cd 8000 3400  .......*1.@...4.
0x0001002a  2000 0100 0000 0000 0000 0000 0000 0000   ...............
0x0001003a  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0001004a  0000 0000 0000 0000 0000 0000 0000 0000  ................

- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x0000ffca                                                           
0x0000ffda                                                           
0x0000ffea                                                           
0x0000fffa                 7f45 4c46 0100 0000 0000        .ELF......
0x0001000a  0000 0000 0100 0200 0300 2000 0100 2000  .......... ... .
0x0001001a  0100 0400 0000 b32a 31c0 40cd 8000 3400  .......*1.@...4.
0x0001002a  2000 0100 0000 0000 0000 0000 0000 0000   ...............
0x0001003a  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0001004a  0000 0000 0000 0000 0000 0000 0000 0000  ................
EOF
RUN

NAME=pxr
FILE=bins/elf/crackme
CMDS=<<EOF
pxr 48 @ 0x00600ae0
?e ===
pxr 24 @ 0x00600ae0+32
EOF
EXPECT=<<EOF
0x00600ae0 0x000000000040055e   ^.@..... @ reloc.printf 4195678 .plt R X 'push 0'
0x00600ae8 0x000000000040056e   n.@..... @ reloc.puts 4195694 .plt R X 'push 1'
0x00600af0 0x000000000040057e   ~.@..... @ reloc.__libc_start_main 4195710 .plt R X 'push 2'
0x00600af8 0x000000000040058e   ..@..... @ reloc.fgets 4195726 .plt R X 'push 3'
0x00600b00 0x000000000040059e   ..@..... @ reloc.strcmp 4195742 .plt R X 'push 4'
0x00600b08 0x00000000004005ae   ..@..... @ reloc.fflush 4195758 .plt R X 'push 5'
===
0x00600b00 0x000000000040059e   ..@..... @ reloc.strcmp 4195742 .plt R X 'push 4'
0x00600b08 0x00000000004005ae   ..@..... @ reloc.fflush 4195758 .plt R X 'push 5'
0x00600b10 ..[ null bytes ]..   00000000 loc.__data_start
EOF
RUN

NAME=pxr1248
FILE=bins/elf/crackme
CMDS=<<EOF
pxr4 32@0x00600ae0
pxr8 32@0x00600ae0
pxr2 32@0x00600ae0
e asm.bits=32
pxr 32@0x00600ae0
pxr2j 16@0x00600ae0~{}
EOF
EXPECT=<<EOF
0x00600ae0 0x0040055e  ^.@. @ reloc.printf 4195678 .plt R X 'push 0'
0x00600ae4 ..[ null bytes ]..   00000000 
0x00600ae8 0x0040056e  n.@. @ reloc.puts 4195694 .plt R X 'push 1'
0x00600aec ..[ null bytes ]..   00000000 
0x00600af0 0x0040057e  ~.@. @ reloc.__libc_start_main 4195710 .plt R X 'push 2'
0x00600af4 ..[ null bytes ]..   00000000 
0x00600af8 0x0040058e  ..@. @ reloc.fgets 4195726 .plt R X 'push 3'
0x00600afc ..[ null bytes ]..   00000000 
0x00600ae0 0x000000000040055e   ^.@..... @ reloc.printf 4195678 .plt R X 'push 0'
0x00600ae8 0x000000000040056e   n.@..... @ reloc.puts 4195694 .plt R X 'push 1'
0x00600af0 0x000000000040057e   ~.@..... @ reloc.__libc_start_main 4195710 .plt R X 'push 2'
0x00600af8 0x000000000040058e   ..@..... @ reloc.fgets 4195726 .plt R X 'push 3'
0x00600ae0 5e05  ^. @ reloc.printf 1374 .symtab
0x00600ae2 4000  @. 64 .shstrtab elf_phdr ascii ('@')
0x00600ae4 0000  ..
0x00600ae6 0000  ..
0x00600ae8 6e05  n. @ reloc.puts 1390 .symtab
0x00600aea 4000  @. 64 .shstrtab elf_phdr ascii ('@')
0x00600aec 0000  ..
0x00600aee 0000  ..
0x00600af0 7e05  ~. @ reloc.__libc_start_main 1406 .symtab
0x00600af2 4000  @. 64 .shstrtab elf_phdr ascii ('@')
0x00600af4 0000  ..
0x00600af6 0000  ..
0x00600af8 8e05  .. @ reloc.fgets 1422 .symtab
0x00600afa 4000  @. 64 .shstrtab elf_phdr ascii ('@')
0x00600afc 0000  ..
0x00600afe 0000  ..
0x00600ae0 0x0040055e  ^.@. @ reloc.printf .plt R X 'push 0'
0x00600ae4 ..[ null bytes ]..   00000000 
0x00600ae8 0x0040056e  n.@. @ reloc.puts .plt R X 'push 1'
0x00600aec ..[ null bytes ]..   00000000 
0x00600af0 0x0040057e  ~.@. @ reloc.__libc_start_main .plt R X 'push 2'
0x00600af4 ..[ null bytes ]..   00000000 
0x00600af8 0x0040058e  ..@. @ reloc.fgets .plt R X 'push 3'
0x00600afc ..[ null bytes ]..   00000000 
[
  {
    "addr": 6294240,
    "value": 1374,
    "refstr": "1374 .symtab",
    "ref": {
      "addr": 1374,
      "value": "1374",
      "section": ".symtab"
    }
  },
  {
    "addr": 6294242,
    "value": 64,
    "refstr": "64 .shstrtab elf_phdr ascii ('@')",
    "ref": {
      "addr": 64,
      "value": "64",
      "section": ".shstrtab",
      "flags": [
        "elf_phdr"
      ],
      "attr": [
        "ascii"
      ]
    }
  },
  {
    "addr": 6294244,
    "value": 0,
    "refstr": "0",
    "ref": {
      "addr": 0,
      "value": "0",
      "attr": [
        
      ]
    }
  },
  {
    "addr": 6294246,
    "value": 0,
    "refstr": "0",
    "ref": {
      "addr": 0,
      "value": "0",
      "attr": [
        
      ]
    }
  },
  {
    "addr": 6294248,
    "value": 1390,
    "refstr": "1390 .symtab",
    "ref": {
      "addr": 1390,
      "value": "1390",
      "section": ".symtab"
    }
  },
  {
    "addr": 6294250,
    "value": 64,
    "refstr": "64 .shstrtab elf_phdr ascii ('@')",
    "ref": {
      "addr": 64,
      "value": "64",
      "section": ".shstrtab",
      "flags": [
        "elf_phdr"
      ],
      "attr": [
        "ascii"
      ]
    }
  },
  {
    "addr": 6294252,
    "value": 0,
    "refstr": "0",
    "ref": {
      "addr": 0,
      "value": "0",
      "attr": [
        
      ]
    }
  }
]
EOF
RUN

NAME=pxe
FILE=-
CMDS=<<EOF
woe 0 0xff 1
pxe 256
EOF
EXPECT=<<EOF
0x00000000 🌀 🌂 🌅 🌈 🌙 🌞 🌟 🌠 🌰 🌱 🌲 🌳 🌴 🌵 🌷 🌸  ................
0x00000010 🌹 🌺 🌻 🌼 🌽 🌾 🌿 🍀 🍁 🍂 🍃 🍄 🍅 🍆 🍇 🍈  ................
0x00000020 🍉 🍊 🍋 🍌 🍍 🍎 🍏 🍐 🍑 🍒 🍓 🍔 🍕 🍖 🍗 🍘   !"#$%&'()*+,-./
0x00000030 🍜 🍝 🍞 🍟 🍠 🍡 🍢 🍣 🍤 🍥 🍦 🍧 🍨 🍩 🍪 🍫  0123456789:;<=>?
0x00000040 🍬 🍭 🍮 🍯 🍰 🍱 🍲 🍳 🍴 🍵 🍶 🍷 🍸 🍹 🍺 🍻  @ABCDEFGHIJKLMNO
0x00000050 🍼 🎀 🎁 🎂 🎃 🎄 🎅 🎈 🎉 🎊 🎋 🎌 🎍 🎎 🎏 🎒  PQRSTUVWXYZ[\]^_
0x00000060 🎓 🎠 🎡 🎢 🎣 🎤 🎥 🎦 🎧 🎨 🎩 🎪 🎫 🎬 🎭 🎮  `abcdefghijklmno
0x00000070 🎯 🎰 🎱 🎲 🎳 🎴 🎵 🎷 🎸 🎹 🎺 🎻 🎽 🎾 🎿 🏀  pqrstuvwxyz{|}~.
0x00000080 🏁 🏂 🏃 🏄 🏆 🏇 🏈 🏉 🏊 🐀 🐁 🐂 🐃 🐄 🐅 🐆  ................
0x00000090 🐇 🐈 🐉 🐊 🐋 🐌 🐍 🐎 🐏 🐐 🐑 🐒 🐓 🐔 🐕 🐖  ................
0x000000a0 🐗 🐘 🐙 🐚 🐛 🐜 🐝 🐞 🐟 🐠 🐡 🐢 🐣 🐤 🐥 🐦  ................
0x000000b0 🐧 🐨 🐩 🐪 🐫 🐬 🐭 🐮 🐯 🐰 🐱 🐲 🐳 🐴 🐵 🐶  ................
0x000000c0 🐷 🐸 🐹 🐺 🐻 🐼 🐽 🐾 👀 👂 👃 👄 👅 👆 👇 👈  ................
0x000000d0 👉 👊 👋 👌 👍 👎 👏 👐 👑 👒 👓 👔 👕 👖 👗 👘  ................
0x000000e0 👙 👚 👛 👜 👝 👞 👟 👠 👡 👢 👣 👤 👥 👦 👧 👨  ................
0x000000f0 👩 👪 👮 👯 👺 👻 👼 👽 👾 👿 💀 💁 💂 💃 💄 💅  ................
EOF
RUN
