EFI Byte Code Virtual Machine in Userspace
ebcvm is a usermode EFI Byte Code (EBC) virtual machine. It supports all EBC instructions described in UEFI Specification. It also supports a few UEFI native code emulations and a simple debugger.
To build ebcvm, simply run:
$ make
This will build following executables.
- ebcvm: EBC VM
- tools/ebcdisas: Disassembler for EBC binaries
- tools/fnv1: Fowler-Noll-Vo hash tool
To run tests, run:
$ make test
Usage: ./ebcvm [OPTION] FILE
EFI Byte Code Interpreter
[OPTION]
--debug={0,1} debug mode
--mem=INT size of memory
--stack=INT size of stack
--heap=INT size of heap
--step={0,1} step execution
--reloc={0,1} relocate sections
--help show this help
Since there is no single EBC binary available in public, we created an EBC backend for ELVM.
To test EBC backend, run:
$ export PATH=`pwd`:$PATH
$ git clone https://github.com/retrage/elvm.git
$ cd elvm && git checkout retrage/ebc-v2
$ make ebc
The ELVM EBC backend will generate EBC binaries from EIR and C source code using modified 8cc.
ebcvm has following native code emulations:
- EFI_BOOT_SERVICES.AllocatePool()
- EFI_SYSTEM_TABLE.ConIn.ReadKeyStroke()
- EFI_SYSTEM_TABLE.ConOut.OutputString()
ebcvm is released under the MIT license.