https://github.com/ringtailsoftware/uvm32
uvm32是一款极简、无依赖的虚拟机沙箱,专为微控制器及其他资源受限设备设计。采用单文件C语言实现,无动态内存分配,采用异步架构,完全兼容C99标准。在STM32L0(ARM Cortex-M0+)平台上,其存储占用低于3KB闪存/1KB RAM。
uvm32本质上是封装了管理接口的RISC-V模拟器,并提供配套工具链以构建可在其中运行的高效代码。
应用场景
1、作为嵌入式脚本引擎(Lua、Duktape、MicroPython等)的轻量替代方案
2、作为隔离系统中不可信或不稳定组件的安全沙箱
3、在目标平台缺乏编译器的场景下,支持使用现代系统编程语言开发(如Rust示例)
4、实现"一次编写,随处运行",避免维护多版本软件
核心特性
1、提供C、Zig、Rust及汇编语言的字节码示例程序
2、非阻塞设计,防止异常字节码阻塞主机系统
3、不预设主机IO能力(无标准IO依赖)
4、简洁而明确执行模型
5、安全的最小化类型FFI接口
6、既可满足简单脚本/插件需求,亦能支持复杂场景
安全性优先于速度,确保虚拟机内的异常代码永远不会导致主机崩溃,虽基于完整CPU模拟器实现,但专注于执行自定义脚本逻辑,而非硬件模拟
与同类方案的比较
现有许多适用于小型系统的脚本语言与虚拟机都在不同维度做出了权衡取舍。
uvm32致力于:
1、极小资源占用(适配嵌入式设备、游戏及应用)
2、支持使用成熟编程语言开发虚拟机代码(配备高质量开发工具)
3、易于集成至现有软件体系
4、支持多种编程范式(事件驱动、轮询、多处理器)
对异常虚拟机代码具备强容错性
uvm32不追求:
1、零摩擦FFI(主机与虚拟机代码间无直接函数调用)
2、极限运行效率
3、最简单的脚本开发体验(需要完整的开发-编译-运行周期)
"开箱即用"的标准IO、网络等功能库
项目结构说明
uvm32是微型虚拟机的核心实现,所有代码均位于uvm32目录中。
host-mini展示了运行虚拟机代码的最简主机示例。
其余目录均为进阶主机示例,或可供主机运行的示例应用程序。
uvm32一款极简、无依赖的虚拟机沙盒,支持动态加载APP,仅需3KB Flash/1KB RAM
张小明
前端开发工程师
22、Procmail正则表达式与高级应用指南
Procmail正则表达式与高级应用指南 1. 正则表达式简介 在处理数据时,正则表达式是一项强大的工具。Procmail实现的正则表达式形式与其他UNIX实用程序略有不同。Procmail的匹配默认情况下不区分大小写,除非使用D标志,正则表达式也是如此,并且默认使用多行匹配。 简单来说…
ModAssistant:Beat Saber模组管理的终极解决方案
ModAssistant:Beat Saber模组管理的终极解决方案 【免费下载链接】ModAssistant Simple Beat Saber Mod Installer 项目地址: https://gitcode.com/gh_mirrors/mo/ModAssistant 还在为Beat Saber模组安装的复杂流程而头疼吗?ModAssistant用智能化…
1、开源软件许可决策指南
开源软件许可决策指南 1. 软件许可决策的重要性 当你开发出一款出色的软件并打算向公众发布时,一个关键的决策摆在面前:为软件选择何种许可。这一决策会产生多方面的重要影响,比如: - 用户使用软件的方式。 - 代码是否对他人可见。 - 其他开发者能否利用代码创建自己的…
29、邮件服务器安全防护与备份策略
邮件服务器安全防护与备份策略 1. 杀毒保护 1.1 freshclam更新病毒库 freshclam借助DNS系统获取最新病毒数据库版本的详细信息,包括是否有新版本可下载以及下载地址。多数情况下,仅与DNS服务器进行检查,以此显著减轻本地和远程系统的负载。只有当有新版本可用时,才会尝试…
yt-dlp-gui终极指南:3步轻松下载网络视频的免费神器
想要快速下载网络视频却不想面对复杂的命令行?yt-dlp-gui正是你需要的解决方案!这个基于强大yt-dlp引擎的Windows图形界面工具,让视频下载变得像点击鼠标一样简单。无论是高清视频、音频文件还是字幕,都能一键获取,完全…
EmotiVoice能否用于语音闹钟定制?唤醒语个性化设置
EmotiVoice能否用于语音闹钟定制?唤醒语个性化设置 在清晨的第一缕光还未照进房间时,大多数人经历的不是温柔苏醒,而是刺耳铃声的突然袭击。这种粗暴的唤醒方式不仅容易引发焦虑和烦躁,长期下来还可能影响情绪与睡眠质量。于是&am…