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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!