在这里,我们第一次实实在在地接触汇编。在机器码与汇编指令之间有一种对应的关系,机器码可以表达汇编语言的意思,汇编也可以表达机器码的的意思。也就是后面要说的,代码是数据,数据也即代码指令。
Nop指令的作用:http://wenwen.sogou.com/z/q570331277.htm
nop指令的作用:
1)就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用nop指令,cpu 就可以从第四个字节处读取指令了。)
2)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟;-->具体应该说是占用了3个时钟脉冲
3)i/o传输时,也会用一下 nop,等待缓冲区清空,总线恢复;
4)清除由上一个算术逻辑指令设置的flag位;
5)破解:对于原程序中验证部分使用nop来填充,使验证失效;
计算api的虚拟内存地址时,要注意这是十六进制的计算而不是十进制的计算。如果碰到复杂的计算,也可以利用程序员计算器来计算。
在制作机器代码时,要注意内存数据与数值数据的区别。我们在上面找出的是数值数据,但我们制作机器代码时要输入的是内存数据。
一切顺利的话,就会成功。
这后面的话,因为没有将程序腿出功能做好,所以程序崩溃。
注意:在栈溢出实验中,因为win7及以上系统有较健全的保护机制,所以即使你的步骤全正确实验也不会成功。做这类的实验最好在虚拟机上做!
本文出自 “天下皆白,哼” 博客,请务必保留此出处http://xiaoqin00.blog.51cto.com/10468367/1718443
原文:http://xiaoqin00.blog.51cto.com/10468367/1718443