arm汇编-补充-画图记忆 LDM/STM系列指令

2023-12-23 19:38:24

说明

原始文章系列
https://azeria-labs.com/writing-arm-assembly-part-1/

翻译-进作者的专栏可以翻到所有翻译
系列:https://zhuanlan.zhihu.com/p/109057983
系列:https://www.anquanke.com/post/id/86383

0x00 调试环境

使用arm架构的系统,只为了学习汇编,把其他复杂降低

下载 https://drive.google.com/drive/folders/107uMlL_DS8yD2TS_0yrHXBDnLOj44a8P 链接中的armv6_stretch.zip文件

修改start.sh文件为

#!/bin/bash

qemu-system-arm \
  -cpu arm1176 \
  -m 256 \
  -net user,hostfwd=tcp::2222-:22 -net nic \
  -kernel kernel-qemu-4.4.34-jessie \
  -M versatilepb \
  -no-reboot \
  -serial stdio \
  -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw console=ttyAMA0" \
  -nographic -monitor /dev/null \
  -hda ./raspbian-stretch.img \

修改ssh.sh文件内容为

#!/bin/bash

SSH_PORT=2222

echo "[+] user 'pi' / password 'raspberry'"
ssh -4 -p ${SSH_PORT} pi@localhost"$@"

先运行start.sh,再运行ssh.sh,输入密码raspberry就能进入
在这里插入图片描述


拷贝宿主机中的start.bat文件到虚拟机中pi用户的家目录中(需要输入pi的密码raspberry

  • 在宿主机中执行
scp -P 2222 start.bat pi@127.0.0.1:~

把虚拟机中的pi用户家目录中的test.bat文件拷贝到宿主机中(需要输入pi的密码raspberry

  • 在宿主机中执行
scp -P 2222 pi@127.0.0.1:~/test.bat .

安装gdb、gcc,并安装gdb调试插件peda

0x01 忘掉啥从左到右,从右到左,就是整体平移

在这里插入图片描述

0x02 LDM/STM-IA/IB/DA/DB

-IA(之后增加)、-IB(之前增加)、-DA(之后减少)、-DB(之前减少)

  • i 是往地址增大的方向,整体平移放置
  • d 是往地址减小的方向,整体平移放置
  • A 就是正常的逻辑
  • B 跳过op1直接指向的内容,从下一个或上一个开始

在这里插入图片描述


在这里插入图片描述

0x03 LDM/STM-FA|FD|EA|ED

  • 栈地址的增长方向:
    • A:ARM将向高地址增长的栈称为递增栈( Acendant Stack)
    • D:将向低地址增长的栈称为递减栈(Descendent Stack)
  • 栈指针的指向位置:
    • F:ARM将栈指针指向栈顶元素位置的栈称为满栈(Full Stack)
    • E:将栈指针指向即将入栈的元素位置的栈称为空栈(Empty Stack)

D和A的含义:都是相对于入栈的增长方向来说的

在这里插入图片描述

F和E的含义:入栈和出栈时sp指向的地址的作用来说的

  • 对于入栈
    • Full:sp所指向的地址有内容了,不可以放东西
    • Empty: sp指向的是空的,可以放东西
  • 对于出栈
    • Full:sp指向的内容有内容,可以把里面的内容用于出栈
    • Empty: sp指向的是空的,不能用于出栈
      在这里插入图片描述

文章来源:https://blog.csdn.net/u014679440/article/details/135167410
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。