看雪高手写了在windows 上基于x86架构的 C++ 反汇编分析,但是没有人弄过在linux下基于arm架构的C++反汇编教程,这里尝试分析下,可以看到不管在win下还是linux下,不管基于x86还是基于arm 都遵循同样的C++标准,内存布局都是一样的。
说下运行环境:
主机Win10-64bit
主机上有一个vmware workstation 12.1
vmware 里 安装一个32bit ubuntu14.04 环境
然后在这个ubuntu14.04 上搭建环境 为了方便这里不再从头编译而是使用网络上现成的二进制工具,参考Architectures/ARM/HowToQemu
1)下载arm-linux交叉编译工具,并且配置环境 arm-none-linux-gnueabi-gcc下载
2)下载 arm-linux 内核镜像 zImage-qemu-versatile-3.0.8-4.fc17.armv5tel
3)安装qemu-arm,这里不再编译,直接使用命令
sudo apt-get install qemu-system-arm
安装完毕即可。
4)制作根文件镜像,本来上面ARM/HowToQemu 给出了文件系统下载地址,可是即便打开SS翻墙也无法下载,无奈只得自己重新制作一个。
安装 ncurses
sudo apt-get install libncurses5-dev libncursesw5-dev
下载最新的busybox,make menuconfig 配置
Busybox Settings --->
Build Options --->
Cross Compiler prefix
按回车填入如下内容:
/opt/toolchain/arm/arm-2014.05/bin/arm-linux-
配置静态编译 busybox
Busybox Settings --->
Build Options --->
Build BusyBox as a static binary (no shared libs)
然后make && make install 就可以在当前目录中会生成“_install”目录。
剩下的工作就和以前博文 linux内核调试环境搭建-2 用busybox搭建 一样,如果觉得制作麻烦,我在dropbox上给出了制作好了的文件系统压缩包,下载下来之后解压到 busybox.img 里面即可。
至此,qemu-arm,zImage-arm,busybox-arm都已经得到。
按照 上面博文链接 中给出的方法创建主机设备,让主机和虚拟机能通信。
脚本启动
$ qemu-system-arm -M versatilepb -kernel zImage-qemu-versatile-3.0.8-4.fc17.armv5tel -hdc busybox.img -append root="0800" -k en-us -net nic -net tap,ifname=tap0,script=no
至此一个基于 qemu 的 arm-linux 虚拟机可以完美的跑起来: