汇编几个有趣实验
Posted kerman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编几个有趣实验相关的知识,希望对你有一定的参考价值。
实验1:
输入以下命令,我先是使用a命令进行了输入,并用t命令进行的单步调试。
可以发现ax,bx在不同的命令下发生了改变,而ip的值也是根据输入指令的长度而不断的增加。后来我又使用了g命令进行了一次执行完成(结果和单步相同)。
这里需要注意,g的最后范围应当是命令结束的那个地址,而不是下个地址。
随后我又使用了e命令尝试。
首先反汇编看了下,发现没有什么问题。
然而当我尝试使用g命令一次性执行完成时却发生了问题,当我执行到倒数第二个地址时是成功的,而执行到最后一个地址却出现了卡死的状态,我后面尝试了使用不同的方法都失败了,不知道是为什么,求助大佬。
实验2:
使用3条指令完成2的8次方的计算。这里我使用的是7次jmp命令来完成计算。这里记得要修改cs和ip的初始值,因为我们是从2000:0开始写的,而不是从默认地址开始的。
然后使用t开始单步调试,因为一开始要执行2次移动和加法,下面的jmp每次都是要执行2次,共要7次jmp,故总共要执行t命令16次才能得到想要的结果。
这里可以看见ax的16进制为0100转换为10进制就是2的8次方即16的平方256。
实验3:
这里要查找FFF00H~FFFFFH中的生产日期。故我使用了d命令从fff0:0开始找起,发现了一个有趣的现象。
通过这几张图可以发现,在每个段地址从fff0到ffff中都会在00x0中出现01/01/92这个值(x为0~f)而且段地址的最后一位与00x0中的x有着这样的关系 最后一位定义为y的话(即fffy)y+x=16 的00x0的地址就会出现01/01/92。然后我尝试去修改这个值,发现并没有能修改成功。
实验4:
尝试着在b8100一片连续的内存中修改值,出现了如图的情况。
然后我在其他地方修改并不会出现这种情况。
后来查书发现从A0000~BFFFF的内存单元地址都是显存地址,故会出现一些图案。
总结:
经过这几个实验对汇编的一些指令有了初步的了解,也体会到了汇编对内存修改的方便。这里还有几个问题
1.实验1:然而当我尝试使用g命令一次性执行完成时却发生了问题,当我执行到倒数第二个地址时是成功的,而执行到最后一个地址却出现了卡死的状态,我后面尝试了使用不同的方法都失败了,不知道是为什么,求助大佬。
2.实验2:这里有个问题,因为jmp会无限执行下去,故如何才能中止这个程序。
3.实验3:这里也有个问题,如果这个就是生产日期的话为什么会出现/92这种数字。众所周知,一个月最多只有31天。是我找错了还是什么?
以上是关于汇编几个有趣实验的主要内容,如果未能解决你的问题,请参考以下文章
《有趣的二进制:软件安全与逆向分析》读书笔记:通过逆向工程学习如何读懂二进制代码
《有趣的二进制:软件安全与逆向分析》读书笔记:通过逆向工程学习如何读懂二进制代码