ARM汇编----(1)环境搭建

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的,本章本小节结束。

在下一小节里我们将介绍寄存器

posted @   ARMPredator  阅读(401)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示