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

说明

原始文章系列
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/bashqemu-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/bashSSH_PORT=2222echo "[+] 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指向的是空的,不能用于出栈
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295678.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python时间处理方法和模块

在 Python 中,有一些内置的模块和库,可以帮助我们处理日期和时间的表示、计算和转换。 1. 时间模块(time) Python 的 time 模块提供了一系列函数来处理时间相关的操作。通过这个模块,可以获取当前时间、睡眠指定时间…

1161转进制(C语言)

一:题目 二:思路分析 1.首先该题目让我们使用递归求十进制转其他进制 2.其次,我们要知道十进制转换为其他进制怎么转换,以例题所给的数据为例 由此图可以看出,十进制转换为其他进制,是辗转相除法&#xf…

性能实战(一) --- clock_gettime造成系统整体cpu过高定位过程

问题背景 有一台linux服务器测试环境cpu经常到达80%,造成系统卡顿,部分功能不可用. 分析步骤 1.使用perf制作cpu火焰图 通过制作cpu火焰图,发现很多进程都存在大量的clock_gettime系统调用. 2. 使用bcc工具funclatency`进一步查看clock_gettime的调用次数 # /usr/share/bc…

SpringMVC:Ajax、拦截器、文件上传、文件下载

文章目录 SpringMVC - 06一、Ajax1. 概述2. Ajax 异步加载数据1. 单个数据2. 对象 3. 实践4. 总结 二、拦截器1. 概述2. 实现3. 实践4. 总结 三、文件上传:Upload1. 准备工作2. 步骤3. 效果 四、文件下载:Download1. 步骤2. 效果3. 总结 注意&#xff1a…

AI 绘画StableDiffusionWebui图生图

介绍 stable-diffusion-webui AI绘画工具,本文介绍图生图,以一张图片做底图优化生成。 例如:上传一张真人照片,让AI把他改绘成动漫人物;上传画作线稿,让AI自动上色;上传一张黑白照&#xff0c…

第11章 GUI Page417~418 步骤五 支持方框 使用宏定义

运行效果: 原来的创建item的方式: 使用宏定义的方式:

Vue3+SpringBoot实现文件上传详细教程

文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入库等后续操作。 今天通过这…

Linux数据库主从复制(单主单从)

MySQL主从复制的优点包括: 1、横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可以在一个或多个从设备上进行。该模型可以提高写入性能(因为主设备专用于更新…

【Linux驱动】字符设备驱动程序框架 | LED驱动

🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 目录 🏀Hello驱动程序⚽驱动程序框架⚽编程 🏀LED驱动⚽配置GPIO⚽编程驱动…

机器学习---比较单个学习器与Bagging集成的偏差-方差分解、在Iris数据集的不同特征子集上使用不同的分类器进行训练和可视化

1. Bagging 说明并比较了预期均方误差的偏差方差分解,单个学习器与bagging集成的比较。 在回归中,估计器的预期均方误差可以根据偏差、方差和噪声进行分解。 在回归问题的数据集上的平均值上,偏差项测量估计器的预测与问题的最佳可能估计器…

大语言模型的三种主要架构 Decoder-Only、Encoder-Only、Encoder-Decoder

现代大型语言模型(LLM)的演变进化树,如下图: https://arxiv.org/pdf/2304.13712.pdf 基于 Transformer 模型以非灰色显示: decoder-only 模型在蓝色分支, encoder-only 模型在粉色分支, encod…

在Linux下探索MinIO存储服务如何远程上传文件

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 创建Buckets和Access Keys二. Linux 安装Cpolar三. 创建连接MinIO服务公网地…