NAME=oon
FILE=bins/mach0/mac-ls2
CMDS=<<EOF
oon
ol
EOF
EXPECT=<<EOF
 4 * r-- 0x00009730 bins/mach0/mac-ls2
EOF
RUN

NAME=oonn
FILE=bins/mach0/mac-ls2
CMDS=<<EOF
pfn~?
oonn
pfn~?
ol~?
EOF
EXPECT=<<EOF
91
149
1
EOF
RUN

NAME=oml=
FILE=bins/mach0/mac-ls2
BROKEN=1
CMDS=oml=
EXPECT=<<EOF

0*  0x100000000 ################-------------- 0x100005000 r-x   3     fmap.TEXT
1   0x100005000 ---------------####----------- 0x100006000 r--   3     fmap.DATA
2   0x100006000 ------------------############ 0x10000a000 r--   3     fmap.LINKEDIT
=>  0x1000011e8 ------------------------------ 0x1000012e8
EOF
RUN

NAME=obo baddrs
FILE=bins/mach0/mac-ls2
ARGS=-B0x50000
CMDS=<<EOF
s
o bins/mach0/mac-ls
s
obo 3
s
obo 4
s
EOF
EXPECT=<<EOF
0x511e8
0x100001058
0x511e8
0x100001058
EOF
RUN

NAME=oom
FILE=bins/elf/libmagic.so
CMDS=<<EOF
ol~?
oom
ol~malloc?
EOF
EXPECT=<<EOF
4
1
EOF
RUN

NAME=o-[0]
FILE=malloc://1024
CMDS=o- `o~[0]`;o
EXPECT=
RUN

NAME=oj-
FILE=malloc://1024
CMDS=o- `oj~{[0].fd}`;o
EXPECT=
RUN

NAME=o =
FILE=malloc://1024
CMDS=<<EOF
o =;ol~?
EOF
EXPECT=<<EOF
2
EOF
RUN

NAME=om
FILE=malloc://1024
CMDS=<<EOF
om `ol~[0]` 0x4000
oml~?
EOF
EXPECT=<<EOF
2
EOF
RUN

NAME=om2
FILE=malloc://1024
CMDS=<<EOF
om `ol~[0]` 0x4000
om `ol~[0]` 0x4000
oml~?
EOF
EXPECT=<<EOF
3
EOF
RUN

NAME=omn - crash
FILE==
CMDS=omn
EXPECT=
RUN

NAME=oob 10
FILE=bins/elf/analysis/hello-linux-x86_64
CMDS=<<EOF
10oob
pi 1
EOF
EXPECT=<<EOF
xor ebp, ebp
EOF
RUN

NAME=oo+ 10
FILE=bins/elf/analysis/hello-linux-x86_64
CMDS=<<EOF
10oo+
pi 1
EOF
EXPECT=<<EOF
xor ebp, ebp
EOF
RUN

NAME=oob consider baddr
FILE=bins/mach0/mac-ls
CMDS=<<EOF
e bin.baddr=0xf00000
k old_v=`ieq`
oob
iI~baddr[1]
ie:vaddr:quiet
p8 10 @ entry0
p8 10 @ `k old_v`
EOF
EXPECT=<<EOF
0x00f00000
0x00f01058
554889e5415741564155
ffffffffffffffffffff
EOF
RUN

NAME=oob consider laddr 32bit
FILE=bins/mach0/fatmach0-3true
ARGS=-a x86 -b 32
CMDS=<<EOF
e bin.laddr=0x5000
e bin.baddr=-1
oob
iI~laddr[1]
iI~baddr[1]
EOF
EXPECT=<<EOF
0x00000000
0x00001000
EOF
RUN

NAME=oob consider laddr 64bit
FILE=bins/mach0/fatmach0-3true
ARGS=-a x86 -b 64
CMDS=<<EOF
e bin.laddr=0x5000
e bin.baddr=-1
oob
iI~laddr[1]
iI~baddr[1]
EOF
EXPECT=<<EOF
0x00000000
0x100000000
EOF
RUN

