From b0454fa2949b456eaf3e39cf29e9f13eb8f3e17e Mon Sep 17 00:00:00 2001 From: George Hotz <geohot@gmail.com> Date: Thu, 30 Sep 2021 15:55:16 -0700 Subject: [PATCH] minigeth is running in mipsevm --- mipsevm/main.go | 18 +++++++++++++----- mipsevm/minigeth.sh | 5 +++++ risc/run.py | 15 ++++++++++----- 3 files changed, 28 insertions(+), 10 deletions(-) create mode 100755 mipsevm/minigeth.sh diff --git a/mipsevm/main.go b/mipsevm/main.go index 8fc7b4311..1a9fd1f96 100644 --- a/mipsevm/main.go +++ b/mipsevm/main.go @@ -94,7 +94,7 @@ type jsoncontract struct { //var ram []byte //var regs [4096]byte -var debug bool = false +var debug int = 0 var ram map[uint64](uint32) func opStaticCall(pc *uint64, interpreter *vm.EVMInterpreter, scope *vm.ScopeContext) ([]byte, error) { @@ -119,14 +119,17 @@ func opStaticCall(pc *uint64, interpreter *vm.EVMInterpreter, scope *vm.ScopeCon //scope.Memory.GetPtr(int64(inOffset.Uint64()), int64(inSize.Uint64())) ret := common.BigToHash(big.NewInt(int64(nret))).Bytes() - if debug { + if debug >= 2 { fmt.Println("HOOKED READ! ", fmt.Sprintf("%x = %x", addr, nret)) } + if addr == 0xc0000080 && debug >= 1 { + fmt.Printf("PC %x\n", nret) + } scope.Memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) } else if args[0] == 184 { addr := common.BytesToHash(args[0x24:0x44]).Big().Uint64() dat := common.BytesToHash(args[0x44:0x64]).Big().Uint64() - if debug { + if debug >= 2 { fmt.Println("HOOKED WRITE! ", fmt.Sprintf("%x = %x", addr, dat)) } ram[addr] = uint32(dat) @@ -218,8 +221,13 @@ func main() { //debug = true if len(os.Args) > 1 { - debug = true - runTest(os.Args[1], 20, interpreter, bytecode) + if os.Args[1] == "/tmp/minigeth.bin" { + debug = 1 + runTest(os.Args[1], 20, interpreter, bytecode) + } else { + debug = 2 + runTest(os.Args[1], 20, interpreter, bytecode) + } } else { files, err := ioutil.ReadDir("test/bin") if err != nil { diff --git a/mipsevm/minigeth.sh b/mipsevm/minigeth.sh new file mode 100755 index 000000000..f7eb735dd --- /dev/null +++ b/mipsevm/minigeth.sh @@ -0,0 +1,5 @@ +#!/bin/bash -e +(cd ../ && npx hardhat compile) +(cd ../risc && ./build.sh && COMPILE=1 ./run.py) +go build +./mipsevm /tmp/minigeth.bin diff --git a/risc/run.py b/risc/run.py index f56fc9664..7dca778f1 100755 --- a/risc/run.py +++ b/risc/run.py @@ -24,9 +24,6 @@ mu = Uc(UC_ARCH_MIPS, UC_MODE_32 + UC_MODE_BIG_ENDIAN) mregs = [UC_MIPS_REG_AT, UC_MIPS_REG_V0, UC_MIPS_REG_V1, UC_MIPS_REG_A0, UC_MIPS_REG_A1, UC_MIPS_REG_A2, UC_MIPS_REG_A3] regs = ["at", "v0", "v1", "a0", "a1", "a2", "a3"] -SIZE = 16*1024*1024 - - heap_start = 0x20000000 # 0x20000000-0x30000000 # input oracle @ 0x30000000 # output oracle @ 0x30000800 @@ -279,7 +276,9 @@ elf.seek(0) #print(hex(rte)) # program memory (16 MB) -mu.mem_map(0, SIZE) +prog_size = (len(data)+0xFFF) & ~0xFFF +mu.mem_map(0, prog_size) +print("malloced 0x%x for program" % prog_size) # heap (256 MB) @ 0x20000000 mu.mem_map(heap_start, 256*1024*1024) @@ -369,8 +368,14 @@ mu.hook_add(UC_HOOK_INTR, hook_interrupt) if tracelevel == 4: start_instrumenting() +with open("/tmp/minigeth.bin", "wb") as f: + f.write(mu.mem_read(0, prog_size)) + +if os.getenv("COMPILE", None) == "1": + exit(0) + try: - mu.emu_start(entry, SIZE) + mu.emu_start(entry, -1) except unicorn.UcError: pass -- 2.23.0