ARM汇编----(1)环境搭建
声明
本系列本人讲到的大多数东西都是参考的周壑
大佬的视频
我一直认为的最好的学习方法就是一个东西你学到以后,进行过实战,并且你能把这个东西讲述给别人,这才能说明你把这个知识学会了。
希望本系列的部分内容能为着急寻找资料的人提供帮助
下载arm64-linux-gcc
本人这里下载64位,当然也可以32位,都无所谓,当然您也可以选择使用Android Studio+NDK
我们来到arm官网
[ARM开发者官网](Downloads | GNU-A Downloads – Arm Developer)
本人这里要在Windows上编写代码,编译linux可执行文件
所以本人在这里选择Windows (mingw-w64-i686) hosted cross compilers
下的AArch64 GNU/Linux target (aarch64-none-linux-gnu)
下载下来是个.tar的压缩类型,如果你的压缩包不能够支持该压缩类型,可以使用bandizip(非常好的一款压缩软件)
我这里直接解压,提示我说有重复的问题,我这里选择了跳过,然而又说什么无法链接符号啥的,这个我们不用管。
我这里在C盘创建了一个名为ARM的文件夹,并解压在了它里面,然后我们把C:\ARM\bin
加入到环境变量
我们最需要用到的是aarch64-none-linux-gnu-g++.exe
(这个是C++编译器)因为我们后续要写一些C/C++常用到的东西(类,虚函数虚表,数组操作等)
最好的办法就是你写的代码编译完看看汇编啥样,加深一下印象,看看各种语法编译出来的特点,以便日后分析更上一层楼
调试服务的部署
我们需要一部手机(root), 或是Android Studio的虚拟机(如果你能成功启动ARM64架构的虚拟机的话可以选择这个)
不Root的话,光在/data/local/tmp目录里操作也应该是可以的
如果您的手机无法ROOT,则可以选择花费200-300元甚至更低的价格入手一台Pixel1(再不济就用qemu搞个arm64架构的虚拟机,就是有亿点卡, 百度有十分详细的教程,是qemu安装arm64架构的UOS linux系统)
我们还需要adb(Android Debug Bridge), 相信熟悉安卓的小伙伴不陌生,打开开发者模式,打开USB调试
将usb连接手机,在cmd中输入adb devices即可看见可连接设备
在您的ida目录下有个dbgsrv
目录,找到android_server64
打开cmd运行adb push android_server64 /data/local/tmp
然后adb shell
, cd /data/local/tmp
, chmod 777 android_server64
, ./android_server64
编写代码并编译
新建一个main.cpp
文件
#include <iostream>
int main()
{
while(1)
{
printf("HelloARM!\n");
getchar();
}
return 0;
}
之后我们打开cmd, 运行aarch64-none-linux-gnu-g++.exe main.cpp
编译完成,我们还是用adb的办法将编译出来的文件传入安卓, adb push a.out /data/local/tmp
adb shell
cd /data/local/tmp
chmod 777 /data/local/tmp
./a.out
运行程序
我们发现提示No such file or directory
没有这个文件和文件夹???
不慌,直接aarch64-none-linux-gnu-g++.exe main.cpp -static
静态编译,就是文件有点大,把依赖库都链接进去了
再次传入文件,给予运行权限,就可以运行了
此时我们再开一个shell,运行我们的android_server64
IDA调试
我们打开ida64.exe,等主界面出来后,我们点击Debugger -> Attach -> Remote ARM Linux/Android debugger
我们在hostname这里输入手机的ip, 您可以使用在adb shell里运行ifconfig命令来查看
点击OK, 等连接上之后会让我们选择要附加的进程
点击OK后:
这个SVC 0就是系统调用,跟x86架构的syscall差不多
ok的,本章本小节结束。
在下一小节里我们将介绍寄存器
标签:tmp,汇编,local,----,adb,linux,data,ARM From: https://www.cnblogs.com/ARMPredator/p/16916041.html