NAME=oob from malloc
FILE=malloc://1024
CMDS=<<EOF
wx 7f454c4601010100b32ae9310000000002000300010000000800200020000000010000000000000000002000010000001b0300001b0300000700000000100000e901000000b0e8a502000049e7551ff1c2a03ff17995d4f3f241adf35954d7a87b543f48e7551ff1c3a03ff179bc17f3795487eb79543fc0b0ddf14b78543ff1b4d41632fc944be0c0563ed179e60b197f563ff190273df179bf3e412aeda9f3595485f579543f1987553ff1914c3df1796722677b743f856aeddaf159548dec91813ef179bd7df379544dc722d1e48491ed09f05954859979543f19c3553ff190733df1795e1fa60b3b519659245e820a2350831d781f8216264d88577a11fb73546c9e0b2646d11b214bd10d3c5ad1092650921c274cd10a315a9c0a744b9e59365ad10d265e921c3011df57747d881c7a11df735412cf59074a921a314c8259751ed13a3b51960b354b8415354b98163a4cdf577a35d1597901d1203b4ad11a3551d10a31519559395ad1003b4a835927509d0c20569e177b5c9e14395a9f0d271f900d744b991c745e9316225ad11435569d59355b950b7a11df7354c511b6cac511c2838b48c9899750f5818854b6c7c55fff99915eb199c552e48b865afb8fc512a4e0c511b6cac511bbc7c81cbbc7c81cbbc7c81cbbc7c81cbbc7c81cbbc7c81cbbc7c81cbbc7c81cbbe0ef65fe839611f9848011fe8b9611f7ca9550e49e8c52e3868443fa93c542fb8b895db6998c4bf3c4cb1f9ca28a41f3ca9016fa86c556f39ec542f9878011f09f8b11e1839159b683911f9ce0bc5ee3ca8650f8ca8f5eff84c55cf3ca8445b693845fff99915ed6849049f38ecb5ee48dc55ee4ca8a5fb6c99654f58e8047d68c9754f3848a55f3c48b54e2e0ef74f89e8043b69e8d54b6ba8442e59d8a43f2cadf11b6cae53196ea3ff17954d6f079543f414894b632c950f271bae4d6f079543fd24894b63287978ff2b4d4fc41f092b606f08d92c0a9ffdd0bbabd3cf179548f393a65ff78baede0f37954fe187bea37f1595492f0bab6c4708a3f3bf92c972d2390b84b00200089c689f7b9a5020000c1e902ad35f179543fabe2f7c3e9010000003231c089c3fec0cd80c3
oba
i~bintype[1]
.ie*
p8 10 @ entry0
EOF
EXPECT=<<EOF
elf
b32ae931000000000200
EOF
RUN

NAME=ob select files
FILE=malloc://1024
CMDS=<<EOF
e scr.null=true
o malloc://512
e scr.null=false
i~file[1]
obo 3
i~file[1]
obo 4
i~file[1]
obo 3
i~file[1]
EOF
EXPECT=<<EOF
malloc://512
malloc://1024
malloc://512
malloc://1024
EOF
RUN

NAME=ob select files binobj
FILE=bins/elf/libmagic.so
CMDS=<<EOF
iiq~?
e scr.null=true
o malloc://1024
e scr.null=false
iiq~?
EOF
EXPECT=<<EOF
38
0
EOF
RUN

NAME=ob select files binobj2
FILE=bins/elf/libmagic.so
CMDS=<<EOF
isq~?
e scr.null=true
o bins/elf/true32
e scr.null=false
isq~?
# raise back
op `ol~:0[0]`
isq~?
EOF
EXPECT=<<EOF
408
46
408
EOF
RUN

NAME=ob 0 fix
FILE=<<EOF
bins/elf/_Exit (42)
bins/elf/libverifyPass.so
bins/elf/libc.so.6
EOF
CMDS=<<EOF
obl~[0-1]
echo
ob 1; i~^fd
ob 2; i~^fd
ob 0; i~^fd
EOF
EXPECT=<<EOF
0 3
1 5
2 9

fd       5
fd             9
fd       3
EOF
RUN

