ble55ing的技术专栏 code analysis ,fuzzing technique and ctf

arm虚拟机环境搭建

2019-07-05
ble55ing

elf

arm虚拟机环境搭建

arm的虚拟机运行环境搭建,分文Qemu和arm-linux-gcc两部分。

Qemu+arm

需要大概三样东西,qemu,linux内核,以及busybox的文件系统。

环境安装

sudo apt-get install gcc-arm-linux-gnueabi #交叉编译工具链
sudo apt-get install zlib1g-dev
sudo apt-get install libglib2.0-0
sudo apt-get install flex bison
sudo apt-get install libpixman-1-dev
sudo apt-get install libglib2.0-dev   #这五个是Qemu要用到的

准备一个文件夹单独用来装环境吧

qemu

先下载Qemu的安装包,

wget https://download.qemu.org/qemu-4.0.0.tar.xz

然后对qemu做配置,用以支持模拟arm架构下的所有单板:

./configure –target-list=arm-softmmu –audio-drv-list=

然后编译、安装

make

make install

编译内核

编译内核得到镜像文件zImage

生成面向vexpress的默认config

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig

然后编译:

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm

然后就可以先试试qemu加载内核,如果能成功显示出来内核的启动信息就是到这里成功了。

qemu-system-arm -M vexpress-a9 -m 512M -kernel linux/arch/arm/boot/zImage -dtb  linux/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"

busybox配置文件系统

下载文件

wget http://www.busybox.net/downloads/busybox-1.31.0.tar.bz2

然后设置默认配置,编译安装

make defconfig

make CROSS_COMPILE=arm-linux-gnueabi-

make install CROSS_COMPILE=arm-linux-gnueabi-

期间可能会出现scripts/Makefile.build:197: recipe for target ‘loginutils/passwd.o’ failed 这样的错误,这时可以在BusyBox源码的include目录下/libbb.h 文件添加一行引用 #include <sys/resource.h> ,得以解决。

之后全部按照参考资料1中写的,

mkdir -p rootfs/{dev,etc/init.d,lib}
sudo cp busybox-1.20.2/_install/* -r rootfs/
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
mkfs.ext3 a9rootfs.ext3
sudo mkdir tmpfs
sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
sudo cp -r rootfs/*  tmpfs/
sudo umount tmpfs

加载文件系统的qemu模拟

之后就可以整合到一起运行了

qemu-system-arm -M vexpress-a9 -m 512M -kernel linux/arch/arm/boot/zImage -dtb linux/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

arm-linux-gcc

arm-linux-gcc

最后发现居然有这种方法,感觉Qemu白调了。 在这个网站上下arm-linux-gcc-4.4.3-20100728.tar.gz

http://arm9.net/download.asp

然后tar -xvf 解压

文件在opt/FriendlyARM 里。

按照参考资料2中写的,

sudo mkdir /usr/local/arm
sudo cp -r opt/FriendlyARM/toolschain/4.4.3 /usr/local/arm
sudo gedit /etc/bash.bashrc

添加一行export PATH=$PATH:/path/opt/FriendlyARM/toolschain/4.4.3/bin

然后到这里我的全局变量没有添加上,因而又添加了一波变量:

sudo gedit /etc/profile
sudo gedit ~/.bashrc

在这两个里添加了环境变量。

然后使用arm-linux-gcc -o hello hello.c 编译,发现少库

error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or direcory。

因此安装库:

sudo apt-get install libstdc++6 
sudo apt-get install lib32stdc++6

然后就ok了

使用echo $PATH看看是不是有了

安装qemu-arm

sudo apt install qemu-user

然后会报错没有库:/lib/ld-linux.so.3: No such file or directory

然后查了资料,可以这么运行:qemu-arm -L /usr/arm-linux-gnueabi -cpu cortex-a15 hello

或者将程序编译成静态的:arm-linux-gnueabi-gcc -o simple -c simple -static

安装了qemu-arm就可以直接使用命令qemu-arm hello运行arm的程序了

使用arm-linux-gdb调试arm程序

按照参考文献的3中说的

./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
make
make install
sudo gedit /etc/profile 

export PATH=$PATH:/usr/local/arm-gdb/bin

试验了8.1 ,7.4两个版本,最终还是最新版的8.3安装成功了

然后如何使用:

开一个terminal,qemu-arm -L /usr/arm-linux-gnueabi -cpu cortex-a15 -g 1234 easy

再开另一个terminal,arm-linux-gdb ./easy,然后输入target remote localhost:1234。

就可以愉快的调试啦

参考文章

https://blog.csdn.net/linyt/article/details/42504975?utm_source=blogxgwz8

http://blog.sina.com.cn/s/blog_13279ca6d0102xb0f.html https://blog.csdn.net/kangear/article/details/8635029


Similar Posts

Content