binfmt_misc

2023-10-30

一:binfmt_misc是什么

  binfmt_misc是内核中的一个功能,它能将非本机的二进制文件与特定的解析器自动匹配起来,进行二进制解析。

       例如,在x86上解析arm64架构的二进制。

       通过binfmt_misc可以注册解析器来处理指定二进制文件格式的请求。这些解析器可以是本地可执行文件,也可以是跨平台(ARM、MIPS)可执行文件。

二:怎么使用binfmt_misc

2.1.注册解析器 

  注册解析器的目的是为了让Linux在执行特定格式的二进制时,能够识别并自动选择相应的解析器来处理。

1.挂载

  首先需要挂载 binfmt_misc,并使用`mount`命令将`binfmt_misc`文件挂载到/proc/sys/fs/binfmt_misc/。

mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc

2.创建解析器配置文件

      在 /proc/sys/fs/binfmt_misc/ 目录下,可以创建一个配置文件,命名为 register,其中 register是要注册的二进制文件格式的标识符。

3.注册

  在解释器配置文件中,可以使用 echo 命令将相应的配置信息写入。这些配置信息指定了二进制文件格式的特征、解释器的路径以及其他相关参数。例如,对于 Windows 可执行文件的解释器配置,可以指定其魔术数字、解释器的路径等。

  使用`echo`命令向`/proc/sys/fs/binfmt_misc/ `目录中的特定文件写入配置信息,以注册特定的二进制文件格式和解释器。

     注册格式::name:type:offset:magic:mask:interpreter:flags

#/usr/bin/qemu-arm64为解析器程序的路径
#magic为\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00
#mask为\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff
echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm64-static:' > register

以下是这些字段的含义:

  • name: 是一个标识符字符串。 指定解析器的名称或标识。在这个例子中,解析器的名称为"arm";
  • type: 是识别类型。给予 M 魔法和 E 扩展。
  • offset: 是文件中 magic/mask 的偏移量,以字节计算。默认为 0  :name:type::magic... 。使用文件扩展名匹配时忽略。
  • magic: 是 binfmt_misc 匹配的字节序列。魔术字符串可能包含十六进制编码的字符,
  • mask: 是一个(可选,默认为所有 0xff)掩码。
  • interpreter: 是应该使用二进制文件作为第一个参数调用的程序(指定完整路径)
  • flags: 这些标志控制解析器的行为和操作方式。下面是一些常见的 flags 标志及其作用: O:覆盖(Override)标志。当多个解析器的匹配规则冲突时,使用具有此标志的解析器进行匹配和执行。 E:可执行文件标志。指定解析器用于执行可执行文件的功能。 F:开启自动刷新标志。当启用此标志时,每次访问 register 文件时都会重新加载解析器配置。 C:关闭自动刷新标志。当关闭此标志时,解析器配置只在系统启动时加载一次,之后不会自动刷新。 B:启用解析器的特权执行。这将允许使用具有特权的解析器执行文件。 M:启用魔数验证标志。指定解析器在匹配时必须验证魔数。 注意事项:offset+size(magic) 必须小于 128,解释器字符串不得超过 127 个字符

2.2.解析器是如何自动匹配

  在Linux中,内核通过魔术数字(Magic Nmuber)来识别特定的二进制文件格式。

  具体的识别过程如下:

  1. 内核读取二进制文件的开头部分的字节序列,通常是文件的前几个字节。

  2. 内核将读取到的字节序列与已注册解释器的魔术数字进行比对。

  3. 如果找到与魔术数字匹配的解释器,则选择该解释器来处理该二进制文件。

  4. 如果没有找到匹配的解释器,内核将无法执行该二进制文件,并可能会返回错误。

2.3.怎么获取二进制的魔法数字

  在 Linux 终端中,可以使用 hexdump -C <binary_file>或xxd <binary_file>等命令行工具来查看二进制文件的内容。这些工具会显示文件的十六进制表示,并可以帮助你找到文件开头部分的魔数。

      案例如下:

  

2.4.子网掩码的作用

  除了magic还有一个mask这个怎么理解?

  mask的作用是屏蔽或过滤魔数中的某些位,将魔数与掩码进行与运算,如果不想匹配魔数某些位,则再mask中将对应位设置为0即可。

  掩码的主要目的是允许对魔数进行更灵活的匹配。有时候,二进制文件的魔数中的某些位是可变的或不重要的,但其他位则必须匹配。通过定义一个掩码来屏蔽那些不重要的位,可以提高匹配的灵活性。

