首页
社区
课程
招聘
[旧帖] [求助]8086实模式下的栈问题 0.00雪花
发表于: 2009-7-18 11:32 1359

[旧帖] [求助]8086实模式下的栈问题 0.00雪花

2009-7-18 11:32
1359
assume cs:code

code segment
start:
        mov ax,100h
        push ax
        mov ax,10h
        pop ax
       
        mov ax,4c00h
        int 21h
code ends

end start
我没有定义堆栈段,请问我push ax这个ax寄存器的内容我存到哪里去了?反正肯定是没有丢失掉,因为我pop ax的时候他的值又回来了。。。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 20
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
DOS系统分配的堆栈寄存器(SS)为段地址*16D+偏移地址,指向的物理内存.
2009-7-18 12:54
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
2009-7-18 13:17
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
DOS下没有设置SS段的话,会自动为其分配空间,这个空间的段址与CS段相同,不过是从最高地址开始分配空间的。当第一个push ax后,实际上是保存在SS:FFFE处,在debug中用d ss:fffe或d cs:fffe均可看到堆栈值。
从这里我们也可以知道,只有当代码段很小时程序才正常,当代码本身就超过一个段时(即CS:0000至CS:FFFF均被代码占据),堆栈就不可能还是这里!是不是在这种情况下必须定义堆栈段呢?我没有过,建议还是定义一下吧。
2009-7-18 13:26
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
非常感谢 解释的很详细
2009-7-18 21:51
0
雪    币: 155
活跃值: (29)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
呵呵  王爽的那本书里也有提到 楼主好好看书哦。。
2009-7-18 23:22
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
其实简单想一下就明白了 一个程序有call语句的时候 就会有栈操作  虽然你的代码里并没有定义栈 ,但是程序还是会跳转和返回 只有一个理由那就是系统会自动定义一个栈。
2009-7-19 23:36
0
游客
登录 | 注册 方可回帖
返回
//