NAME=oC
FILE==
CMDS=<<EOF
wx 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
s 0x10
px 16~:1
echo
oC $b
px 16~:1
echo
oml
echo
omp 1
px 16~:1
EOF
EXPECT=<<EOF
0x00000010  1011 1213 1415 1617 1819 1a1b 1c1d 1e1f  ................

0x00000010  2021 2223 2425 2627 2829 2a2b 2c2d 2e2f   !"#$%&'()*+,-./

 1 fd: 3 +0x00000000 0x00000000 - 0x000001ff rwx 
 2 fd: 4 +0x00000000 0x00000000 * 0x000000ff rwx 

0x00000010  1011 1213 1415 1617 1819 1a1b 1c1d 1e1f  ................
EOF
RUN

NAME=malloc ob fix
FILE=--
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
o malloc://1024
obl
EOF
EXPECT=<<EOF
0 3 x86-64 ba:0x00000000 sz:1024 malloc://1024
EOF
RUN

NAME=oblj
FILE==
ARGS=-a x86 -b 64
CMDS=<<EOF
oblj~{}
EOF
EXPECT=<<EOF
[
  {
    "name": "malloc://512",
    "iofd": 3,
    "bfid": 0,
    "size": 512,
    "obj": {
      "arch": "x86",
      "bits": 64,
      "binoffset": 0,
      "objsize": 512
    }
  }
]
EOF
RUN

NAME=o+ writable maps fix
FILE=--
CMDS=<<EOF
o+ bins/elf/ls
oml
# Possible parallelism problem
# echo
# pv1
# $old=`pv1`
# wx 0x90
# pv1
# wx `$old?`
# pv1
EOF
EXPECT=<<EOF
 1 fd: 4 +0x00000000 0x00023560 - 0x00023f17 rwx vmap.reloc-targets
 2 fd: 3 +0x00000000 0x00000000 - 0x0000347f rwx fmap.LOAD0
 3 fd: 3 +0x00004000 0x00004000 * 0x00016790 rwx fmap.LOAD1
 4 fd: 3 +0x00017000 0x00017000 - 0x0001f7bf rwx fmap.LOAD2
 5 fd: 5 +0x00000000 0x00022268 - 0x00023557 rwx mmap.LOAD3
 6 fd: 6 +0x00020050 0x00021050 - 0x00022267 rwx vmap.LOAD3
EOF
RUN

NAME=o--
FILE==
ARGS=-a x86 -b 64
CMDS=<<EOF
o =
ol~?
obl
echo --
o--
ol~?
obl
EOF
EXPECT=<<EOF
2
0 3 x86-64 ba:0x00000000 sz:512 malloc://512
1 4 x86-64 ba:0x00000000 sz:512 malloc://512
--
0
EOF
RUN

NAME=o- 3
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
o =
o- 3
ol~?
obl
EOF
EXPECT=<<EOF
1
1 4 x86-64 ba:0x00000000 sz:512 malloc://512
EOF
RUN

NAME=oc
FILE=bins/elf/true32
CMDS=<<EOF
obl~?
i
oc =
# oc resets RzCore completely
e scr.utf8=false
e scr.color=0
echo --
obl~?
i
EOF
EXPECT=<<EOF
1
fd       3
file     bins/elf/true32
size     0x560c
humansz  21.5K
mode     r-x
format   elf
iorw     false
block    0x100
type     EXEC (Executable file)
arch     x86
cpu      N/A
features N/A
baddr    0x08048000
binsz    0x000050bc
bintype  elf
bits     32
class    ELF32
compiler N/A
dbg_file N/A
endian   LE
hdr.csum N/A
guid     N/A
intrp    /lib/ld-linux.so.2
laddr    0x00000000
lang     c
machine  Intel 80386
maxopsz  16
minopsz  1
os       linux
cc       N/A
pcalign  1
relro    partial
rpath    NONE
subsys   linux
stripped true
havecode true
va       true
static   false
linenum  false
lsyms    false
canary   true
pie      false
relrocs  false
nx       true
--
1
fd      3
file    malloc://512
size    0x200
humansz 512
mode    rwx
format  any
iorw    true
block   0x100
type    
EOF
RUN