2.5.魔数和掩码的与运算

与运算规则如下:

  • 如果魔数和掩码的对应位都为1,结果位为1。
  • 如果魔数和掩码的对应位有一个为0,结果位为0。

  如果你想要通过按位与运算得到0表示不匹配,可以将掩码中需要匹配的位设置为1,不需要匹配的位设置为0。这样,在按位与运算时,如果魔数的对应位与掩码的对应位都为1,结果位为1,否则为0。如果按位与运算的结果为0,表示魔数与掩码不匹配。

  示例1:最终的按位与运算结果与原始的魔数值相同,即没有发生变化。

  

   示例2:最终的按位与运算结果后6位全部为0,则后6位不进行比较

  

2.6.与运算结果与注册表中魔数对比

1.取注册表魔数

  使用 cat 命令读取 /proc/sys/fs/binfmt_misc/ 目录下的相关文件。每个注册表都以文件的形式存在该目录中,文件名代表了对应的架构。例如,/proc/sys/fs/binfmt_misc/arm_64,表示 ARM 架构的注册表。

     

2.对比

   案例1:如下图,因为与运算结果与注册表魔数相同,则可以调用到对应注册表中interpreter对应的解析器文件。

  

   案例2:如下图,与运算结果的非0位与注册表魔数结果相同, 则可以调用到对应注册表中interpreter对应的解析器文件。

  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

