Commit f54d09dc authored by protolambda's avatar protolambda

mipsevm: test unicorn works

parent f176f263
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)
}
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")
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment