首页 > 编程语言 >ARM汇编----(1)环境搭建

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

时间:2022-11-22 18:23:27浏览次数:64  
标签:tmp 汇编 local ---- adb linux data ARM

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

相关文章

  • 中科大嵌入式linux课程笔记01
    lesson1嵌入式系统主要概念课程简介课程目录参考书嵌入式系统结构和开发流程概念、特点、组成、硬件、软件、开发​ 嵌入式系统首先是一个计算机系统,后者有的技......
  • c# vlc
    https://www.cnblogs.com/haibindev/archive/2011/12/21/2296173.html 调用要改,tothi[DllImport("libvlc",CallingConvention=CallingConvention.Cdecl,......
  • Redis常用基本数据类型
    Redis常用基本数据类型Redis数据类型Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset:有序集合)。String(字符串)string是redis最基本的......
  • 2. pycharm终端提示无法加载文件 F:\Users\Administrator\PycharmProjects\python
    问题如下:终端(terminnal)遇到下面红色问题。   怎么解决??pycharm终端提示无法加载文件F:\Users\Administrator\PycharmProjects\pythonProject\venv\Scripts\activa......
  • Idea
    Idea检查自动注入错误问题Editor->Inspections->Spring->SpringCore->Code->AutowiringforBeanClass->Severty:Warningshell脚本文件格式错误Editor->FileEncodin......
  • 基于遗传优化的车间订单拣选优化matlab仿真
    一、建模背景汽车生产需要进行上千个零件的组装,而主机厂采用柔性生产,对于每种零部件的需求呈现小批量,多频次的特点,而对于服务于主机厂的区域分拨中心,需要对主机厂的订单进......
  • Spring事务
    1什么是事务?事务(Transaction)是数据库区别于文件系统的重要特性之一。目前国际认可的数据库设计原则是ACID特性,用以保证数据库事务的正确执行。Mysql的innodb引擎中的事务......
  • 关于pathlib的iterdir返回的文件顺序问题
    默认情况下,从python的执行结果来看,iterdir的顺序仿佛是有序的,但是对于一些特殊场景,docker中等可能会出现返回的文件是无序的情况,因此我们需要去进行排序。下面是官网的描......
  • 云原生技术中台 CNStack2.0 正式发布
    作者:奥陌11月5日,在2022杭州·云栖大会上,云原生技术中台CNStack2.0 正式发布。阿里巴巴资深技术专家谢吉宝介绍CNStack2.0企业在数字化转型的过程中,一部分问......
  • 求超大文件上传方案( asp.net )
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持......