linux搭建ARM可调式环境
0x00 前言
本文中所介绍的方法目前只测试了单个的demo,并没有拿大型的项目做测试,但是应该是大同小异。这里介绍两种方法,一种是有独立的ARM硬件,另一种是依靠qemu
实现的模拟化,其实其本质都是一样的。如果是大型项目的话最好还是建议有一个原生的环境,毕竟模拟环境通常会遇到一些意外的事。
0x01 依靠qemu搭建环境
环境准备
- ubuntu 20.04
这里我的物理机是ubuntu,虚拟机一样的。首先需要安装一下qemu的环境和编译ARM汇编机器码的交叉gcc编译器,其安装命令如下
luna@ubuntu:~$ sudo apt update -y && sudo apt upgrade -y
luna@ubuntu:~$ sudo apt install qemu-user qemu-user-static gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu binutils-aarch64-linux-gnu-dbg build-essential
然后我们编写一个测试代码,来验证编译和执行的效果
#include <stdio.h>
int main(void) {
printf("hello\n");
return 0;
}
然后在编译的时候添加一个-static
选项,否则在程序执行时会出现动态链接库找不到的情况
luna@ubuntu:~/study/c$ aarch64-linux-gnu-gcc -static -o test test.c
然后执行查看结果
luna@ubuntu:~/study/c$ ./test
hello
到目前为止执行是没有什么问题了,接下来就是调试的问题,调试我们需要安装一下gdb的多架构支持版本,在ubuntu中只需要执行一下命令
sudo apt-get update && apt install gdb-multiarch -y
然后就是调试的设置了
0x02 调试
这里由于本地执行调试的话会出现问题,所以只能选择远程调试的方式,调试步骤如下,首先用qemu运行被调试程序,指定gdb远程调试端口为1234
,文件名为test
luna@ubuntu:~/study/c$ qemu-aarch64 -L /usr/aarch64-linux-gnu/ -g 1234 ./test
然后在另外一个终端中,我们打开gdb-multiarch
,然后键入如下的指令链接到远程目标
pwndbg> target remote 127.0.0.1:1234
pwndbg> file ./test
Reading symbols from ./test...
这样就可以通过源码调试的方式来调试程序了,结果如下图所示
0x03 动态链接的方式如何调试
刚才的调试环境基本接近完美,但是,问题是如过目标程序是动态链接的呢?这在实际的测试中是个大问题,解决的办法是在打开gdb以后指定一个路径,如下
For AArch64:
(gdb) set solib-search-path /usr/aarch64-linux-gnu/lib/
0x04 物理设备
在捣鼓了模拟环境以后,突然看到了之前淘汰的一个小米手机,刚好可以拿来作为ARM64的实际环境,首先需要安装一个termux,安装以后需要装一下ssh,基本步骤如下(注意,是在termux中操作)
#安装OpenSSH
$ pkg install openssh
#运行SSH Server
$ sshd
#设置密码
$ passwd
#获得Android IP
$ ifconfig
#PC端连接
$ ssh 用户名@ip -p 8022
注意手机必须和PC在一个网段内,然后在其上安装gcc
,gdb
$ pkg install gcc gdb
然后就可以开心的调试了,
这里的一个问题是不能安装gdb的插件,如果不习惯的话可以用之前的远程调试来达到目的
#在手机端
gdbserver :1234 a.out
#PC端
pwndbg> target remote 192.168.0.100:1234
linux搭建ARM可调式环境的更多相关文章
- Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核
Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...
- Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统
Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统 标签(空格分隔): Qemu ARM Linux 经过上一篇<Qemu搭建ARM vexpress开发环境(二)- ...
- Qemu搭建ARM vexpress开发环境(一)
Qemu搭建ARM vexpress开发环境(一) 标签(空格分隔): Qemu ARM Linux 嵌入式开发离不开硬件设备比如:开发板.外设等,但是如果只是想学习研究Linux内核,想学习Linu ...
- 2019.03.03 - Linux搭建go语言交叉环境
编译GO 1.6版本以上的需要依赖GO 1.4版本的二进制,并且需要把GOROOT_BOOTSTRAP的路径设置为1.4版本GO的根目录,这样它的bin目录就可以直接使用到1.4版本的GO 搭建go语 ...
- win10下用Linux搭建python&nodejs开发环境
Win10下用自带Linux系统搭建开发环境 Win10下用自带Linux系统搭建开发环境启用Linux老版本(win10 1709之前):新版本(win10 1709之后)卸载linux老版本新版本 ...
- Linux 搭建Nginx+uWSGI+Django环境
安装环境 sudo apt-get install nginx sudo apt install python3 sudo apt install python3-pip 使用 sudo pip3 i ...
- 用Linux 搭建 PXE 网络引导环境
本例子中使用了CentOS7.4 minimal 系统,并且关闭了防火墙和selinux,并使用了dhcp.tftp.http和samba服务. 假设PXE服务器是192.168.4.104 ,tft ...
- Linux搭建PHP+MySQL+Apache环境
环境: CentOS 6.4 MySQL详细安装可参考:http://www.cnblogs.com/yangxia-test/archive/2012/11/12/2766237.html Apac ...
- 如何在linux搭建airtest+chromeweb测试环境--(用命令行运行.air脚本)
大前堤: 如果你需要airtest提供的可视化测试报告,那你的操作系统,一定要有图形化界面. 否则运行你的airtest脚本 会遇到这样的问题 Xlib.error.DisplayNameError: ...
随机推荐
- PHP 直接使用html输出excel
1 <?php 2 header("Cache-Control:public"); 3 header("Pragma:public"); 4 5 head ...
- Docker实例开机启动
部署项目服务器时,为了应对停电等情况影响正常web项目的访问,会把Docker容器设置为开机自动启动. 在使用docker run启动容器时,使用--restart参数来设置: docker run ...
- C#动态实体集的反序列化(动态JSON反序列化)
一.使用场景 我们在将 JSON 反序列化实体集的时候,如果字段是固定的,那么我们序列化非常简单,对应字段写的实体集就可以了.比如下面这种: { "data":[ { " ...
- 配置redis服务器允许远程连接
说明 默认情况下,redis只允许本机访问.如果需要外部访问,需要修改下配置文件. 配置修改 redis.windows.conf 将bind 127.0.0.1 注释 将protected-mode ...
- 自己总结的关于图论的一些算法实现(C语言实现,有较详细注释,800行左右)
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define TRUE 1 5 # ...
- Fast Bokeh Effects Using Low-Rank Linear Filters
Fast Bokeh Effects Using Low-Rank Linear Filters paper地址:https://www.researchgate.net/publication/27 ...
- Python 字符串操作分类
应用举例: str="abc defghi jklm nopqrstuvwxyz" print(str.isspace()) 运行结果: False 1) 判断类型 方法 | 说明 ...
- 一次失败的java Box居中尝试
效果如下: 通过Box的应该虽然实现了居中,但是页面相当丑!且不能插入JTextField等文本框,总的来说相当失败!!! import javax.swing.Box; import javax.s ...
- Java学习日报7.17
控制台运行
- 单细胞分析实录(1): 认识Cell Hashing
这是一个新系列 差不多是一年以前,我定导后没多久,接手了读研后的第一个课题.合作方是医院,和我对接的是一名博一的医学生,最开始两边的老师很排斥常规的单细胞文章思路,即各大类细胞分群.注释.描述,所以起 ...