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.
247 lines
2.6 KiB
Text
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
|