完美调试android-goldfish(linux kernel) aarch64的方法

环境要求

  • Mac m1
  • Mac m1 中 虚拟机安装aarch64 ubuntu22.02
  • Mac m1安装OrbStack,并在其中安装 ubuntu20.04(x86_64)

构建文件系统

在虚拟机 aarch64 ubuntu22.02中构建

安装必要的库

sudo apt-get install libncurses5-dev  build-essential git bison flex libssl-dev dtc bison flex gcc make bc g++ vim git bc flex bison libssl-dev dwarves libelf-dev xz-utils wget

使用busybox-1.35.0,先配置make menuconfig,设置

 Settings  --->[*] Build static binary (no shared libs)

然后使用下面的脚本生成文件系统

cd busybox-1.35.0
sudo rm -rf _install
make install -j32
cd _installmkdir etc dev lib
cd etccat > profile << EOF
#!/bin/sh
export HOSTNAME=bryant
export USER=root
export HOME=/home
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
EOFcat > inittab << EOF
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
EOFcat > fstab << EOF
#device  mount-point    type     options   dump   fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
kmod_mount /mnt 9p trans=virtio 0 0
EOFmkdir init.d
cd init.d
cat > rcS << EOF
mkdir -p /sys
mkdir -p /tmp
mkdir -p /proc
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
EOFchmod 777 rcScd ../../dev
sudo mknod console c 5 1cd ..
find . | cpio -o --format=newc > ../rootfs.img

linux kernel 编译 && 调试

