典型二进制翻译系统---用户级翻译

目录

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源代码和二进制文件的指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内螺纹销主要应用优势及应用领域

内螺纹销是一种常见的机械连接件,它通常用于连接两个或多个零件,并通过其内螺纹结构来实现紧固和定位。这种零件的设计简单却非常实用,在各种工业领域中都能找到它的身影。下面我们就来了解一下内螺纹销的主要应用优势以及它们的应用领域。 应…

华测无人船为水库库容精准测量提供解决方案

水库作为融合防洪、供水、发电及生态维护等多重功能于一体的基础设施,其库容的精准测量对于水资源管理及防洪调度的科学决策具有举足轻重的地位。然而,随着水库使用年限的增加,泥沙淤积现象的加剧以及地理信息更新的滞后,库容复核已成为确保水库安全高效运行不可或缺的一环。 当…

windows 10显示变红

症状:开机进入系统登陆界面的短时间画面都是正常的,然后整个画面渐渐变成红色。 解决方式:windows 10开启了夜间显示模式。在显示设置里关闭该模式即可。

自写ApiTools工具,功能参考Postman和ApiPost

近日在使用ApiPost的时候,发现新版本8和7不兼容,也就是说8不支持离线操作,而7可以。 我想说,我就是因为不想登录使用才从Postman换到ApiPost的。 众所周知,postman时国外软件,登录经常性抽风,…

Redis:管道

1. 面试题 如何优化频繁命令往返造成的性能瓶颈? 问题由来 edis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤: 1 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果),并监听Socket…

You have an error in your SQL syntax; check the manual that corresponds to your

You have an error in your SQL syntax; check the manual that corresponds to your 目录 You have an error in your SQL syntax; check the manual that corresponds to your 【常见模块错误】 【解决方案】 欢迎来到我的主页,我是博主英杰,211科班…

python+vue3+onlyoffice在线文档系统实战20240725笔记,首页开发

解决遗留问题 内容区域的高度没有生效,会随着菜单的高度自动变化。 解决方案:给侧边加上一个最小高度。 首页设计 另一种设计: 进来以后,是所有的文件夹和最近的文件。 有一张表格,类似于Windows目录详情&…

每日一题,力扣leetcode Hot100之560.和为K的子数组

解法一: 暴力解法循环直接判断从每个index开始的切片是否满足 class Solution:def subarraySum(self, nums: List[int], k: int) -> int:# 要求的连续子数组count 0n len(nums)for i in range(n):for j in range(i, n):if sum(nums[i:j1]) k:count 1return…

科研绘图系列:R语言山脊图(Ridgeline Chart)

介绍 山脊图(Ridge Chart)是一种用于展示数据分布和比较不同类别或组之间差异的数据可视化技术。它通常用于展示多个维度或变量之间的关系,以及它们在不同组中的分布情况。山脊图的特点: 多变量展示:山脊图可以同时展示多个变量的分布情况,允许用户比较不同变量之间的关…

添加自定义windows光标

#include <QApplication> #include <QMainWindow> #include <QPixmap> #include <QCursor> class MyWindow : public QMainWindow { public: MyWindow() { // 加载光标图像 QPixmap pixmap("F:/mycoding/test.png"); /…

STM32CubeIDE代码字体大小

进入首选项设置 搜索editor&#xff0c;按照图中标号&#xff0c;进行设置 按图中标号进行设置&#xff0c;选择需要的字号 到此设置完成

C++STL详解(五)——list类的接口详解

一.list的介绍 list容器的底层是双向循环带头链表&#xff0c;在CPP中&#xff0c;我们对双向循环带头链表进行了一定程度的封装。 如果你不了解双向链表&#xff0c;那么可以浏览此片博文&#xff1a;双向链表 二.list的定义方式以及赋值 2.1list的构造方式 在这里我们要…

英特尔宣布针对对Llama 3.1进行优化 以提升所有产品的性能

日前Meta正式发布了Llama 3.1开源大模型&#xff0c;以其庞大的参数量和卓越性能&#xff0c;首次在多项基准测试中击败了GPT-4o等业界领先的闭源模型。允许开发者自由地进行微调、蒸馏&#xff0c;甚至在任何地方部署&#xff0c;这种开放性为AI技术的普及和创新提供了无限可能…

python-learning31--高阶教程--基础阶段--python字典--常用操作

python-learning31--高阶教程--基础阶段--python字典--常用操作 (kaggle.com)

具备音视频指挥调度能力的指挥中心需要接入哪些设备呢?

近年来&#xff0c;具备音视频能力的指挥调度系统在各行各业中应用广泛&#xff0c;通过音视频的通信调度能力&#xff0c;为行业提供灵活的指挥调度功能&#xff0c;实现行业多种音视频应用场景的运用&#xff0c;满足企业更好地完成企业安全生产、应急协调等工作的需求。 华…

代码随想录训练营 Day13打卡 二叉树 part01 递归遍历 迭代遍历 层序遍历

代码随想录训练营 Day13打卡 二叉树 part01 一、 二叉树理论基础 二叉树是一种重要的数据结构&#xff0c;用于表示具有层次关系的数据。二叉树的每个节点最多有两个子节点&#xff0c;通常称为左子节点和右子节点。 种类 普通二叉树&#xff1a; 节点最多有两个子节点&…

Postman中的A/B测试实践:优化API性能的科学方法

Postman中的A/B测试实践&#xff1a;优化API性能的科学方法 在API开发和测试过程中&#xff0c;A/B测试是一种验证新功能或变更效果的有效方法。通过比较两个或多个版本&#xff08;例如A版本和B版本&#xff09;的性能&#xff0c;可以科学地评估变更的影响。Postman作为API测…

Hadoop3:HDFS的客户端工具Big Data Tools(IDEA版本)

1、安装插件 在Plugins里搜索Big Data Tools 安装完成后&#xff0c;重启IDEA 2、配置Windows环境 主要是配置Hadoop环境&#xff0c;否则无法通过插件远程连接HDFS 1、解压hadoop安装包 2、进入hadoop的bin目录 放入图中标红的两个文件 3、配置hadoop环境变量 新建HAD…

Java中“静态方法“之所以叫做“静态“的历史遗留问题

之所以叫做"静态",还要从C语言说起. C语言引入了static关键字. 早期,操作系统里,有一块内存区域,称为"静态内存区" 使用static修饰,变量就是在这个内存区域中的 后来系统不断演化,静态内存区,这个叫法就逐渐没有了,static就有了新的含义: 修饰全局变量,…

深入解析Eureka中的服务实例健康检查机制

引言 在微服务架构中&#xff0c;服务实例的健康检查是确保服务可用性的关键环节。Eureka作为Netflix开源的服务发现框架&#xff0c;提供了一套机制来监控服务实例的健康状态。本文将深入探讨Eureka中的服务实例健康检查是如何实现的&#xff0c;包括其原理、配置和实践应用。…