Loading repository data…
Loading repository data…
EricYT / repository
TinyVM-go is a small, fast, lightweight virtual machine written in pure Go. The project is inspired by https://github.com/jakogut/tinyvm.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
TinyVM-Go is a virtual machine with the goal of having a small footprint. Translating the source code into bytecodes that we can operate.
TinyVM-Go is inspired by the project [tinyvm] (https://github.com/jakogut/tinyvm) and implemented it in pure go.
Run
go get -v github.com/EricYT/tinyvm-go
cd $GOPATH/src/github.com/EricYT/tinyvm-go
make
or
make build
to complie these codes. This will use a docker image to build it, with
the current directory volume-mounted into place. This will store incrmental
state for the fastest possible build.
Run make all-build to build for all architectures.
Run make clean to clean up.
The program source file ./programs/tinyvm/jsr.vm
print_eax:
push ebp
mov ebp, esp
prn eax
pop ebp
ret
start:
mov eax, 42
call print_eax
mov eax, 23
call print_eax
Run
./bin/amd64/tvm ./programs/tinvm/jsr.vm
2018/01/11 21:26:10 Prepare to interpret the file programs/tinyvm/jsr.vm
42
23
There a simple debug tool named tdb inspired by gdb.
$ cat ./programs/tinyvm/jsr.vm
print_eax:
push ebp
mov ebp, esp
prn eax
pop ebp
ret
start:
mov eax, 42
call print_eax
mov eax, 23
call print_eax
$ ./bin/amd64/tdb programs/tinyvm/jsr.vm
2018/01/11 21:32:10 Prepare to interpret the file programs/tinyvm/jsr.vm
tdb >: bs 1
WARNING: "bs" is not a valid command.
tdb >: break 1
tdb >: run
BreakPoint hit at address: 1
tdb >: instr
Instruction index 1: mov ebp esp
tdb >: args
current program eip: 1 opcode: 2 instruction: mov
args: 67108864 67108862
tdb >: infos
register infos:
register eax value: i32: 42 i32Ptr is nil
register ebx value: i32: 0 i32Ptr is nil
register ecx value: i32: 0 i32Ptr is nil
register edx value: i32: 0 i32Ptr is nil
register esi value: i32: 0 i32Ptr is nil
register edi value: i32: 0 i32Ptr is nil
register esp value: i32: 67108862 i32Ptr is nil
register ebp value: i32: 67108864 i32Ptr is nil
register eip value: i32: 1 i32Ptr is nil
register r08 value: i32: 0 i32Ptr is nil
register r09 value: i32: 0 i32Ptr is nil
register r10 value: i32: 0 i32Ptr is nil
register r11 value: i32: 0 i32Ptr is nil
register r12 value: i32: 0 i32Ptr is nil
register r13 value: i32: 0 i32Ptr is nil
register r14 value: i32: 0 i32Ptr is nil
register r15 value: i32: 0 i32Ptr is nil
FLAGS: 0 Remainder: 0
tdb >: step
Advancing instruction pointer to 2
tdb >: step
42
Advancing instruction pointer to 3
tdb >: continue
BreakPoint hit at address: 1
tdb >: step
Advancing instruction pointer to 2
tdb >: continue
23
End of program readched.