为避免合约执行一些恶意行为,智能合约将它们放到一个 虚拟机 内执行,这个虚拟机没有权限访问文件系统、网络、磁盘等等资源。以太坊也很好地展现了虚拟机的可移植性特性,因为以太坊节点可以运行在多种计算机和操作系统上。使用虚拟机 使得智能合约的编写无需考虑将在什么平台运行。 2. LC-3 架构 我们的虚拟机将会模拟...
虚拟机不必很大或者能适应各种场景,老式的视频游戏 经常使用很小的虚拟机来提 供简单的脚本系统(scripting systems)。 虚拟机还适用于在一个安全的或隔离的环境中执行代码。一个例子就是垃圾回收(GC)。要在 C 或 C++ 之上实现一个自动垃圾回收机制并不容易 ,因为程序无法看到它自身的栈或变量。但是,虚拟机是在它...
虚拟机不必很大或者能适应各种场景,老式的视频游戏 经常使用很小的虚拟机来提 供简单的脚本系统(scripting systems)。 虚拟机还适用于在一个安全的或隔离的环境中执行代码。一个例子就是垃圾回收(GC)。要在 C 或 C++ 之上实现一个自动垃圾回收机制并不容易 ,因为程序无法看到它自身的栈或变量。但是,虚拟机是在它...
假设我们的虚拟机有一组寄存器:A,B,C,D,E和F,且这些都是通用寄存器,这意味着它们可以用于存储任何东西。这与专用寄存器不同,例如在x86上,ip, flag, ds, …程序是只读指令集。如果虚拟机是一个基于栈的虚拟机,这意味着它有一个我们可以压栈和弹出值的栈,另外,该虚拟机还有一些我们也可以使用的寄存器。基于...
现在我实现了虚拟机的读取、解码、执行的过程。但是要记住,我没有解码任何东西,因为我给出的是原始指令。 获取当前指令 因为我已将程序存储为一个数组,所以获取当前指令很简单。虚拟机有一个计数器,通常称为程序计数器,不过有时也叫做指令指针等,通常它们分别缩写为PC或IP。
[译] 400 行 C 代码实现一个虚拟机(2018)arthurchiao.art/blog/write-your-own-virtual-machine-zh/ 操作后的一些补充记录。完整代码现已上传 github,可以参考: https://github.com/zchrissirhcz/cpp-moments/tree/main/LC3-virtual-machinegithub.com/zchrissirhcz/cpp-moments/tree/main/LC3-virtual-...
虚拟机不必很大或者能适应各种场景,老式的视频游戏 经常使用很小的虚拟机来提 供简单的脚本系统(scripting systems)。 虚拟机还适用于在一个安全的或隔离的环境中执行代码。一个例子就是垃圾回收(GC)。要在 C 或 C++ 之上实现一个自动垃圾回收机制并不容易 ,因为程序无法看到它自身的栈或变量。但是,虚拟机是在它...
…程序是只读指令集。如果虚拟机是一个基于栈的虚拟机,这意味着它有一个我们可以压栈和弹出值的栈,另外,该虚拟机还有一些我们也可以使用的寄存器。基于栈的虚拟机比基于寄存器的虚拟机实现起来要简单得多。 下面是我将要实施的一个指令集的示例: PSH 5 ; pushes 5 to the stack ...
本文将教你编写一个自己的虚拟机(VM),这个虚拟机能够运行汇编语言编写的程序, 例如我朋友编写的 2048 或者我自己的 Roguelike。