目录
QEMU
MDT
HQEMU
补充
Valgrind
包括
CrossBit
补充
MTCrossBit
Strata-ARM
Box86
HQEMU
SymQEMU
QEMU
静态二进制翻译器
是一个开源的多平台的虚拟器,能够在软件中模拟一台机器
KVM(Kernel-based Virtual Machine)是 Linux 内核的一个模块,使 Linux 成为一个虚拟机监控器。它允许用户在 Linux 系统上创建和管理虚拟机
QEMU可以与Xen和KVM管理程序集成,以提供仿真硬件,同时允许管理程序管理CPU
当QEMU直接模拟cpu时,它能够在不同的机器(例如x86_64 PC板)上运行为一台机器
QEMU还能够为Linux和BSD内核接口提供用户空间API虚拟化。这使得针对一种体系结构ABI(例如Linux PPC64 ABI)编译的二进制文件可以在使用不同体系结构ABI(例如Linux x86_64 ABI)的主机上运行。这不涉及任何硬件仿真,只涉及CPU和系统调用仿真。
QEMU 现有的寄存器分配机制忽略了指令前后之间的联系,在实际进行寄存器分配时,出现了部分寄存器重复使用部分寄存器闲置的情况,这产生了因不必要的寄存器溢出而引起的冗余访存指令
MDT
基于 QEMU 设计并实现的多线程动态二进制翻译系统 MDT
利用多线程并行框架,采用预翻译和窥孔优化等手段,实现了 x86 平台上二进制可执行程序到
Alpha 平台的程序移植
HQEMU
多线程动态二进制翻译器 HQEMU,同样是基于 QEMU实现的,
其采用了 QEMU 的前端解码模块和中间代码优化模块,将 QEMU 的后端编码模块替换为 LLVM 优化编译器。HQEMU 通过将前后端分别固定在不同的核中,实现了翻译过程和执行过程的并行,有效的提升了 HQEMU 系统的翻译性能。
在进行翻译时,HQEMU 首先使用核心 1- m-2 运行源平台上的应用,在翻译执行的过
程中将热代码放入 FIFO 队列;之后在核心 m-1 上运行 LLVM 翻译器,在核心 m 上运行优
化器,并将优化后的代码存入追踪缓存之中,生成执行轮廓文件。追踪缓存存储优化后的
代码,优化后的代码能够传递到块代码缓存中用以加速执行;与此同时,块代码缓存中的
代码可以被复制到追踪缓存中进行优化,以提高程序的执行效率
FD-SQEMU
基于 QEMU 的跨平台的反馈式静态二进制翻译器 FD-SQEMU(feedback static QEMU)
解决代码发现和代码定位问题,解决多进程 MPI 和多线程 Pthreads 并行程序的翻译问题
实现本地库函数替换源平台库函数,从而避免对源平台库函数的翻译
结合传统编译器和二进制翻译器中寄存器分配方法,引入全局寄存器静态分配和局部寄存器动态分配思想,提出了基于优先级的动静结合寄存器分配算法,解决QEMU中寄存器重复访问和闲置问题
补充
Xen 和 KVM 是两种流行的虚拟化技术,它们允许在单一物理硬件上同时运行多个虚拟机(VM)
Xen 是一个开源的虚拟机监控器(hypervisor)
API(应用程序编程接口,Application Programming Interface)是一组定义了软件应用程序之间交互的规则和协议。API 允许不同的软件组件之间进行通信,简化了软件开发的过程
Valgrind
基于VEX IR(VEX Intermediate Representation)中间表达式转换, 重量级代码插桩与分析工具
是一个用于构建动态分析工具的框架
使用平台:
- X86/Linux - AMD64/Linux - PPC32/Linux - PPC64/Linux - ARM/Linux - x86/MacOSX - AMD64/MacOSX - S390X/Linux - MIPS32/Linux - MIPS64/Linux
包括
The Valgrind distribution currently includes six production-quality
tools:
a memory error detector, (内存错误检测器)
two thread error detectors,(两个线程错误检测器)
a cacheand branch-prediction profiler, (一个缓存分支预测分析器)
a call-graph generating cache abdbranch-prediction profiler, (一个调用图生成缓存分支预测分析器)
a heap profiler. (堆分析器)
It also includes three experimental tools:
a heap/stack/global array overrun detector, (堆/堆栈/全局数组溢出检测器)
a different kind of heap profiler, (一种不同类型的堆分析器)
a SimPoint basic block vectorgenerator.(SimPoint基本块矢量生成器)
CrossBit
源平台:MIPS, x86, Sparc
目标平台: Power, x86, Sparc
是一个与逆向工程和漏洞分析(动态分析和静态分析)相关的工具或框架,帮助分析和理解二进制文件(如可执行文件和库)
支持多平台(如 x86、ARM 等)
有GUI界面,减少命令行依赖
多线程翻译, 基于Vlnst低层次的虚拟中间表示层
补充
Vlnst(Vulnerability Instantiation)是一个专注于漏洞分析的工具或框架,通常用于帮助安全研究人员和开发者识别、分析和修复软件中的安全漏洞
MTCrossBit
是基于串行动态二进制翻译器 CrossBit 实现的
该框架在热路径的识别和优化过程中引入了多线程技术,通
过指定主从线程工作于不同核上的方法,避免了线程竞争造成的工作效率降低的问题。
Strata-ARM
源平台:ARM ARM
目标平台:IA-32 D
动态翻译应用于嵌入式系统, 间接跳转优化
Box86
在非x86 Linux系统上运行x86 Linux程序(比如游戏),比如ARM(主机系统需要是32位小端)
大多数x86游戏都需要OpenGL,所以在ARM平台上,像gl4es这样的解决方案可能是必要的。
应该安装ccache并用它来构建Box86
您应该安装ccache并用它来构建Box86。(以ccmake为例。)要启用TRACE(即转储所执行的所有单个x86指令,并转储寄存器),您还需要在系统上提供Zydis库。
If you are serious about developing Box86, you should install ccache and build Box86 with it. (Use ccmake for example.) To enable TRACE (i.e. dumping to stdout all individual x86 instructions executed, with dump of registers), you'll also need Zydis library available on your system.
源平台:x86, x86-64
目标平台:ARM64, RISC-V
HQEMU
是一个多核可重目标的多线程动态二进制转换器
它集成了QEMU和LLVM作为其构建块
HQEMU可以实现较低的翻译开销和良好的翻译代码质量。
HQEMU支持进程级仿真和全系统虚拟化。它提供了在一个进程中运行QEMU转换器和LLVM优化器的转换模式,或者将LLVM优化器作为独立的优化服务器运行
SymQEMU
一个基于QEMU和SymCC的纯二进制符号执行器
灵活性强
源平台:x86-64, AArch64
目标平台:x86-64, AArch64
接受指向SymCC源代码和二进制文件的指针