首页
社区
课程
招聘
[旧帖] [求助]汇编基础问题。请给与帮助 0.00雪花
发表于: 2012-12-14 13:45 1385

[旧帖] [求助]汇编基础问题。请给与帮助 0.00雪花

2012-12-14 13:45
1385
代码如下:

assume cs:code

stack  segment

  db 16 dup (0)

stack ends

code segment

   mov ax,4c00h
   int 21h

start:  mov ax,stack
           mov ss,ax
           mov sp,16
           mov ax,0
           push ax
           mov bx,0
           ret

code ends

end start

我想问的是,mov sp,16  这个时候SP指向的应该是10H,而此时stack 应该是满栈。
那么PUSH AX后 SP又指向哪里了呢? 这个时候 是不是栈越界了?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看不懂~~~~~~~~~
2012-12-14 19:19
0
雪    币: 2120
活跃值: (73)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
栈是高地址向低地址的 push之后sp变小了 没有越界
2012-12-14 19:27
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
入栈之后,sp=sp-2,变小了。你可以看一下王爽的汇编书,那个上面有图有真相,讲得很清楚
2012-12-14 19:56
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
sp:000EH
2012-12-14 20:10
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我知道SP是变小了,但是程序的起初是定义了db 16 dup (0) 的啊。已经定义了16个字节。这个时候在PUSH AX  进去,那么原先栈的内容不是出界了吗?
2012-12-14 20:21
0
雪    币: 2120
活跃值: (73)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
sp=16 栈是空的
sp=0   栈满了
2012-12-14 21:21
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼上正解。。。
2012-12-14 21:25
0
雪    币: 421
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
按照内存的分布 入栈的过程 是 由高地址向低地址方向 sp=10H,push ax,sp=0Eh,栈中保存ax的值,即栈段首地址,不知道我说的对否?
2012-12-14 22:07
0
雪    币: 3343
活跃值: (1243)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
栈是倒着数的,慢慢往下减,当sp<0的时候就溢出了,可能会影响到其他代码。所谓入栈就是从高的值慢慢往下压。
2012-12-15 20:43
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
push后 sp-2  pop后sp+2才会
2012-12-17 22:08
0
游客
登录 | 注册 方可回帖
返回
//