在虚拟机 aarch64 ubuntu22.02中构建
和x86_64中设置一致(本身就在aarch64中,不需要配置交叉编译工具,直接使用gcc编译

启动脚本(-kernel-initrd 根据自己实际的位置改一改)

qemu-system-aarch64 \-cpu cortex-a72 \-machine type=virt \-nographic -smp 2 -m 2048M \-kernel linux-5.18/arch/arm64/boot/Image \-append "nokaslr root=/dev/ram rdinit=/linuxrc console=ttyAMA0" \-initrd busybox-1.35.0/rootfs.img \-device virtio-scsi-device -s -S

在这里插入图片描述

android goldfish 编译 && 调试

所需环境 Mac m1 OrbStack ubuntu20.04(x86_64)

下载编译工具android NDK https://github.com/android/ndk/wiki/Unsupported-Downloads
用的是 android-ndk-r18b

编译环境配置

sudo apt install gcc g++ cmake make perl ruby libncurses5-dev gcc make bc g++ vim git bc flex bison libssl-dev dwarves libelf-dev xz-utils wget git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip openjdk-8-jdk

下载goldfish源码,并提取android-goldfish-4.4-dev

git clone https://android.googlesource.com/kernel/goldfish.git
git checkout -b android-goldfish-4.4-dev remotes/origin/android-goldfish-4.4-dev

配置goldfish

export PATH=/Volumes/TwoT/android_kernel/android-ndk-r18b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin:$PATH
export CROSS_COMPILE=aarch64-linux-android-
make ARCH=arm64 arm64_ranchu_defconfig

修改.config

CONFIG_DEBUG_RODATA=n
CONFIG_RANDOMIZE_BASE=n

编译

make \ARCH=arm64 \CC=/Volumes/TwoT/android_kernel/android-ndk-r18b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang \CLANG_TRIPLE=aarch64-linux-gnu- \CROSS_COMPILE=/Volumes/TwoT/android_kernel/android-ndk-r18b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android- \-j16

启动调试 在虚拟机 aarch64 ubuntu22.02

qemu-system-aarch64 \-cpu cortex-a72 \-machine type=virt \-nographic -smp 2 -m 2048M \-kernel /media/psf/TwoT/android_kernel/test/goldfish/arch/arm64/boot/Image \-append "nokaslr root=/dev/ram rdinit=/linuxrc console=ttyAMA0" \-initrd busybox-1.35.0/rootfs.img \-device virtio-scsi-device -s -S

在这里插入图片描述

其他的问题

为什么不在mac m1直接模拟执行?

下一个断点,继续运行,会就直接崩溃了,有大佬解决了,告知一些

poc的编写

  • 需要ndk静态编译
  • 需要在Mac m1上的android studio中创建aarch64模拟器,抽取里面system的文件,放到文件系统中
    在这里插入图片描述

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

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

相关文章

ARP安全针对欺骗攻击的解决方案

针对欺骗攻击的解决方案 ARP表项固化 使能ARP表项固化功能后&#xff0c;设备在第一次学习到ARP之后&#xff0c;不再允许用户更新此ARP表项或只能更新此ARP表项的部分信息&#xff0c;或者通过发送ARP请求报文的方式进行确认&#xff0c;以防止攻击者伪造ARP报文修改正常用户…

(5)Elastix图像配准:点集配准(局部区域的精度微调)

文章目录 前言一、原理详解二、参数详解三、项目实战:点集配准3.1、参数文件:parameter_file_points_2D.txt3.2、坐标文件:fixed_points.txt3.3、坐标文件:moving_points.txt前言 (1)Elastix图像配准:原理 + 源码(详解) (2)Elastix图像配准:参数文件(配准精度的关…

【数学】简化剩余系、欧拉函数、欧拉定理与扩展欧拉定理

简化剩余系 与完全剩余系略有区别。 我们定义数组 a i ( 1 ≤ i ≤ n ) a_i(1\le i\le n) ai​(1≤i≤n) 为模 m m m 的简化剩余系&#xff0c;当且仅当 ∀ 1 ≤ i , j ≤ n \forall 1\le i,j\le n ∀1≤i,j≤n&#xff0c;有 a i ≢ a j ( m o d m ) a_i\not\equiv a_j…

【江科大】STM32:MPU6050介绍

文章目录 MPU6050介绍结构图MPU6050参数硬件电路模块内部结构框图数据帧格式寄存器地址 MPU6050介绍 MPU6050是一个6轴姿态传感器&#xff0c;可以测量芯片自身X、Y、Z轴的加速度、角速度参数&#xff0c;通过数据融合&#xff0c;可进一步得到姿态角&#xff0c;常应用于平衡…

STM32CubeMX教程27 SDIO - 读写SD卡

目录 1、准备材料 2、实验目标 3、轮询方式读取SD卡流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.0、工程基本配置 3.1.1、时钟树配置 3.1.2、外设参数配置 3.1.3、外设中断配置 3.2、生成代码 3.2.0、配置Project Manager页面 3.2.1、外设初始化调用流程 3.2.2、外设中断调用流…

北京某大厂Linux系统管理和Shell脚本笔试题

1. 写一个sed命令&#xff0c;修改/tmp/input.txt文件的内容&#xff0c;要求&#xff1a;(1) 删除所有空行&#xff1b;(2) 在非空行前面加一个"AAA"&#xff0c;在行尾加一个"BBB"&#xff0c;即将内容为11111的一行改为&#xff1a;AAA11111BBB #创建一…

现货黄金做日内交易和波段交易有何差异?

在现货黄金投资中&#xff0c;日内交易和波段交易都是投资者常用的手段。但投资者其实搞不懂两者有何区别&#xff0c;有时甚至不清楚自己做的是日内交易还是波段交易&#xff0c;下面我们就来讨论一下这两种交易方法的异同。 两者的区别主要是在持仓的时间上。日内交易顾名思义…

Python中的`__all__`魔法函数使用详解

概要 Python是一门灵活而强大的编程语言&#xff0c;提供了各种机制来控制模块的导入和访问。其中&#xff0c;__all__魔法函数是一种用于限制模块导入的机制&#xff0c;可以明确指定哪些变量、函数或类可以被导入。本文将深入探讨__all__的作用、用法以及示例&#xff0c;以…

C++:类和对象(中)

类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成…

ES文档索引、查询、分片、文档评分和分析器技术原理

技术原理 索引文档 索引文档分为单个文档和多个文档。 单个文档 新建单个文档所需要的步骤顺序&#xff1a; 客户端向 Node 1 发送新建、索引或者删除请求。节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3&#xff0c;因为分片 0 的主分片目前被分配在 …

【AI绘画】stablediffusion图生图教程!!

**手把手教你入门绘图超强的AI绘画&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。给大家带来了全新保姆级教程资料包 &#xff08;文末可获取&#xff09; ** 目录 一、图生图 1.图生图原理 2.图生图三个步骤 ①图生图基本三步法 ②提示…

深度学习如何入门,如何快速理解深度学习

深度学习是机器学习的一个分支&#xff0c;它使用深度神经网络来模拟人脑的工作方式&#xff0c;通过学习样本数据的内在规律和表示层次&#xff0c;让机器能够具有类似于人类的分析学习能力。深度学习的最终目标是实现人工智能的普及化&#xff0c;使机器能够识别、处理、分析…

Leetcode—2859. 计算 K 置位下标对应元素的和【简单】

2023每日刷题&#xff08;九十一&#xff09; Leetcode—2859. 计算 K 置位下标对应元素的和 内置函数__builtin_popcount方法实现代码 class Solution { public:int sumIndicesWithKSetBits(vector<int>& nums, int k) {int n nums.size();int ans 0;for(int i …

mac电脑安卓文件传输工具:Android File Transfer直装版

Android File Transfer&#xff08;AFT&#xff09;是一款用于在Mac操作系统上与Android设备之间传输文件。它允许用户将照片、音乐、视频和其他文件从他们的Android手机或平板电脑传输到Mac电脑&#xff0c;以及将文件从Mac上传到Android设备。 下载地址&#xff1a;https://w…

怎样编写高性能C/C++程序

本文主要讨论高性能编程&#xff0c;而且是那种“极致性能需求”。按照本人的粗浅认识&#xff0c;应该已经覆盖了绝大多数技术要点&#xff0c;但缺点是不够详细&#xff08;篇幅有限&#xff09;。本文共分为4个部分&#xff1a;总体论述、高性能网络编程、高性能数值计算、常…

【揭秘】ForkJoinTask全面解析

内容摘要 ForkJoinTask的显著优点在于其高效的并行处理能力&#xff0c;它能够将复杂任务拆分成多个子任务&#xff0c;并利用多核处理器同时执行&#xff0c;从而显著提升计算性能&#xff0c;此外&#xff0c;ForkJoinTask还提供了简洁的API和强大的任务管理机制&#xff0c…

常规的管理系统除了适用该有的范儿一定要有!气质上不能输

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 常规的管理系统除了适用该有的范儿一定要有!气质上不能输 在现今快速发展的商业环境中…

Error:Resource not found: openni2_launch

报错信息 Resource not found: openni2_launch ROS path [0]/opt/ros/melodic/share/ros ROS path [1]/media/zhangdama/F4ACC8D7C3CD6C91/kobuki_gazebo_imitation/mount/vln-pano2real-ros/src ROS path [2]/opt/ros/melodic/share The traceback for the exception was wri…

Android音量调节修改

前言 今日公司&#xff0c;安卓设备的音量显示不正常&#xff0c;让我来修复这个bug&#xff0c;现在已修复&#xff0c;做个博客&#xff0c;记录一下&#xff0c;以后碰到类似一下子就好解决。 Android音量调节相关 路径 frameworks\base\services\core\java\com\android…

NIO-Selector详解

NIO-Selector详解 Selector概述 Selector选择器&#xff0c;也可以称为多路复⽤器。它是Java NIO的核⼼组件之⼀&#xff0c;⽤于检查⼀个或多个Channel的状态是否处于可读、可写、可连接、可接收等。通过⼀个Selector选择器管理多个Channel&#xff0c;可以实现⼀个线程管理…