binfmt_misc 的相关文章

  • 闲鱼下单时显示服务器繁忙,闲鱼翻车记。闲鱼用验机报告需要注意的问题,否则分分钟被水鱼...

    闲鱼翻车记 闲鱼用验机报告需要注意的问题 否则分分钟被水鱼 2019 10 03 21 35 34 62点赞 75收藏 163评论 本文主要想说的 闲鱼验机报告觉得不合适 一定要拒绝本次交易 对自己有信心的话 干脆不要选验机服务 原由请看楼
  • 用ajax实现添加用户的功能,使用Ajax和forms实现注册用户所需功能

    这次给大家带来使用Ajax和forms实现注册用户所需功能 使用Ajax和forms实现注册用户所需功能的注意事项有哪些 下面就是实战案例 一起来看一下 前端HTML load static get static prefix as get
  • 机器学习-Sklearn-03(数据预处理和特征工程)

    机器学习 Sklearn 03 数据预处理和特征工程 学习03 1 概述 1 1 数据预处理与特征工程 数据不给力 再高级的算法都没有用 数据挖掘的五大流程 1 2 sklearn中的数据预处理和特征工程 sklearn中包含众多数据预处理
  • 【注意力机制】CBAM详解(文末附代码)

    论文题目 CBAM Convolutional Block Attention Module 论文地址 https arxiv org pdf 1807 06521 pdf 1 前言 论文 2018年 提出了一种轻量的注意力模块 CBAM
  • 所有文具的英文单词

    blackboard 黑板 a piece of chalk 粉笔slate pencil 石板笔wall map 挂图skeleton map 轮廓图 示意图globe 地球仪text book 课本dictionary 词典encycl
  • 位段

    1 什么是位段 在前面各章中 我们已经讨论过字节概念了 在大多数的计算机系统中 一个字节是由八个更小的 称作为位的单位组成的 位是比字节更小的单位 位只有两个值 1 或 0 因此 存储在计算机存储器中的一个字节可以看成由八个二进制数字形成的
  • 概率论基础(3)一维随机变量(离散型和连续型)

    概率论对于学习 NLP 方向的人 重要性不言而喻 于是我打算从概率论基础篇开始复习 也顺便巩固巩固基础 这是基础篇的第三篇知识点总结 基础 下面前两篇的链接地址 概率论基础 1 古典和几何概型及事件运算 概率论基础 2 条件概率 全概率公式
  • 应急响应--windows主机入侵排查思路

    在之前的工作和护网期间 工程师们在实施主机入侵入侵排查工作的时候 常常会面临时间紧 任务急 需要排查的主机数量众多的情况 为了确保实施人员在有限的时间范围内 可以高效且保证质量的前提下完成主机入侵排查工作 结合大佬们的叙述和自己的体会作如下
  • 2023年计算机视觉与模式识别国际会议(CCVPR 2023)

    会议简介 Brief Introduction 2023年计算机视觉与模式识别国际会议 CCVPR 2023 会议时间 2023年9月15日 17日 召开地点 英国 牛津 大会官网 www ccvpr org 计算机视觉技术与模式识别是现代
  • 上海2021年高考成绩排位查询,上海各区2021年一模成绩&排位情况汇总!

    一模重要性不言而喻 完全对标中考 本质上就是在看考生的区内排名 以下是我们收集到2021各区一模考的最新数据 分享出来供大家对比参考 注 以下各区一模信息来源于家长分享 仅供参考 徐汇区 一模均分 语文118 82 数学108 英语98 4
  • 分享一个加载按钮动画

    先看效果 再看代码
  • Mac查看本机IP

    查看某个网络适配器下的本地IP 1 Mac查看本机IP 终端命令 ifconfig en0 或者 ifconfig 2 查看外网IP地址可打开ip138进行查询 3 手机预览页面 手机可以用ip和端口号访问电脑 可用于在线调试本地项目 步骤
  • GDI和GDI+的应用场合思考

    GDI是微软公司的著名的二维图形引擎 GDI 则是微软公司为了提高显示效果而推出的一种新型图形引擎 下面我就我的一些使用经验阐述二者适用的应用场合 GDI基本能满足一般的绘图要求 我觉得GDI最令人诟病的是它画出来的线显示的锯齿实在比较厉害
  • 解决新版Pycharm无法显示动态图片的问题

    1 打开File 选择Settings 2 选择Tools 点击Python Scientific 3 默认是勾选的 去掉勾选即可
  • 液晶面板中的OD

    OD OVER DRIVE 过驱动 作用 提升 液晶响应时间 对于从黑到白和白到黑无补偿作用响应时 原理 液晶分子在电场中所产生的力矩与电场的平方成正比 因此 增加电场可以大幅度增加对液晶分子施加的力矩 从而加速液晶分子的转动 这就是电场加
  • Qt信号层次太多

    一 先说需求 可能是五层 或多层 子对象要发信号给第一层 这样 如果正常写很麻烦 二 解决方案 专门拿 出一个类 做为中转类 中转类为单例 子类 将信号 发给中转类 中转类 再发给写要的类 上代码 中转类 ifndef TRANSMITSI
  • RS232电平、CMOS电平、TTL电平是什么,区别是什么?

    RS232电平 CMOS电平 TTL电平是什么 区别是什么 什么是TTL电平 CMOS电平 RS232电平 它们有什么区别呢 一般说来 CMOS电平比TTL电平有着更高的噪声容限 1 TTL电平标准 输出 L lt 0 8V H gt 2
  • python中二维数组的切片

    对于一维数组或者列表 a 切片的规则是 b a start stop step 对于二维数组类似 当我们对某个维度切片时 把更细分的维度看作整体即可
  • 【Java】 已知一个数组 arr[] = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中的索引,并在控制台输出找到的索引值。

    import java util Scanner public class Test04 public static void main String args 定义一个数组 用静态初始化完成数组元素的初始化 int arr 19 28 3
  • tqdm循环中实时更新进度条的文字(描述)部分

    tqdm是一个显示进度条的工具 可以在使用for循环的时候添加一个tqdm 这样就知道程序的实时进度 tqdm github页面 https github com tqdm tqdm 示例代码 from tqdm import tqdm i

