From f6df4314945c1d37d314a7c88553b97b23c748e9 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Fri, 9 Oct 2026 21:45:05 +0200 Subject: vnf,runrom: detect bad data access MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This includes detection for: - Stack underflows (it was theoretically already there but it had never been properly tested). - Load/store out of bounds for a given variable known via the .nasm/ directory. - Load out of bounds on a set of data referenced via a raw label (see commit aa5174fc055d ("xixanta: Add an hint for the ending of data labels")). Signed-off-by: Miquel Sabaté Solà --- tests/expected/runrom/overflow-arithmetics.txt | 6 ++++++ tests/expected/runrom/overflow-data-indexing.txt | 10 ++++++++++ tests/expected/runrom/overflow-reset.txt | 8 ++++++++ tests/expected/runrom/overflow-stack.txt | 6 ++++++ 4 files changed, 30 insertions(+) create mode 100644 tests/expected/runrom/overflow-arithmetics.txt create mode 100644 tests/expected/runrom/overflow-data-indexing.txt create mode 100644 tests/expected/runrom/overflow-reset.txt create mode 100644 tests/expected/runrom/overflow-stack.txt (limited to 'tests/expected/runrom') diff --git a/tests/expected/runrom/overflow-arithmetics.txt b/tests/expected/runrom/overflow-arithmetics.txt new file mode 100644 index 0000000..3eadfae --- /dev/null +++ b/tests/expected/runrom/overflow-arithmetics.txt @@ -0,0 +1,6 @@ + PC: $8011, cycles: 7, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----I-- +ldx #$01 PC: $8013, cycles: 9, registers: [a: $00, x: $01, y: $00, sp: $FD], status: ----I-- + +@: +lda $0F, x PC: $8013, cycles: 9, registers: [a: $00, x: $01, y: $00, sp: $FD], status: ----I-- +error: out of bounds: indexed access to $0010 falls out of 'zp_buffer' ($00-$10; bounded inclusively below and exclusively above) diff --git a/tests/expected/runrom/overflow-data-indexing.txt b/tests/expected/runrom/overflow-data-indexing.txt new file mode 100644 index 0000000..469a265 --- /dev/null +++ b/tests/expected/runrom/overflow-data-indexing.txt @@ -0,0 +1,10 @@ + PC: $801B, cycles: 7, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----I-- +ldx #$00 PC: $801D, cycles: 9, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----IZ- +lda $8028, x PC: $8020, cycles: 13, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----IZ- +clc PC: $8021, cycles: 15, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----IZ- +adc #$04 PC: $8023, cycles: 17, registers: [a: $04, x: $00, y: $00, sp: $FD], status: ----I-- +tax PC: $8024, cycles: 19, registers: [a: $04, x: $04, y: $00, sp: $FD], status: ----I-- + +@: +lda $8028, x PC: $8024, cycles: 19, registers: [a: $04, x: $04, y: $00, sp: $FD], status: ----I-- +error: out of bounds: indexed access to $802C falls out of 'bad_rom_data_indexing::data' ($8028-$802C; bounded inclusively below and exclusively above) diff --git a/tests/expected/runrom/overflow-reset.txt b/tests/expected/runrom/overflow-reset.txt new file mode 100644 index 0000000..6097a9c --- /dev/null +++ b/tests/expected/runrom/overflow-reset.txt @@ -0,0 +1,8 @@ + PC: $8000, cycles: 7, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----I-- +ldx #$00 PC: $8002, cycles: 9, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----IZ- +lda $00, x PC: $8004, cycles: 13, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----IZ- +dex PC: $8005, cycles: 15, registers: [a: $00, x: $FF, y: $00, sp: $FD], status: ----I-- + +@: +lda $00, x PC: $8005, cycles: 15, registers: [a: $00, x: $FF, y: $00, sp: $FD], status: ----I-- +error: out of bounds: indexed access to $00FF falls out of 'zp_buffer' ($00-$10; bounded inclusively below and exclusively above) diff --git a/tests/expected/runrom/overflow-stack.txt b/tests/expected/runrom/overflow-stack.txt new file mode 100644 index 0000000..3a00e0a --- /dev/null +++ b/tests/expected/runrom/overflow-stack.txt @@ -0,0 +1,6 @@ + PC: $8016, cycles: 7, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----I-- +lda #$00 PC: $8018, cycles: 9, registers: [a: $00, x: $00, y: $00, sp: $FD], status: ----IZ- + +@: +pha PC: $8018, cycles: 9, registers: [a: $00, x: $00, y: $00, sp: $FC], status: ----IZ- +error: stack underflow! -- cgit v1.2.3