首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux中的binfmt-misc原理分析

一个典型的使用场景就是:使用qemu运行其它架构平台上的二进制文件。 本文以该场景为例,分析一下其具体的工作原理。...arm64应用 先准备一个arm64架构的程序(可以使用go跨平台编译生成一个),执行后发现有报错: bash: ..../go-test:无法执行二进制文件: 可执行文件格式错误 现在,我们执行一下apt install qemu-user-binfmt命令,然后再运行上面的arm64程序,发现能正常运行了。...可以看出,这条规则会使用/usr/libexec/qemu-binfmt/aarch64-binfmt-P来执行arm64架构的二进制文件,而这个文件其实是一个软链,实际指向的是:/usr/bin/qemu-aarch64...0x06 在Linux上运行Windows可执行文件 使用binfmt-misc机制可以支持直接在Linux上运行Windows的exe文件,这是通过wine来实现的。

1.1K20

TKEStack适配ARM架构之路

因为不同架构的指令集不一样,在一个架构下编译并生成的二进制可执行文件,包含的是这个架构下的指令,直接将这个可执行文件放到另一架构上运行,会报cannot execute binary file类似错误。...QEMU可以模拟很多平台,所以只要想办法在构建跨平台的容器镜像时,将其他平台的可执行文件传递给QEMU,由QEMU模拟对应的平台并执行,就可以达到跨平台构建的目的。...而Linux 内核中的 binfmt_misc功能,刚好能将任意类型的可执行文件,传递至指定的用户态应用程序运行。...所以只要在x86平台上安装QEMU模拟器,并在binfmt_misc中注册QEMU,让Linux遇到其他平台的执行文件时就传递给QEMU,这样就可以实现跨平台执行arm指令了。 5....整体解决方案 通过上述容器技术及虚拟化技术后,TKEStack适配arm架构的整体方案如下: (1)预先安装支持多架构的QEMU模拟器,并将QEMU注册到内核binfmt_misc中,然后在构建容器镜像时

