rizin/test/db/rzil/6502
Florian Märkl 114667a34e [RzIL] Implement 6502 Lifting
This adds RzIL lifting for all legal 6502 ops, except the special bcd
modes of adc and sbc for now. The lifting of every one of these ops is
covered by an asm test, making sure all IL is valid. Some manual
execution tests are available too, including one that runs a simple
real-world xor-"decryption" loop.
The lifting has not been tested against traces yet, so minor mistakes in
the semantics are currently expected.
2022-01-16 03:21:49 +01:00

247 lines
2.6 KiB
Text

NAME=6502 addr imm
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
wx a942
aezi
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x00000042
EOF
RUN
NAME=6502 addr deref zero page
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
wx a530
wx 42 @ 0x30
aezi
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x00000042
EOF
RUN
NAME=6502 addr deref
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
wx ad3402
wx 42 @ 0x234
aezi
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x00000042
EOF
RUN
NAME=6502 addr zero page x
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
wx b5f0
wx 42 @ 0xf3
aezi
ar x=0x3
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x00000042
EOF
RUN
NAME=6502 addr zero page x, overflow
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
wx b5f0
wx 42 @ 0x03
aezi
ar x=0x13
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x00000042
EOF
RUN
NAME=6502 addr (indirect,x)
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
wx a143
wx abcd @ 0x50
wx 8a @ 0xcdab
aezi
ar x=0xd
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x0000008a
EOF
RUN
NAME=6502 addr (indirect,x), +x overflow
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
wx a143
wx abcd @ 0x33
wx 8a @ 0xcdab
aezi
ar x=0xf0
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x0000008a
EOF
RUN
NAME=6502 addr (indirect,x), +1 overflow
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
s 1
wx a143
wx ab @ 0xff
wx cd @ 0x00
wx 8a @ 0xcdab
aezi
ar x=0xbc
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x0000008a
EOF
RUN
NAME=6502 addr (indirect),y
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
wx b150
wx abcd @ 0x50
wx 8a @ 0xceaa
aezi
ar y=0xff
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x0000008a
EOF
RUN
NAME=6502 addr (indirect),y, +1 overflow
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
s 1
wx b1ff
wx ab @ 0xff
wx cd @ 0x00
wx 8a @ 0xceaa
aezi
ar y=0xff
aezs
ar a
EOF
EXPECT=<<EOF
a = 0x0000008a
EOF
RUN
NAME=6502 lda flags
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
aezi
wx a934 # lda #0x34
pi 1
aezs
ar 1
ara0
wx a900 # lda #0x00
pi 1
aezs
ar 1
ara0
wx a980 # lda #0x80
pi 1
aezs
ar 1
EOF
EXPECT=<<EOF
lda #0x34
C = 0x00000000
Z = 0x00000000
I = 0x00000000
D = 0x00000000
V = 0x00000000
N = 0x00000000
lda #0x00
C = 0x00000000
Z = 0x00000001
I = 0x00000000
D = 0x00000000
V = 0x00000000
N = 0x00000000
lda #0x80
C = 0x00000000
Z = 0x00000000
I = 0x00000000
D = 0x00000000
V = 0x00000000
N = 0x00000001
EOF
RUN
NAME=6502 jmp
FILE=malloc://0x10000
ARGS=-a 6502
CMDS=<<EOF
s 0x1234
wx 4cfeca @ 0x1234 # jmp 0xcafe
pi 1
aezi
aezs
ar
EOF
EXPECT=<<EOF
jmp 0xcafe
a = 0x00000000
x = 0x00000000
y = 0x00000000
flags = 0x00000000
sp = 0x00000000
pc = 0x0000cafe
EOF
RUN
NAME=6502 crackme.prg decrypt
FILE=bins/prg/crackme.prg
ARGS=-a 6502 -F prg
TIMEOUT=4
CMDS=<<EOF
s 0x84c
e io.cache=1
aezi
aezsu 0x84f
ps @ 0x91b
EOF
EXPECT=<<EOF
HELLO FROM RZIL
EOF
RUN