From f54d09dca465c94fb5b02d13a3b31c35ac4b3b67 Mon Sep 17 00:00:00 2001 From: protolambda <proto@protolambda.com> Date: Tue, 18 Apr 2023 15:44:41 +0200 Subject: [PATCH] mipsevm: test unicorn works --- mipsevm/unicorn_crash_test.go | 23 ----------------------- mipsevm/unicorn_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 23 deletions(-) delete mode 100644 mipsevm/unicorn_crash_test.go create mode 100644 mipsevm/unicorn_test.go diff --git a/mipsevm/unicorn_crash_test.go b/mipsevm/unicorn_crash_test.go deleted file mode 100644 index d9ee01053..000000000 --- a/mipsevm/unicorn_crash_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "log" - "testing" - - uc "github.com/unicorn-engine/unicorn/bindings/go/unicorn" -) - -func TestUnicornCrash(t *testing.T) { - mu, err := uc.NewUnicorn(uc.ARCH_MIPS, uc.MODE_32|uc.MODE_BIG_ENDIAN) - if err != nil { - log.Fatal(err) - } - - // weird heap grooming (doesn't crash without this) - junk := make(map[uint32](uint32)) - for i := 0; i < 1000000; i += 4 { - junk[uint32(i)] = 0xaaaaaaaa - } - - mu.Start(0, 4) -} diff --git a/mipsevm/unicorn_test.go b/mipsevm/unicorn_test.go new file mode 100644 index 000000000..73bf86459 --- /dev/null +++ b/mipsevm/unicorn_test.go @@ -0,0 +1,24 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/require" + uc "github.com/unicorn-engine/unicorn/bindings/go/unicorn" +) + +// TestUnicorn test that unicorn works +func TestUnicorn(t *testing.T) { + mu, err := NewUnicorn() + require.NoError(t, err) + defer mu.Close() + + require.NoError(t, mu.MemMap(0, 4096)) + require.NoError(t, mu.RegWrite(uc.MIPS_REG_RA, 420), "set RA to addr that is multiple of 4") + require.NoError(t, mu.MemWrite(0, []byte{0x03, 0xe0, 0x00, 0x08}), "jmp $ra") + + require.NoError(t, RunUnicorn(mu, 0, 1)) + pc, err := mu.RegRead(uc.MIPS_REG_PC) + require.NoError(t, err) + require.Equal(t, uint64(420), pc, "jumped") +} -- 2.23.0