2K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android模拟器识别技术

    其实,现在绝大部分手机都是基于ARM架构,其他CPU架构给忽略不计,模拟器全部运行在PC上,因此,只需要判断是运行的设备否是ARM架构即可。...修改的却是D-Cahce中的内容,此时I-Cache中的指令并不一定被更新,这样,程序就会在ARM与Simpled-x86上有不同的表现,根据计算结果便可以知道究竟是还在ARM平台上运行,为什么说模拟器采用的是...无论是x86还是ARM,只要是静态编译的程序,都没有修改代码段的权限,所以,首先需要将上面的汇编代码翻译成可执行文件,再需要申请一块内存,将可执行代码段映射过去,执行。...如果是在ARM上运行,e2844001处指令无法被覆盖,最终执行的是add r4,#1 ,而在x86平台上,执行的是add r7,#1 ,代码执行完毕, r0的值在模拟器上是1,而在真机上是10。...在32位真机上完美运行,但是在64位的真机上可能会存在兼容性问题,可能跟arm64-v8a的指令集不同有关系,也希望人能指点。

    3K40

    使用QEMU chroot进行固件本地调试

    QEMU是我们在调试一些不同架构的程序时经常使用的虚拟机软件。它有两种运行模式,全系统模拟(System mode)和单程序运行(User mode)。...在设备逆向过程中,如果仅仅是为了运行我们提取出文件系统中的某一个程序,我们就可以使用QEMU的user mode来简化整个操作流程,同时能够方便的利用 QEMU 自带的GDB服务来进行调试,免去搭建环境的烦恼...我们用不到它,但装这个包的意义在于它包含了几个自动向内核注册QEMU binfmt的脚本,这样我们就不需要再手动指定我们的ARM可执行文件需要哪个路径下的QEMU来执行,非常方便。...图 1 update-binfmts输出 我们此时可以测试一下,临时将环境变量 QEMU_LD_PREFIX 设置为我们要 chroot 进去的根目录,然后运行ARM设备中提取出的ELF可执行文件,如果不报错就可以了.../bin/sh 到这里,我们就可以像在虚拟机中一样,通过shell运行这个chroot中的所有程序了! 1总结 Xxx not found 相关的问题 当我运行一个命令时, # .

    6.6K20

    Android 渗透测试学习手册 第八章 ARM 利用

    即使 Android SDK 中的模拟器可以通过模拟 ARM 平台来运行,大多数智能手机也是基于 ARM 的,我们将通过配置 QEMU(它是一个开源硬件虚拟机和模拟器)开始 ARM 漏洞利用。...让我们开始使用一个长参数运行程序,如下面的命令所示,看看会发生什么。 在此之前,我们还需要在漏洞函数和strcpy调用的地址设置断点。...一旦我们运行它,我们可以看到程序ShouldNotBeCalled函数被调用,如下面的截图所示: 8.4 返回导向编程 在大多数情况下,我们不需要调用程序本身中存在的另一个函数。...由于 ROP 是开发中最复杂的主题之一,因此强烈建议你自己尝试,分析反汇编代码并构建漏洞。...Zimperlich:使用与 RageAgainstTheCage 的相同概念,但它依赖于 zygote 进程解除 root 权限。

    43530

    多平台容器镜像构建就看这一篇

    当 Linux 遇到一种无法识别的可执行文件格式(比如说其它平台的可执行文件格式)时,它会检查有没有配置任何“用户空间应用程序”用于处理它。如果检测到了,就将可执行文件传递给该应用程序。...同时,我们需要安装一个包含足够新的update-binfmts二进制文件的包,以便能够支持fix-binary(F)标志,并在注册QEMU模拟器时实际使用,这样才能结合 buildx 一起镜像跨平台构建...进行构建时,使用 --platform标志可以用于指定构建输出的目标平台(例如 linux/amd64,linux/arm64,linux/riscv64)。...authors="Fanjian Kong" COPY --from=builder /src/bin/webapp /app/ WORKDIR /app CMD ["/app/webapp"] 然后,让我们尝试下运行...如果你需要构建、运行 RISC-V 平台的容器镜像,建议使用 multiarch/qemu-user-static 镜像镜像配置。

    2K50

    重现 TP-Link SR20 本地网络远程代码执行漏洞

    1040 端口 TP-Link SR20 设备运行了 V1 版本的 TDDP 协议,V1 版本无需认证,只需往 SR20 设备的 UDP 1040 端口发送数据,且数据的第二字节为 0x31 时,SR20...设备会连接发送该请求设备的 TFTP 服务下载相应的文件并使用 LUA 解释器以 root 权限来执行,这就导致存在远程代码执行漏洞 ?...QEMU 来运行该文件 $ qemu-arm -L . ....参数运行 qemu-arm 会报错, -L . 参数会把当前目录加入到 PATH 路径中 ?...经过测试发现通过这种方式运行 TDDP 程序并不能触发该漏洞,因此需要搭建完整的 ARM QEMU 虚拟机环境 搭建ARM QEMU虚拟机环境 ARM CPU 有两个矢量浮点(软浮点和硬浮点)具体区别可以查看

    1.6K30

    Windows平台使用QEMU搭建ARM+Linux开发环境

    起因 由于目前市面上很多模拟器诸如夜神,网易MUMU,基本上使用的是x86的架构,虽然运行ARM程序没有问题,但是如果想使用gdb对ARM程序进行调试的话,就显得力不从心了,各种问题层出不穷, 当然调试...QEMU, 那么为了方便,我们直接搭建QEMU的环境 实验环境 Windows宿主平台 QEMU安装包(这里使用的是20201124的版本):https://qemu.weilnetz.de/w64/...下载安装完毕后,其安装目录会包含很多不同架构的执行文件,这里我们选择qemu-system-arm.exe,打开命令窗口: qemu-system-arm.exe -machine versatilepb...:pi 端口:5022, 密码同上 程序调试 紧接着使用gdb+gdbserver对C程序进行调试 首先利用ftp工具将已经编译好的可执行文件和GCC包下arm-none-linux-gnueabi\libc...-f qcow2 test.qcow2 10G -f 选项用于指定镜像的格式, qcow2 格式是 QEMU最常用的镜像格式,采用来写时复制技术来优化性能。

    11.4K41

    跨平台构建 Docker 镜像新姿势,x86、arm 一把梭

    最常用的模拟器是开源的 QEMU[1],QEMU 支持许多常见的 CPU 架构,包括 ARM、Power-PC 和 RISC-V 等。...交叉编译器是专门为在给定的系统平台上运行而设计的编译器,但是可以编译出另一个系统平台的可执行文件。...例如,amd64 架构的 Linux 系统上的 C++ 交叉编译器可以编译出运行在 aarch64(64-bit ARM) 架构的嵌入式设备上的可执行文件。...但交叉编译不具有通用性,它的复杂度取决于程序使用的语言,如果使用 Golang 的话,那就超级容易了。 在全民容器时代,我们讨论构建时不仅包括构建单个可执行文件,还包括构建容器镜像。...如果你使用的是 Linux,需要手动启用 binfmt_misc。大多数 Linux 发行版都很容易启用,不过还有一个更容易的办法,直接运行一个特权容器,容器里面写好了设置脚本: ?

    42.5K119

    OS开发爱好者福利来了:树莓派上编译C语言,顺便掌握一波硬件知识

    但作者已经实现了,并将很快发布(更新:在 qemu2.12 中提供)(https://wiki.qemu.org/ChangeLog/2.12#ARM)。在此之前,你必须从最新的源代码编译 qemu。...-serial stdio -serial null -serial stdio:将模拟的 UART0 重定向到运行 qemu 的终端的标准输入 / 输出,以便显示发送到串行线路的所有内容,并且 vm...包括: VideoCore GPU; ARM-Cortex-A53 CPU (ARMv8); MMIO 映射外部设备。 有趣的是,CPU 不是主板上的主处理器。当它通电后,第一个 GPU 运行。...当初始化完成时,通过执行 bootcode.bin,它将加载并执行 start.elf。这不是一个 ARM 可执行文件,而是专门为 GPU 编译的。...比较有意思的是,start.elf 寻找不同的 ARM 可执行文件,都以 kernel 开头,以. img 结尾。

    1.3K40

    【Rust日报】 2020-01-06 tomaka redshirt:在0环中运行的WASM二进制的操作系统原型

    tomaka / redshirt:在0环中运行的WASM二进制的操作系统原型 redshirt操作系统是建立某种形式与操作系统类似环境的实验,其中的可执行文件都在WASM并从类似IPFS的去中心化网络被加载...`. # It can be loaded directly by QEMU: qemu-system-arm -M raspi2 -m 2048 -serial stdio -kernel ....Rust官方发布:任务监视器扩展task_scope task_scope crates是一个运行时用于向现有运行时添加对结构化并发的支持的扩展。 什么是结构化并发?...结构化并发是一种编程范例,它允许异步操作仅在特定范围内运行,以便它们像常规函数调用堆栈一样形成操作堆栈。当父操作等待所有子代完成时,结构化并发有助于并发程序的本地引导。...更糟糕的是,程序无法从外部关闭,因为I / O操作始终会成功,并且copy功能会尝试尽可能继续。因此,产生的任务必须协同检查取消或定期循环执行以保持结构良好。

    64930

    RCE 遇到受限 shell 的突破

    cat 就不是很好写了,上面我们也尝试了通过管道 + cat ,也失败了 如果想将一个二进制可执行文件写入这个过程用 PoC 来完成,需要让二进制可执行文件以可读字符的形式进行编码,对于常规系统,经常将二进制可执行文件进行...arm 32位版本的 在尝试通过 meterpreter 进行上传 frp 时,结果传到一半,meterpreter 就断了,之后就出现了 看来是重启了,之前所有的操作没了,这用来做痕迹清除可太方便了...再次尝试编译程序 1) 静态编译 arm-linux-gcc -static hello.c 使用 qemu 模拟测试执行成功了,体积有 113K 大小,通过 meterpreter 上传到目标系统上去...但是 113K 这个大小还是有点大了,尝试编译动态链接的程序 2) 编译动态链接程序 arm-linux-gcc hello.c 大小 7.3K ,看看是否可以运行,这么点大小这次直接用 PoC 上传...尝试使用 demo 登录 我们可以试试操作员 demo 会不会存在权限问题,创建账户测试 还好,没有这种基础性错误 尝试使用 admin 原来的密码进行登录,看看是否恢复成功 成功登录 8.

    1.2K10

    Hypervisor Necromancy;恢复内核保护器(1)

    --[ 0 - 简介 直到最近,为了在运行时攻击者破坏整个系统 发现并利用内核漏洞。...这使他们能够执行 各种动作;在内核上下文中执行恶意代码, 修改内核数据结构以提升权限,访问受保护的数据, 等已经引入了各种缓解措施来防止此类 动作和管理程序也被使用,除了他们的 为实现这一目标而使用传统的虚拟化支持...第一部分提供背景 有关 ARM、三星管理程序和 QEMU 的信息,以正确定义我们的 开发设置。接下来,我们将详细介绍框架实现 同时处理各种ARM虚拟化和三星 实施的细微差别。...QEMU 配置为仅支持 AArch64 目标并构建 使用 gcc 版本 7.4.0,而框架是使用 aarch64-linux-gnu-gcc 版本 8.3.0。...google/afl $ cd afl $ git checkout v2.56b $ 制作 --[ 2 - 框架实施与RKP分析 关于框架,首先要提到的重要一点是,它是 编译为 ELF AArch64 可执行文件并被视为内核映像

    3K540

    Qemu搭建arm版麒麟系统

    作为一个综合性操作系统,麒麟系统支持多种硬件架构,包括ARM架构。 模拟ARM平台安装麒麟系统是指在非ARM架构的计算机上使用虚拟化技术模拟ARM架构,然后在模拟的ARM平台上安装和运行麒麟系统。...通过在QEMU上配置合适的硬件参数和设备模拟,可以在模拟的ARM平台上运行麒麟系统。...此外,这种方法还能够提供一个便捷的环境,使用户能够在常用的计算机上尝试和学习ARM架构相关的开发和应用。...本文简单介绍了如何在windows系统中安装并使用qemu安装arm架构的kylinV10系统(其它类似的操作系统也可以参考,仅仅是安装时使用的ISO镜像不同),可以在x86架构的windows上运行arm...调试输出可以添加**-serial stdio ** :::info 主要参数说明如下: qemu-system-aarch64.exe:QEMU的可执行文件,用于模拟ARM64架构的虚拟机。

    26010

    如何在 Mac 上愉快的使用 Docker

    -v 挂载支持可以支持 x86 的模拟, 可以为 x86 build 或者运行相关镜像在尽可能的情况下可以进行 CPU 架构切换, arm64 与 x86 最好都可以支持二、工具选型首先是我们最熟悉的..., 如果本机已经安装 QEMU, 可能需要执行以下命令将 QEMU 升级到 7.0:// 输入代码内容brew upgrade qemu为了使用 docker, 还需要通过 brew 安装一下 docker...disk: "100G"# 虚拟机与 macOS 宿主机挂载时使用的挂载技术# 目前推荐 9p, 可换成 sshfs, 但是 sshfs 会有权限问题mountType: 9p# 定义虚拟机和 macOS..., 我们需要定制一些 VM 里的配置, 在定制时主要需要调整配置文件的 provision 部分; 在该部分中, 如果 mode 被定义为 system 则会以 root 用户执行相关命令, 否则以普通用户来执行命令...还支持直接在 VM 中定义架构, 这样在 qemu 启动时则会直接从 VM 系统层模拟目标架构; 这种方式的好处是对目标架构兼容性很好, 但是运行速度会更慢.

    4.5K30

    GDB与GDBServer配合实现在安卓设备中进行程序调试

    arm-linux-androideabi-gcc.exe -g test.c -o main -static #输出可执行文件名为main 第三步 将可执行文件传送到模拟器中 adb push main...~调试指令进行相关调试 开始调试 使用list指令列出所有源代码 可简写为l 使用break指令设置断点位置 可简写为b 使用continue指令运行到断点处 可简写为c 使用step指令进行单步执行...执行脚本自动抽取打包成压缩包到当前目录: python make-standalone-toolchain.py --arch arm 附加 如果是在非安卓系统的ARM模拟器上,比如qemu模拟器,那么直接使用官方的...arm-none-linux-eabi即可,即便是安卓设备,如果没有代码调试需求的话,仅仅是编译运行程序,也是完全够用了 但是你需要进行代码调试的话,由于android系统的安全策略,arm-none-linux-eabi...为了解决这个问题,我们因此采用arm-linux-androideabi,这里面的gdbserver可以正常运行 上面的例子中使用的NDKr17的版本

    2K30
    领券