汇编mov指令的操作对象都可以是什么、一些debug指令的介绍
mov指令的操作对象都可以是什么、一些debug指令的介绍
- 起因(本文内容)
- 先放结论(省流小助手)
- 以下命令是可行的
- 以下命令是不行的
- 对以上几个不常用命令的测试过程截图
- "mov 段寄存器,内存空间" 、 "mov 内存空间,段寄存器"
- "mov 段寄存器,段寄存器"、"mov 段寄存器,常量数据"、"mov 内存单元,常量数据"
- 求证过程中出现了一个有意思的问题
- 一些debug指令的介绍
- 结束语
起因(本文内容)
今天在学习王爽老师的《汇编语言》,学到mov指令的时候,我注意到王爽老师在书中列出了几个mov指令的操作对象,但是他并没有完全列出来,本着求证的态度,我使用了xp虚拟机进行了一波试验,来探究mov的操作对象究竟可以是什么
先放结论(省流小助手)
以下命令是可行的
mov 通用寄存器,通用寄存器
mov 通用寄存器,常量数据
mov 通用寄存器,内存单元
mov 内存单元,通用寄存器
mov 段寄存器,通用寄存器
mov 通用寄存器,段寄存器
mov 段寄存器,内存单元
mov 内存单元,段寄存器
mov 内存单元,内存单元
以下命令是不行的
mov 段寄存器,常量数据
mov 内存单元,常量数据
mov 段寄存器,段寄存器
对以上几个不常用命令的测试过程截图
“mov 段寄存器,内存空间” 、 “mov 内存空间,段寄存器”
上述ds:0200的值被放入了es寄存器中,而ss寄存器中的值被放入了ds:0200的位置
“mov 段寄存器,段寄存器”、“mov 段寄存器,常量数据”、“mov 内存单元,常量数据”
尝试写入命令,结果直接报错
求证过程中出现了一个有意思的问题
在求证"mov 段寄存器,内存空间"这一指令时,发生了如图所示的奇怪事情:
这里,之前通过d命令查看的[0100]内存空间的值明明是CD42,但是mov到段寄存器却变成了068E,显得有点奇怪,我刚开始毫无头绪,以为是环境的特性,但是后来我突然注意到,ds的值竟然和a命令的默认段地址是一致的,到这里我先打住,大家请看下图和后续的分析:
我的xp虚拟机debug环境下初始进入之后各寄存器的初始值是这样的(我不知道其他环境下是不是这样)
然后当我尝试使用a命令写入汇编指令的时候,我a命令后面没有接指定地址,而是使用的默认地址,我发现默认地址中的段地址和各段寄存器的地址是一样的,而且偏移地址的值和ip值是一样的。
我在想a命令的默认地址是不是受到某个段寄存器和ip值的影响,于是我使用r命令更改了各段寄存器和ip的值。
结果我发现a命令的默认地址还是不变,说明a的默认地址不受段寄存器的影响,而是系统提前指定好的。
回到上面的问题中,我们也就可以推出问题的答案了,一开始我们查看的ds:0100是CD42不错,但是a命令的默认初始地址就是0AE3:0100,也就是和ds:0100是一致的,所以在后续我们将汇编指令写入的时候,汇编指令就会将原本的数据给覆盖掉,那么后面mov给ss的值自然也就是变化后的了。
问题解决!
一些debug指令的介绍
关于debug的指令:
-
r命令:裸命令可以查看寄存器的值,后面接寄存器的话可以以提问的方式修改寄存器的值,不能在寄存器后面直接加值。
-
t命令:单步执行汇编指令,上面图中有演示,这里就略过。
-
d命令:查看内存中的数据,裸命令默认地址为ds:0100,后可接起始地址和终止地址。
-
a命令:裸命令在默认地址写入汇编指令,后可接指定地址在指定位置写入指令,上面也有演示,这里略过。
-
u命令:后接地址,将该位置的机器指令翻译为汇编指令,不接地址翻译默认位置的指令即cs:ip的地址,但是在我的环境下,修改ip后要先用一下r命令,然后u命令才会翻译cs:ip位置的指令(我不知道为什么,很神奇)。
-
e命令:
-
后接地址,可以以覆盖的方式向内存中写入数据
-
后接地址直接回车,会一个个地修改数据,按空格进行下一个,按回车结束
-
后接地址再接数据,数据中间以空格隔开,可以批量修改
-
结束语
大概就写这么多吧,后面再学习过程中发现什么或者有什么总结的话还会发出来的(大概吧~
qq_31713405: 先生真乃孔明也
拿了个杯嘚: 先生大义
RMBCN: 不错按照说明操作成功
CSDN-Ada助手: 恭喜您成功写出第7篇博客!使用phpstudy搭建安装xhcms靶场环境这个主题非常实用,对于学习网络安全的朋友们一定很有帮助。接下来,建议您可以尝试分享一些关于靶场环境的实际应用案例或者使用心得体会,让读者更加深入地了解这个领域。希望您能继续保持创作的热情,期待您更多的精彩文章!谢谢您的分享!
赛博苦修士: 看看你手机有没有开发者模式,没有的话进一下,然后连接模式选择传输文件,不要选仅充电