漠然 发表于 2013-7-19 13:51:41

做好的exe文件在dos里直接运行,然后用debug查看没有任何改变。

但是用debug加载一步一步运行,最后查看内存就改变了,这是怎么回事

漠然 发表于 2013-7-19 13:52:20

希望前辈能来解惑一下

小甲鱼 发表于 2013-7-19 15:29:34

漠然 发表于 2013-7-19 13:52 static/image/common/back.gif
希望前辈能来解惑一下

希望提供下代码和问题截图。

漠然 发表于 2013-7-19 20:28:41

小甲鱼 发表于 2013-7-19 15:29 static/image/common/back.gif
希望提供下代码和问题截图。

嗯 我在下面放截图

漠然 发表于 2013-7-19 20:29:24

这个是源程序

漠然 发表于 2013-7-19 20:30:55

1是直接运行exe和结果,2是用debug加载运行的和结果。

漠然 发表于 2013-7-19 20:32:01

问题就是直接运行,查看内存并没有改变

小甲鱼 发表于 2013-7-19 22:07:14

漠然 发表于 2013-7-19 20:30 static/image/common/back.gif
1是直接运行exe和结果,2是用debug加载运行的和结果。
程序直接运行并退出后,所有的环境和状态都会弹出栈,也就是恢复默认。在1图中,你是执行完成4.exe,再执行debug.exe,是两个不同的程序哦,在2图中,你是用debug加载4.exe,才是4.exe的内存状态。

Crazy迷恋. 发表于 2013-7-19 22:40:20

漠然 发表于 2013-7-19 20:32 static/image/common/back.gif
问题就是直接运行,查看内存并没有改变

哥们 ~~~鱼大说的就是要在dos中输入:debug 4.exe 这样来调试~~~不知道楼主这个程序是在哪里的~~你push后就直接退出了 程序~~~以前用vs2010写c++中内联汇编的时候我记得 push了数据后 如果没有pop,程序执行到最后会出问题的~~~在汇编中我还没这样试过~~~我去试试这段代码 ~~谢谢哥们发出来做为参考~~~

Crazy迷恋. 发表于 2013-7-19 22:48:25

小甲鱼 发表于 2013-7-19 22:07 static/image/common/back.gif
程序直接运行并退出后,所有的环境和状态都会弹出栈,也就是恢复默认。在1图中,你是执行完成4.exe,再执 ...

鱼大~~~~在汇编中不用使得栈平衡吗? 他直接push了数据在退出的时候却并没用pop或者其它指令使得栈平衡(我记得以前使用vc中内联汇编的时候,push后数据要pop掉栈里的东西否则堆栈在最后的时候就会崩溃~~~),这里他怎么没出现过这个问题呀~~~~很费解~~~

漠然 发表于 2013-7-20 09:42:54

小甲鱼 发表于 2013-7-19 22:07 static/image/common/back.gif
程序直接运行并退出后,所有的环境和状态都会弹出栈,也就是恢复默认。在1图中,你是执行完成4.exe,再执 ...

也就是说程序执行完,栈段的内容会恢复默认。但是1中最后显示出来的内容(0,0,0,0......)是在程序里给定的数值,而这段内存原本的默认值并不是0,0,0,0.......这是怎么回事
还有就是只有栈段的内容会恢复,而其他普通段的内容是不会恢复的吗?我自己看是不会恢复的

漠然 发表于 2013-7-20 09:44:08

Crazy迷恋. 发表于 2013-7-19 22:40 static/image/common/back.gif
哥们 ~~~鱼大说的就是要在dos中输入:debug 4.exe 这样来调试~~~不知道楼主这个程序是在哪里的~~你push ...

这个是汇编课本上的课后题

Crazy迷恋. 发表于 2013-7-20 09:58:12

漠然 发表于 2013-7-20 09:44 static/image/common/back.gif
这个是汇编课本上的课后题

我尝试了一下确实是我想多了~~~程序退出的时候栈直接清了~~~~{:1_1:}

漠然 发表于 2013-7-20 11:19:41

Crazy迷恋. 发表于 2013-7-20 09:58 static/image/common/back.gif
我尝试了一下确实是我想多了~~~程序退出的时候栈直接清了~~~~

那用debug加载的结果会不会清呢?

漠然 发表于 2013-7-20 11:27:59

小甲鱼 发表于 2013-7-19 22:07 static/image/common/back.gif
程序直接运行并退出后,所有的环境和状态都会弹出栈,也就是恢复默认。在1图中,你是执行完成4.exe,再执 ...

我又试了一下,直接运行之后确实会恢复默认,上面可能是我前面哪里搞错了。但我发现用debug加载运行之后的结果是不会被恢复的,是吗

Crazy迷恋. 发表于 2013-7-20 11:29:22

漠然 发表于 2013-7-20 11:19 static/image/common/back.gif
那用debug加载的结果会不会清呢?

如果 在cmd中输入的是debug 4.exe的话 这样就是向debug程序传入4.exe这个程序,debug会对4.exe这个程序进行调试,debug调试它的时候它就相当于进入运行状态~~~~在运行中内存寄存器的值才会按照我们程序所写的那样正常执行,如果一个程序执行完毕后,内存空间是不属于这个程序的。它是属于整个操作系统自由调配的空间。{:1_1:}

漠然 发表于 2013-7-20 11:33:40

这个是题目和答案,题目要求是将数据储存在B段中,可是答案讲b段设为一个栈段,程序运行之后,栈段就恢复了,这样并没有将数据储存到b段中。这样就和题目要求不符了。

小甲鱼 发表于 2013-7-20 17:03:13

漠然 发表于 2013-7-20 11:27 static/image/common/back.gif
我又试了一下,直接运行之后确实会恢复默认,上面可能是我前面哪里搞错了。但我发现用debug加载运行之后的 ...

16#给了很好的回答~

小甲鱼 发表于 2013-7-20 17:07:06

Crazy迷恋. 发表于 2013-7-19 22:48 static/image/common/back.gif
鱼大~~~~在汇编中不用使得栈平衡吗? 他直接push了数据在退出的时候却并没用pop或者其它指令使得栈平衡( ...

这是有BUG的编程,PUSH就需要POP对应,但就算程序里边只有PUSH没有POP也是没关系的,因为程序退出后,所有的数据会销毁无效啦~

漠然 发表于 2013-7-20 18:10:34

Crazy迷恋. 发表于 2013-7-20 11:29 static/image/common/back.gif
如果 在cmd中输入的是debug 4.exe的话 这样就是向debug程序传入4.exe这个程序,debug会对4.exe这个程序 ...

明白了谢谢
页: [1] 2
查看完整版本: 做好的exe文件在dos里直接运行,然后用debug查看没有任何改变。