|
taowentao
高级用户
积分 739
发帖 111
注册 2004-11-30 来自 辽宁沈阳
状态 离线
|
『第
16 楼』:
main:
mov sp, 0000h
mov sp, 2000h
mov sp, 5000h
mov sp, 0a000h
mov sp, 0f000h
mov sp, 0fffeh
之后没有返回指令,下一条指令可能非法;
就算有返回指令,由于修改了栈顶指针,也可能返回到一个非法指令处。
这就是原因所在...
|
来自山东,现居沈阳 |
|
2007-6-15 21:59 |
|
|
henrya2
中级用户
积分 486
发帖 171
注册 2006-2-12
状态 离线
|
『第
17 楼』:
Quote: | 之后没有返回指令,下一条指令可能非法; 就算有返回指令,由于修改了栈顶指针,也可能返回到一个非法指令处。 这就是原因所在... |
|
我也同意楼上的观点,可是楼主说执行到第二条指令出错,怎么在我的机子上一点事也没有
稍加修改了一下用Tiny模式编译
mcode segment
assume cs:mcode,ds:mcode,ss:mcode
org 100h
start:
main:
mov sp, 0000h
mov sp, 2000h
mov sp, 5000h
mov sp, 0a000h
mov sp, 0f000h
mov sp, 0fffeh
mov ah, 4ch
int 21h
mcode ends
end start
[ Last edited by henrya2 on 2007-6-15 at 10:24 PM ]
|
Those who do not study the past are condemned to repeat it |
|
2007-6-15 22:21 |
|
|
taowentao
高级用户
积分 739
发帖 111
注册 2004-11-30 来自 辽宁沈阳
状态 离线
|
『第
18 楼』:
调试器会在程序栈上或两条指令之间插入一些数据或指令,而程序擅自修改了栈指针,可能因此导致调试器的数据遭到破坏,故而DOWN机...
如果不用调试器,仅执行这几条指令不会出现任何问题。
|
来自山东,现居沈阳 |
|
2007-6-15 22:50 |
|
|
henrya2
中级用户
积分 486
发帖 171
注册 2006-2-12
状态 离线
|
『第
19 楼』:
可我用td并没有出错
|
Those who do not study the past are condemned to repeat it |
|
2007-6-15 23:01 |
|
|
henrya2
中级用户
积分 486
发帖 171
注册 2006-2-12
状态 离线
|
『第
20 楼』:
也许是刚学汇编,很多东西都不懂.
Quote: | 调试器会在程序栈上或两条指令之间插入一些数据或指令,而程序擅自修改了栈指针,可能因此导致调试器的数据遭到破坏,故而DOWN机...
如果不用调试器,仅执行这几条指令不会出现任何问题。 |
|
不是很明白
|
Those who do not study the past are condemned to repeat it |
|
2007-6-15 23:09 |
|
|
netwinxp
高级用户
积分 741
发帖 366
注册 2007-7-25
状态 离线
|
『第
21 楼』:
你修改了堆栈偏移量指针到关键部分,当DEBUG时,如果堆栈段地址SS在高位,这很可能导致堆栈指向ROM段,结果当然是死机,当SS在低端,发生堆栈操作时可能会破坏DOS关键数据表的数据,结果当然也是死机。
|
|
2007-7-25 20:01 |
|
|
sunx
初级用户
积分 38
发帖 17
注册 2006-1-16
状态 离线
|
『第
22 楼』:
用官话来说就是: 无效的sp值可能导致不可以预料的后果
并且,程序有头无尾
|
|
2007-7-26 13:29 |
|
|
zyl910
中级用户
积分 282
发帖 126
注册 2006-5-17
状态 离线
|
『第
23 楼』:
启动EXE时,DOS将返回地址放在sp[0]
现在你修改了sp...
|
人类存在的目的就是试图理解人类为何存在 |
|
2007-8-6 16:07 |
|