NAME=ob
FILE=bins/elf/true32
CMDS=<<EOF
ob.
obf bins/elf/ls
ob.
ob 0
ob.
EOF
EXPECT=<<EOF
0
1
0
EOF
RUN

NAME=ox
FILE=bins/elf/true32
CMDS=<<EOF
ol
oml
ox 3 4
ol
oml
EOF
EXPECT=<<EOF
 3 * r-x 0x0000560c bins/elf/true32
 4 - r-x 0x000000b0 vfile://0/reloc-targets
 5 - rw- 0x00000184 null://388
 1 fd: 4 +0x00000000 0x0804e248 - 0x0804e2f7 r-- vmap.reloc-targets
 2 fd: 3 +0x00000000 0x08048000 * 0x0804c657 r-x fmap.LOAD0
 3 fd: 5 +0x00000000 0x0804e0bc - 0x0804e23f rw- mmap.LOAD1
 4 fd: 3 +0x00004ef0 0x0804def0 - 0x0804e0bb r-- fmap.LOAD1
 3 - r-x 0x000000b0 vfile://0/reloc-targets
 4 * r-x 0x0000560c bins/elf/true32
 5 - rw- 0x00000184 null://388
 1 fd: 4 +0x00000000 0x0804e248 - 0x0804e2f7 r-- vmap.reloc-targets
 2 fd: 3 +0x00000000 0x08048000 * 0x0804c657 r-x fmap.LOAD0
 3 fd: 5 +0x00000000 0x0804e0bc - 0x0804e23f rw- mmap.LOAD1
 4 fd: 3 +0x00004ef0 0x0804def0 - 0x0804e0bb r-- fmap.LOAD1
EOF
RUN

NAME=ol quiet
FILE=bins/elf/true32
CMDS=<<EOF
olq
ol.
ol.q
EOF
EXPECT=<<EOF
3
4
5
 3 * r-x 0x0000560c bins/elf/true32
3
EOF
RUN

NAME=on+
FILE=bins/elf/true32
ARGS=-n
CMDS=<<EOF
cp `ol.t:uri:quiet` .true32-copy
on+ .true32-copy
p8 2
wx 9090
p8 2
o--
rm .true32-copy
EOF
EXPECT=<<EOF
7f45
9090
EOF
RUN

