rizin/test/db/analysis/ppc

750 lines
14 KiB
Text

NAME=ppc-asserts
FILE=bins/elf/powerpc-linux-gnu-symexec-palindrome
CMDS=<<EOF
env RZ_DEBUG_ASSERT=1
aaa
echo done
EOF
EXPECT=<<EOF
done
EOF
RUN
NAME=ppc-aflm
FILE=bins/elf/analysis/elf-ppc-execstack
CMDS=<<EOF
aac
aflm
EOF
EXPECT=<<EOF
fcn.10001fd0:
sym.imp.strlen
fcn.10002d10
sym.imp.strcmp
sym.imp.sprintf
sym.imp.mkstemp
sym.imp.__strdup
sym.imp.vfork
sym.imp.waitpid
sym.imp.error
sym.imp.free
fcn.10003f90
fcn.10008d80
sym.imp.unlink
sym.imp.close
fcn.10007450
sym.imp.__errno_location
fcn.100017a0
sym.imp.execlp
sym.imp.execl
sym.imp._exit
fcn.100048e0:
fcn.10004880
sym.imp.strlen
sym.imp.memcpy
sym.imp.__fxstat64
sym.imp.fchown
sym.imp.fchmod
fcn.10003e40
sym.imp.time
sym.imp.utime
fcn.10003fe0
sym.imp.rename
sym.imp.unlink
sym.imp.__errno_location
sym.imp.error
fcn.10003f90
sym.imp.elf_errmsg
fcn.10003f90:
sym.imp.unlink
fcn.10003e40
fcn.10003e40:
sym.imp.free
sym.imp.elf_getdata
sym.imp.elf_end
sym.imp.fsync
sym.imp.close
fcn.100016f0:
sym.imp.memset
sym.imp.gelf_fsize
fcn.10002660:
fcn.10006120
fcn.10004730
sym.imp.elf_getdata
fcn.1000f2d0
sym.imp.gelf_xlatetof
sym.imp.gelf_xlatetom
sym.imp.abort
fcn.10006480:
fcn.10025f80
sym.imp.gelf_update_phdr
fcn.1000e110
sym.imp.elf_flagphdr
sym.imp.gelf_update_shdr
sym.imp.elf_flagshdr
sym.imp.gelf_update_ehdr
sym.imp.elf_flagehdr
fcn.10004120
sym.imp.realloc
sym.imp.memmove
fcn.10005480
sym.imp.error
fcn.10002d10:
sym.imp.elf_getdata
fcn.10008d80:
sym.imp.elf_begin
sym.imp.elf_kind
sym.imp.gelf_getehdr
sym.imp.malloc
sym.imp.elf_flagelf
sym.imp.memset
sym.imp.memcpy
sym.imp.gelf_getphdr
sym.imp.elf_getscn
sym.imp.gelf_getshdr
sym.imp.qsort
fcn.10005cb0
sym.imp.__strdup
fcn.10002d10
sym.imp.strcmp
sym.imp.error
sym.imp.free
sym.imp.elf_end
fcn.10007380
sym.imp.close
fcn.100030f0
sym.imp.pread
sym.imp.memmem
sym.imp.elf_errmsg
sym.imp.__assert_fail
sym.imp.open
sym.imp.__errno_location
fcn.10007450:
sym.imp.strlen
sym.imp.sprintf
sym.imp.mkstemp
sym.imp.elf_begin
sym.imp.gelf_getclass
sym.imp.error
sym.imp.elf_end
sym.imp.unlink
sym.imp.close
sym.imp.free
sym.imp.elf64_newehdr
sym.imp.gelf_update_ehdr
sym.imp.gelf_newphdr
sym.imp.memcpy
sym.imp.elf_flagelf
sym.imp.gelf_update_phdr
sym.imp.elf_newscn
sym.imp.gelf_update_shdr
sym.imp.elf_getdata
sym.imp.elf_newdata
sym.imp.__strdup
sym.imp.elf_getscn
sym.imp.gelf_getshdr
fcn.10005cb0
sym.imp.gelf_fsize
fcn.10005480
sym.imp.__errno_location
sym.imp.elf32_newehdr
sym.imp.elf_errmsg
fcn.10007380
fcn.10005a00
sym.imp.__assert_fail
sym.imp.calloc
sym.imp.abort
fcn.100017a0:
fcn.10001fd0
fcn.10003ba0
fcn.100048e0
sym.imp.error
fcn.10003f90
fcn.100016f0
fcn.10002660
fcn.10006480
fcn.10006120:
sym.imp.elf_getdata
fcn.10025b30
sym.imp.gelf_getdyn
sym.imp.gelf_update_dyn
sym.imp.elf_flagscn
sym.imp.__assert_fail
sym.imp.error
fcn.10004730:
fcn.10003ce0
sym.imp.gelf_update_ehdr
sym.imp.gelf_update_phdr
sym.imp.gelf_update_shdr
fcn.10004390
fcn.1000d780
fcn.10002e00:
sym.imp.elf_getdata
fcn.10003bc0
fcn.100030f0:
fcn.10003bc0
sym.imp.elf_getdata
fcn.10003ce0:
sym.imp.error
fcn.10004390:
sym.imp.memset
sym.imp.elf_getdata
sym.imp.gelf_getsym
fcn.10025b30
sym.imp.gelf_update_sym
sym.imp.__assert_fail
fcn.1000d780:
sym.imp.__assert_fail
fcn.1000d410
sym.imp.error
fcn.10004880:
fcn.10004730
sym.imp.elf_update
fcn.10003fe0:
sym.imp.getfilecon
sym.imp.setfilecon
sym.imp.freecon
sym.imp.__errno_location
sym.imp.error
sym.imp.is_selinux_enabled
fcn.10005480:
sym.imp.gelf_fsize
fcn.1000e110:
fcn.1000d410
sym.imp.error
fcn.10005cb0:
sym.imp.memset
sym.imp.elf_getdata
fcn.10025b30
sym.imp.gelf_getdyn
fcn.10009f00:
fcn.10002d10
sym.imp.strncmp
sym.imp.strcmp
sym.imp.elf_getdata
sym.imp.__assert_fail
sym.imp.error
fcn.1000cbf0
sym.imp.malloc
fcn.1000cb20
fcn.1000c650
sym.imp.realloc
sym.imp.elf_flagscn
fcn.10003bc0
sym.imp.free
fcn.1000c2f0
fcn.10009270
fcn.1000ef70:
sym.imp.__assert_fail
sym.imp.elf_getdata
sym.imp.error
sym.imp.elf_flagscn
fcn.10004120:
sym.imp.__assert_fail
fcn.10007380:
sym.imp.malloc
sym.imp.error
fcn.10005a00:
sym.imp.elf_getdata
fcn.10025b30
sym.imp.gelf_getsym
sym.imp.gelf_update_sym
sym.imp.elf_flagscn
sym.imp.error
fcn.10008f70:
sym.imp.error
fcn.1000cbf0:
fcn.1000c730
sym.imp.calloc
sym.imp.free
fcn.1000c730:
sym.imp.fprintf
sym.imp.abort
fcn.1000cb20:
fcn.1000c730
sym.imp.free
sym.imp.calloc
sym.imp.abort
fcn.1000c650:
sym.imp.free
fcn.10009270:
sym.imp.error
fcn.1000ce30:
sym.imp.memset
fcn.1000d410:
sym.imp.elf_getdata
sym.imp.__assert_fail
sym.imp.error
fcn.1000f620:
sym.imp.__assert_fail
fcn.10003320:
fcn.100030f0
sym.imp.elf_flagscn
fcn.100033d0:
fcn.100030f0
fcn.100016d0:
sym.imp.abort
fcn.100016e0:
sym.imp.abort
fcn.10003820:
fcn.100030f0
sym.imp.elf_flagscn
fcn.100036e0:
fcn.100030f0
fcn.100139b0:
sym.imp.qsort
fcn.10003230:
fcn.100030f0
sym.imp.elf_flagscn
fcn.100032c0:
fcn.100030f0
fcn.10003450:
fcn.100030f0
sym.imp.elf_flagscn
fcn.100038d0:
fcn.100030f0
sym.imp.elf_flagscn
fcn.10003770:
fcn.100030f0
fcn.100034d0:
fcn.100030f0
fcn.10003630:
fcn.100030f0
sym.imp.elf_flagscn
fcn.1001ce70:
sym.imp.error
fcn.10003430
fcn.100033b0
fcn.1001d690:
fcn.100033b0
sym.imp.__assert_fail
fcn.10002ff0:
sym.imp.gelf_fsize
fcn.10002e00
fcn.10025f80
fcn.10025b30
sym.imp.gelf_getsym
fcn.1000b8e0:
sym.imp.calloc
fcn.10025b30
fcn.1000cbf0
fcn.10025f80
sym.imp.error
fcn.1000c650
sym.imp.free
sym.imp.__assert_fail
fcn.1000cb20
fcn.1000c490
sym.imp.qsort
fcn.1000b3e0:
sym.imp.calloc
sym.imp.error
fcn.1000b6c0:
sym.imp.malloc
fcn.1000cb20
sym.imp.error
sym.imp.calloc
fcn.1000b540:
fcn.1000c440
sym.imp.calloc
sym._init:
loc.imp.__gmon_start
fcn.100015e0
fcn.100264c0
EOF
RUN
NAME=ppc-elf
FILE=bins/elf/analysis/elf-ppc-execstack
CMDS=<<EOF
e asm.flags=false
e asm.bytes=true
pdq 4
EOF
EXPECT=<<EOF
0x100014e0 7c290b78 mr r9, r1
0x100014e4 54210036 rlwinm r1, r1, 0, 0, 0x1b
0x100014e8 38000000 li r0, 0
0x100014ec 9421fff0 stwu r1, -0x10(r1)
EOF
RUN
NAME=ppc-elf entry0 name issue
FILE=bins/elf/analysis/elf-ppc-execstack
CMDS=<<EOF
echo
e asm.flags=true
e asm.bytes=true
pdq 1
af
afi~name[1]
EOF
EXPECT=<<EOF
0x100014e0 section..text:
0x100014e0 7c290b78 mr r9, r1
entry0
EOF
RUN
NAME=ppc-elf relocs
FILE=bins/elf/analysis/elf-ppc-execstack
CMDS=<<EOF
s 0x10001500
pi 1
EOF
EXPECT=<<EOF
b sym.imp.__libc_start_main
EOF
RUN
NAME=ppc-update-suffix-esil
FILE=bins/elf/a6ppc.out
CMDS=<<EOF
40ds
ar r3
ar r4
10ds
ar r3
ar r4
EOF
EXPECT=<<EOF
r3 = 0x0000ffbf
r4 = 0x10010107
r3 = 0x0000ffc1
r4 = 0x1001010a
EOF
RUN
NAME=ppc-detect-vtables
FILE=bins/elf/ppc_classes
CMDS=<<EOF
av
EOF
EXPECT=<<EOF
Vtable Found at 0x100016d4
0x100016d4 : No Name found
0x100016d8 : No Name found
0x100016dc : No Name found
Vtable Found at 0x100016e8
0x100016e8 : No Name found
0x100016ec : No Name found
0x100016f0 : No Name found
Vtable Found at 0x100016fc
0x100016fc : No Name found
0x10001700 : No Name found
0x10001704 : No Name found
Vtable Found at 0x10001710
0x10001710 : No Name found
0x10001714 : No Name found
0x10001718 : No Name found
0x1000171c : No Name found
0x10001720 : No Name found
Vtable Found at 0x1000172c
0x1000172c : No Name found
0x10001730 : No Name found
0x10001734 : No Name found
0x10001738 : No Name found
0x1000173c : No Name found
Vtable Found at 0x10001748
0x10001748 : No Name found
0x1000174c : No Name found
0x10001750 : No Name found
0x10001754 : No Name found
0x10001758 : No Name found
Vtable Found at 0x10001764
0x10001764 : No Name found
0x10001768 : No Name found
0x1000176c : No Name found
EOF
RUN
NAME=aoj f0ff2194
FILE==
CMDS=<<EOF
e asm.arch=ppc
e asm.bits=64
wx f0ff2194
aoj~{}
EOF
EXPECT=<<EOF
[
{
"opcode": "stwu r1, -0x10(r1)",
"disasm": "stwu r1, -0x10(r1)",
"pseudo": "word[r1 - 0x10] = r1",
"description": "Store Word with Update",
"mnemonic": "stwu",
"mask": "ffffffff",
"esil": "r1,-16,r1,+,=[4],-16,r1,+=",
"rzil": {
"opcode": "seq",
"x": {
"opcode": "storew",
"mem": 0,
"key": {
"opcode": "+",
"x": {
"opcode": "var",
"value": "r1"
},
"y": {
"opcode": "let",
"dst": "v",
"exp": {
"opcode": "bitv",
"bits": "0xfff0",
"len": 16
},
"body": {
"opcode": "ite",
"condition": {
"opcode": "msb",
"bv": {
"opcode": "var",
"value": "v"
}
},
"x": {
"opcode": "cast",
"value": {
"opcode": "var",
"value": "v"
},
"length": 64,
"fill": {
"opcode": "msb",
"bv": {
"opcode": "var",
"value": "v"
}
}
},
"y": {
"opcode": "cast",
"value": {
"opcode": "var",
"value": "v"
},
"length": 64,
"fill": {
"opcode": "bool",
"value": false
}
}
}
}
},
"value": {
"opcode": "cast",
"value": {
"opcode": "var",
"value": "r1"
},
"length": 32,
"fill": {
"opcode": "bool",
"value": false
}
}
},
"y": {
"opcode": "set",
"dst": "r1",
"src": {
"opcode": "+",
"x": {
"opcode": "var",
"value": "r1"
},
"y": {
"opcode": "let",
"dst": "v",
"exp": {
"opcode": "bitv",
"bits": "0xfff0",
"len": 16
},
"body": {
"opcode": "ite",
"condition": {
"opcode": "msb",
"bv": {
"opcode": "var",
"value": "v"
}
},
"x": {
"opcode": "cast",
"value": {
"opcode": "var",
"value": "v"
},
"length": 64,
"fill": {
"opcode": "msb",
"bv": {
"opcode": "var",
"value": "v"
}
}
},
"y": {
"opcode": "cast",
"value": {
"opcode": "var",
"value": "v"
},
"length": 64,
"fill": {
"opcode": "bool",
"value": false
}
}
}
}
}
}
},
"sign": false,
"prefix": 0,
"id": 594,
"opex": {
"operands": [
{
"type": "reg",
"value": "r1"
},
{
"type": "mem",
"base": "r1",
"disp": -16
}
]
},
"addr": 0,
"bytes": "f0ff2194",
"size": 4,
"type": "store",
"esilcost": 12,
"scale": 0,
"refptr": 0,
"cycles": 0,
"failcycles": 0,
"delay": 0,
"stack": "inc",
"stackptr": 16,
"family": "cpu"
}
]
EOF
RUN
NAME=ppc vle big-endian
FILE=bins/firmware/ppc-big-endian-vle.bin
CMDS=<<EOF
e asm.arch=ppc
e asm.bits=32
e asm.cpu=vle
e cfg.bigendian=true
pd 10
echo ensure that the endianness is kept
pd 10
EOF
EXPECT=<<EOF
0x00000000 se_mflr r0
0x00000002 e_stwu r1 0xfffffff0(r1)
0x00000006 se_stw r31 0xc(r1)
0x00000008 se_stw r0 0x14(r1)
0x0000000a se_cmpi r4 0x0
0x0000000c e_li r11 0x0
,=< 0x00000010 e_beq cr0 0x212
| 0x00000014 e_addi r10 r4 0xffffffff
| 0x00000018 e_srwi r10 r10 0x2
| 0x0000001c e_addi r7 r10 0x2
ensure that the endianness is kept
0x00000000 se_mflr r0
0x00000002 e_stwu r1 0xfffffff0(r1)
0x00000006 se_stw r31 0xc(r1)
0x00000008 se_stw r0 0x14(r1)
0x0000000a se_cmpi r4 0x0
0x0000000c e_li r11 0x0
,=< 0x00000010 e_beq cr0 0x212
| 0x00000014 e_addi r10 r4 0xffffffff
| 0x00000018 e_srwi r10 r10 0x2
| 0x0000001c e_addi r7 r10 0x2
EOF
RUN