ARM64调试环境
自从上一次ZCTF做了一道ARM64的逆向题目后,我决定记录下利用qemu搭建ARM64的环境的过程,以后肯定会遇到更多ARM平台下的Reverse和PWN。
一 安装QEMU
我要模拟的是64位的ARM环境,所以需要使用的是qemu-system-aarch64。在kali下,使用apt-get install qemu-system-aarch64就可以安装成功。
二 可以直接使用的QEMU镜像
Ubuntu为用户已经提供了已经安装好系统的文件系统镜像。在
https://cloud-images.ubuntu.com/ 里可以找到各个ubuntu server版本的QEMU镜像,我在这里使用了Ubuntu Server 14.04。后缀是disk1.img就是qemu支持的镜像。

三 对下载的镜像进行扩容
默认情况下,这个文件系统镜像能使用的大小为2G。

我就对这个文件系统进行扩容。
qemu-img resize trusty-server-cloudimg-arm64-disk1.img 20G 将镜像的容量扩展为20G
modprobe nbd max_part=8
qemu-nbd -c /dev/nbd0 trusty-server-cloudimg-arm64-disk1.img 使用qemu-nbd挂载该镜像
fdisk /dev/nbd0 对其进行分区调整

删除/dev/nbd0p1分区

重建/dev/nbd0p1分区

使其可引导

使文件系统适应扩展后的镜像。

四 提取vmlinuz和intrid.img
mkdir mnt
mount /dev/nbd0p1 mnt
ls -lt mnt/
cp mnt/boot/vmlinuz-3.19.0-25-generic .
cp mnt/boot/initrd.img-3.19.0-25-generic .
umount mnt
qemu-nbd -d /dev/nbd0
五 万事俱备 启动系统
Qemu的网络可以有多种方式,我对两种常用的方式进行介绍。
为了QEMU的Guest系统使用网络,QEMU需要为Guest准备虚拟的网络设备(比如网卡),还要为每一个虚拟的网络设备准备一个backend,backend负责与虚拟的网络设备进行交互,比如将Guest系统产生的网络流量从虚拟的网络设备中取出放入Host系统的网络中。每一个backend要和一个虚拟的网络设备进行关联。在系统的启动时,需要指定下面两行参数。
-netdev TYPE,id=NAME,...
-device TYPE,netdev=NAME
第一种使用网络的方式类似于Nat的方式,Guest系统可以进行网络访问,但是Host系统不能直接访问Guest系统。可以使用如下的命令启动:

第二种方式就是桥接的方式,Guest和Host能相互方便访问,需要Host的root权限。在运行qemu-system-aarch64前需要生成网桥,可使用下面的脚本:

脚本运行之后,运行ifconfig看下

然后使用下面的脚本来启动qemu-system-aarch64

启动后,安装GCC/GDB,开始调试吧!!!
在退出qemu后,运行下面脚本来恢复原有的网络设置

六 其他
我一般会在screen会话里运行qemu,然而退出qemu的快捷键是:Ctrl + a + x。但是这个快捷键的按下会被screen给捕捉到,所以不会到达qemu,那么qemu就不会退出。可以使用下面的命令来退出qemu。其中,arm64是screen的会话名称。
screen -S arm64 -p 0 -X stuff "^ax"
七 参考文献
http://rzycki.blogspot.com/2014/08/using-qemu-to-run-ubuntu-arm-64-bit.html
https://en.wikibooks.org/wiki/QEMU/Networking
http://www.mztn.org/dragon/arm64_01.html
http://www.cnblogs.com/clpszpp/p/linux_bridge.html
https://gist.github.com/larsks/3933980
http://hzqtc.github.io/2012/02/kvm-network-bridging.html
http://suihkulokki.blogspot.my/2014/08/testing-qemu-21-arm64-support.html
https://gist.github.com/philipz/3d278f414f8eadb5afe1
https://en.wikibooks.org/wiki/QEMU/Images
https://wiki.ubuntu.com/ARM64/QEMU
http://blog.eciton.net/uefi/qemu-arm-uefi.html
ARM64调试环境的更多相关文章
- arm64 调试环境搭建及 ROP 实战
前言 比赛的一个 arm 64 位的 pwn 题,通过这个题实践了 arm 64 下的 rop 以及调试环境搭建的方式. 题目文件 https://gitee.com/hac425/blog_data ...
- 微信公众号开发系列教程一(调试环境部署续:vs远程调试)
http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...
- 在Mac系统上配置Android真机调试环境
在Mac系统上配置Android真机调试环境 mac上配置安卓环境还说挺方便的,真机调试也比win上要好一些.win上被各种软件强行安装了xxx助手. 在mac上就了一个干净的感觉. 下载Androi ...
- PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )
1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper 我下的是 里面包含了搭建PHP必须的4个软件: 1. ...
- golang在Windows下Sublime Text开发调试环境的配置
一.前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发.在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如 ...
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境
windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境 http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...
- 配置Windows 2008 R2 64位 Odoo 8.0 源码PyCharm开发调试环境
安装过程中,需要互联网连接下载python依赖库: 1.安装: Windows Server 2008 R2 x64标准版 2.安装: Python 2.7.10 amd64 到C:\Python27 ...
- 在cocos code ide的基础上构建自己的lua开发调试环境
对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...
- 史上最佳 Mac+PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境的配置
在上一篇 PHP 系列的文章<PHP 集成开发环境比较>中,我根据自己的亲身体验,非常简略的介绍和对比了几款常用的集成开发环境,就我个人而言,比较推崇 Zend Studio 和 PhpS ...
随机推荐
- java转换字符串编码格式 (解码错误,重新解码)
字符集概念:规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系. 我们在计算机屏幕上看到的是实体化的文字,而在计算机存储介质中存放的实际是二进制的比特流. ...
- Radar Installation(贪心,可以转化为今年暑假不ac类型)
Radar Installation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other) ...
- Tomcat可以在eclipse里启动,可是不能訪问首页的问题
今天在使用eclipse的时候发现一个问题.就是我在eclipse里面已经启动了tomcat.部署上去的项目也能够启动,可是就是没法訪问tomcat的首页.port等等都没有问题. 后来查到解决方式, ...
- 用Unity做的一个小游戏,仿照一个样例写的,个人认为文章写的不错,哈哈
- android面试题之五
二十六.什么情况会导致Force Close ?如何避免?能否捕获导致其的异常? 抛出运行时异常时就会导致Force Close,比如空指针.数组越界.类型转换异常等等. 捕获:可以通过logcat查 ...
- Zero Downtime Upgrade of Oracle 10g to Oracle 11g Using GoldenGate — 2
Prepare 10g Database for OGG Create GGS and GGS_MON Database Users SQL> create tablespace ggs_tbs ...
- mysql 5.5源码包安装
注:由于mysql5.5的源码包安装与mysql之前的版本安装方法不同,故写一篇随笔记录.5.5的版本不再是./configure make make install 这里用到了cmake了,cmak ...
- JS知识点概况
1.什么是JavaScript a) JavaScript 被设计用来向 HTML 页面添加交互行为. b) JavaScript 是一种脚本语言(脚本语言是一种轻量级的编程语言). c) ...
- 【转】Java与C#语言级比较
原文链接:http://www.harding.edu/fmccown/java_csharp_comparison.html Java 程序结构 C# package hello;public cl ...
- 类 的继承性(Inherits)与 重写(Overrides)
(类) 与 (结构) 类似,让我们可以定义并封装成一组相关项的数据类型.比如封装成结构,那么这个封装包的数据类型就为值类型:如封装成类,那么这个封装包的数据类型就为引用类型. 然而与结构的一个重要区别 ...