NAME=o=
FILE=bins/elf/true32
CMDS=<<EOF
o=
EOF
EXPECT=<<EOF
 3 * r-x 0x0000560c [#########################] bins/elf/true32
 4 - r-x 0x000000b0 [-------------------------] vfile://0/reloc-targets
 5 - rw- 0x00000184 [-------------------------] null://388
EOF
RUN

NAME=oa
FILE=bins/elf/true32
BROKEN=1
CMDS=<<EOF
pd 3
oa arm 64
pd 3
EOF
EXPECT=
RUN

NAME=open priority
FILE=bins/elf/true32
CMDS=<<EOF
o bins/elf/true
op 3
ol~*
opn
opn
ol~*
opp
ol~*
opr
opr
ol~*
opr
ol~*
EOF
EXPECT=<<EOF
 3 * r-x 0x0000560c bins/elf/true32
 5 * rw- 0x00000184 null://388
 4 * r-x 0x000000b0 vfile://0/reloc-targets
11 * r-x 0x000087c0 vfile://1/patched
 3 * r-x 0x0000560c bins/elf/true32
EOF
RUN

NAME=open maps all VA
FILE=bins/elf/true32
CMDS=<<EOF
oml~true32
oma 3
oml~true32
EOF
EXPECT=<<EOF
 5 fd: 3 +0x00000000 0x00000000 * 0xfffffffffffffffe r-x bins/elf/true32
EOF
RUN

NAME=maps relocation
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 9090
pi 2
oml
omb 1 0x3000
oml
pi 2
pi 2 @ 0x3000
EOF
EXPECT=<<EOF
nop
nop
 1 fd: 3 +0x00000000 0x00000000 * 0x000001ff rwx 
 1 fd: 3 +0x00000000 0x00003000 - 0x000031ff rwx 
invalid
invalid
nop
nop
EOF
RUN

NAME=maps cur relocation and priority
FILE==
CMDS=<<EOF
o malloc://512
o malloc://512
o malloc://512
e asm.arch=x86
e asm.bits=64
omp 1
wx 9090
omp 2
wx c3c3
ompd 2
pi 2
oml
omb. 0x3000
omp 2
oml
pi 2
pi 2 @ 0x3000
EOF
EXPECT=<<EOF
nop
nop
 2 fd: 4 +0x00000000 0x00000000 - 0x000001ff rw- 
 3 fd: 5 +0x00000000 0x00000000 - 0x000001ff rw- 
 4 fd: 6 +0x00000000 0x00000000 - 0x000001ff rw- 
 1 fd: 3 +0x00000000 0x00000000 * 0x000001ff rwx 
 3 fd: 5 +0x00000000 0x00000000 - 0x000001ff rw- 
 4 fd: 6 +0x00000000 0x00000000 - 0x000001ff rw- 
 1 fd: 3 +0x00000000 0x00003000 - 0x000031ff rwx 
 2 fd: 4 +0x00000000 0x00000000 * 0x000001ff rw- 
ret
ret
nop
nop
EOF
RUN

NAME=maps_names
FILE==
CMDS=<<EOF
omn HelloMap
oml
omn-
oml
omni 1 HelloMap1
oml
omni- 1
oml
EOF
EXPECT=<<EOF
 1 fd: 3 +0x00000000 0x00000000 * 0x000001ff rwx HelloMap
 1 fd: 3 +0x00000000 0x00000000 * 0x000001ff rwx 
 1 fd: 3 +0x00000000 0x00000000 * 0x000001ff rwx HelloMap1
 1 fd: 3 +0x00000000 0x00000000 * 0x000001ff rwx 
EOF
RUN

NAME=M68k, HPPA, Sparc, x86
FILE=bins/mach0/2048-NeXTSTEP
CMDS=<<EOF
iA
EOF
EXPECT=<<EOF
    offset  size arch  bits machine  big_endian 
------------------------------------------------
0x00002000 49152 m68k    32 mc68030  true
0x0000e000 40960 x86     32 386      false
0x00018000 49152 hppa    32 hppa7100 true
0x00024000 49152 sparc   32 all      true
EOF
EXPECT_ERR=
RUN

NAME=M68k, HPPA, Sparc, x86
FILE=bins/mach0/2048-NeXTSTEP
CMDS=<<EOF

# Test if sane defaults were selected
echo default (m68k)
e asm.arch
e asm.cpu
e asm.bits
e cfg.bigendian
pd 10 @ section.0.__TEXT.__text

obs hppa_32_hppa7100
e asm.arch
e asm.cpu
e asm.bits
e cfg.bigendian
pd 10 @ section.0.__TEXT.__text

obs sparc_32_all
e asm.arch
e asm.cpu
e asm.bits
e cfg.bigendian
pd 10 @ section.0.__TEXT.__text

obs x86_32_386
e asm.arch
e asm.cpu
e asm.bits
e cfg.bigendian
pd 10 @ section.0.__TEXT.__text

obs m68k_32_mc68030
e asm.arch
e asm.cpu
e asm.bits
e cfg.bigendian
pd 10 @ section.0.__TEXT.__text
EOF
EXPECT=<<EOF
default (m68k)
m68k
mc68030
32
true
            ;-- section.0.__TEXT.__text:
            0x000049c0      movea.l a7, a0                             ; [00] -r-x section size 6638 named 0.__TEXT.__text
            0x000049c2      suba.w 0xc, a7
            0x000049c6      move.l (a0)+, d0
            0x000049c8      move.l d0, (a7)
            0x000049ca      move.l d0, 0x8004.l
            0x000049d0      move.l a0, 0x4(a7)
            0x000049d4      move.l a0, 0x8008.l
            0x000049da      addq.l 0x1, d0
            0x000049dc      asl.l 0x2, d0
            0x000049de      adda.l d0, a0
Backed up flag space into 'flags.hppa_32_hppa7100.sdb'. You can restore the flags with the 'ko' command.
hppa
hppa7100
32
true
            ;-- section.0.__TEXT.__text:
            0x000039e8      ldw   0(sp), r26                           ; [00] -r-x section size 10588 named 0.__TEXT.__text
            0x000039ec      ldo   0x7f(sp), sp
            0x000039f0      ldil  0x3800, r1
            0x000039f4      be    0x1fc(sr4,r1)
            0x000039f8      depi  0, 0x1f, 6, sp
            0x000039fc      stw   rp, -0x14(sp)
            0x00003a00      stwm  r5, 0x80(sp)
            0x00003a04      stw   r4, -0x7c(sp)
            0x00003a08      stw   r3, -0x78(sp)
            0x00003a0c      or    r26, flags, r4
Backed up flag space into 'flags.sparc_32_all.sdb'. You can restore the flags with the 'ko' command.
sparc
all
32
true
            ;-- section.0.__TEXT.__text:
            0x0000441c      mov   sp, o0                               ; [00] -r-x section size 7912 named 0.__TEXT.__text
            0x00004420      sethi 0x11, o5
            0x00004424      or    o5, 0x30, o5
            0x00004428      jmp   o5
            0x0000442c      nop
            0x00004430      save  sp, -0x70, sp
            0x00004434      add   i0, 0x44, o1
            0x00004438      sethi 0x20, o2
            0x0000443c      st    o1, [o2+8]
            0x00004440      ld    [i0+0x40], o0
Backed up flag space into 'flags.x86_32_386.sdb'. You can restore the flags with the 'ko' command.
x86
386
32
false
            ;-- section.0.__TEXT.__text:
            0x00002a24      push  ebp                                  ; [00] -r-x section size 6524 named 0.__TEXT.__text
            0x00002a25      mov   ebp, esp
            0x00002a27      push  edi
            0x00002a28      push  esi
            0x00002a29      push  ebx
            0x00002a2a      lea   esi, dword [ebp+0x04]
            0x00002a2d      mov   edx, dword [esi]
            0x00002a2f      mov   dword [0x6004], edx
            0x00002a35      lea   eax, dword [esi+0x04]
            0x00002a38      mov   dword [0x6008], eax
Backed up flag space into 'flags.m68k_32_mc68030.sdb'. You can restore the flags with the 'ko' command.
m68k
mc68030
32
true
            ;-- section.0.__TEXT.__text:
            0x000049c0      movea.l a7, a0                             ; [00] -r-x section size 6638 named 0.__TEXT.__text
            0x000049c2      suba.w 0xc, a7
            0x000049c6      move.l (a0)+, d0
            0x000049c8      move.l d0, (a7)
            0x000049ca      move.l d0, 0x8004.l
            0x000049d0      move.l a0, 0x4(a7)
            0x000049d4      move.l a0, 0x8008.l
            0x000049da      addq.l 0x1, d0
            0x000049dc      asl.l 0x2, d0
            0x000049de      adda.l d0, a0
EOF
EXPECT_ERR=<<EOF
ERROR: unknown thread state structure 11
ERROR: mach0: Cannot parse thread
EOF
RUN

NAME=Switch between same archs, with different bits and machine
FILE=bins/mach0/AppIOSEntitlements.ios
CMDS=<<EOF
obs

obs arm_64_all
echo "# arm_64_all"
e asm.arch
e asm.bits
e asm.cpu

obs arm_32_v7
echo "# arm_32_v7"
e asm.arch
e asm.bits
e asm.cpu
EOF
EXPECT=<<EOF
arm_32_v7
arm_64_all
Backed up flag space into 'flags.arm_64_all.sdb'. You can restore the flags with the 'ko' command.
# arm_64_all
arm
64
all
Backed up flag space into 'flags.arm_32_v7.sdb'. You can restore the flags with the 'ko' command.
# arm_32_v7
arm
32
v7
EOF
EXPECT_ERR=
RUN