随机推荐

  • 解决Word、Excel启动时提示向程序发送命令出现问题

    还记得突然有一天 打开Excel或者word后 总是提示 向程序发送命令出现问题 那时候很郁闷 不知道什么问题 重启电脑等方法都没用 然后度娘查找 最后才发现是因为按照额外程序导致的 以下详细说说前因后果 以Excel为例 遇到这种问题应该
  • Python中的连续比较运算符(与C语言对比)

    在Python中 连续的比较运算符是允许的 但是在C语言中是编译不会报错 但是不建议这样使用 Python代码 gt gt gt 5 gt 3 lt 4 True gt gt gt 6 gt 3 lt 1 True 在Python中这两行表
  • 常见的js代码调试

    这里主要探讨使用浏览器来调试javascript方法 并且仅对于IE 对于Opera7 Mozilla FireFox Netscape Navigator等浏览器偶在开发过程中用的很少 没有太多经验 在此就不予探讨 工具的安装 在安装of
  • thymeleaf基本语法

    thymeleaf基本语法 Spring Boot整合Thymeleaf 模版 依赖 创建模板文件 定义页面 简单表达式 Thymeleaf 常用语法 定义局部变量 注释 标准注释 析器级注释 取值 拼接 内联表达式 th inline 字
  • 简单理解磁盘结构

    本文首发于 Guanngxu 的个人博客 磁盘到底是怎样工作的 一文理解硬盘结构 数据库系统总会涉及到辅助存储 大多都是磁盘 因为它们能够存储大量需要长期保存的数据 因此我们有必要先了解了解磁盘的相关知识 根据机械原理 存储器的容量越大其速
  • Mybatis-Plus 实现多表联合查询+分页+查询条件

    Mybatis plus 自己只能完成单表操作 所以如果想要实现多表 需要借助 Mybatis 实现 首先引入mybatis plus依赖 这里就不演示了 返回结果集封装 传递分页以及查询的参数 主要代码在 Service 中 Reques
  • 若依微服务报错Error: Cannot find module ‘html-webpack-plugin‘解决

    遇到的问题 Error Cannot find module html webpack plugin 但是已经有html webpack plugin了 还是提示了报错 解决办法 https gitee com y project RuoY
  • LeetCode每日刷题:合并两个有序数组

    题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你 合并 nums2 到 nums1 中 使合并后的数组同样按 非递减顺序 排列 注意
  • LightGBM原理介绍

    简介 是GBDT模型的一个进化版本 其主要思想是利用弱分类器 决策树 迭代训练以得到最优模型 该模型具有训练效果好 不易过拟合等优点 备注 容易出现过拟合的风险 需要限制树的最大深度来防止过拟合 LGB是一个实现GBDT算法的框架 支持高效
  • Python学习笔记(三)

    文章目录 1 异常 2 单测 3 读写文件 3 1 读文件 3 2 写文件 3 3 操作文件和目录 4 正则表达式 4 1 贪婪匹配 5 其它 5 1 StringIO BytesIO 5 2 序列化 5 2 1 pickle 5 2 2
  • 3D光照阴影 平面阴影矩阵推导及代码实现

    3D光照阴影 平面阴影矩阵推导及代码实现 参考有关知识于是辛苦几个小时 推导出光照 平面阴影转换矩阵见图片 平面阴影矩阵推导第一页 平面阴影矩阵推导第二页 平面阴影矩阵 具体代码实现 第三页 到这里光照阴影的平面矩阵推导结束还有伪代码 参考
  • 如何使用学生账号来激活使用Jetbrains全家桶

    使用 edu邮箱注册学生账号来激活使用JetBrains全家桶 起因 之前激活过Jetbrains家的IDE 升级到2017 3 3版本 提示又要激活 试着原来的方法 结果用来激活的License Server全都失效 据称搭建本地反向代理
  • obj[‘x‘]和obj[x]的区别

    对象数据类型 由零到多组键值对 属性名和属性值 组成的属性名的类型 说法一 属性名类型只能是字符串或者Symbol 说法二 属性名类型可以是任何基本类型值 处理中可以和字符串互通 但是属性名绝对不能是引用数据类型 如果设置引用类型 最后也是
  • Python 爬虫学习笔记(二)urllib下载图片和视频

    一 urllib的1个类型和6个方法 1 response的类型 我们打印一下urllib request方法获取的response是什么类型 import urllib request url http www baidu com res
  • springboot yml文件配置Map List等数据

    springboot yml文件配置Map List等数据 配置类定义 yml 配置 使用 说明 配置类定义 import lombok Getter import lombok Setter import org springframew
  • 007 034 打印一个三角形

    例 使用输出语句输出一个三角形 include
  • 20+个小而精的Python实战案例(附源码和数据)

    公众号 尤而小屋作者 Peter编辑 Peter 大家好 我是Peter 最近小编认真整理了20 个基于python的实战案例 主要包含 数据分析 可视化 机器学习 深度学习 时序预测等 案例的主要特点 提供源码 都是基于jupyter n
  • Java实现扑克牌自动发牌系统

    利用Java的ArrayList实现随机给三个人发扑克牌 import java util ArrayList import java util List import java util Random class Card private
  • Linux 必备工具, 命令与例子

    目录 1 wget 2 screen 3 unzip gzip 4 netstat 5 git 6 composer 7 docker 8 docker compose 9 timedatectl set timezone Asia Sha
  • binfmt_misc

    一 binfmt misc是什么 binfmt misc是内核中的一个功能 它能将非本机的二进制文件与特定的解析器自动匹配起来 进行二进制解析 例如 在x86上解析arm64架构的二进制 通过binfmt misc可以注册解析器来处理指定二