您好、欢迎来到现金彩票网!
当前位置:大发体育在线 > 指令栈 >

仅仅改变了下栈指针栈内存数据却莫名其妙变了?有小小的示例程序

发布时间:2019-08-17 00:35 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  栈内的内容是调试器debug.exe改变的。你肯定是在“mov ax,076a”这个地方下断点了,在调试运行中,调试器debug.exe会用“int 3”(机器码0xcc)调试中断指令代替“mov ax,076a”这条指令的下一条指令“mov ds,ax”(同时将“mov ds,ax”这条指令的机器码保存起来,方便调试完毕恢复现场),然后将运行完毕“mov ax,076a”这条指令后,cpu的内部寄存器状态现实出来(也就是你能看到的各个CPU内部寄存器的值的部分),方便分析调试程序:

  int 3指令执行时,会将下一条指令的CS:IP以及16位的FLAGS寄存器内容入栈保存,方便中断例程执行完毕后,通过IRET指令返回程序继续执行。

  X86采用的是小端存储模式,16位模式下,栈是以字为单位的,所以被改变的栈的内容恢复出来就是如下这样的:

  debug.exe在使用IRET指令返回后,并没有清理这段它使用过的内存,仅仅只是恢复了SP的值,所以这段内存的值就看起来有点莫名其妙了。

http://cajonbrush.com/zhilingzhan/378.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有