鱼C论坛

 找回密码
 立即注册
查看: 6978|回复: 23

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

[复制链接]
发表于 2013-7-19 13:51:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
但是用debug加载一步一步运行,最后查看内存就改变了,这是怎么回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-19 13:52:20 | 显示全部楼层
希望前辈能来解惑一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-19 15:29:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-19 20:28:41 | 显示全部楼层
小甲鱼 发表于 2013-7-19 15:29
希望提供下代码和问题截图。

嗯 我在下面放截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-19 20:29:24 | 显示全部楼层
这个是源程序
代码.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-19 20:30:55 | 显示全部楼层
1是直接运行exe和结果,2是用debug加载运行的和结果。
2.PNG
1.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-19 20:32:01 | 显示全部楼层
问题就是直接运行,查看内存并没有改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-19 22:07:14 | 显示全部楼层
漠然 发表于 2013-7-19 20:30
1是直接运行exe和结果,2是用debug加载运行的和结果。

程序直接运行并退出后,所有的环境和状态都会弹出栈,也就是恢复默认。在1图中,你是执行完成4.exe,再执行debug.exe,是两个不同的程序哦,在2图中,你是用debug加载4.exe,才是4.exe的内存状态。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-19 22:40:20 | 显示全部楼层
漠然 发表于 2013-7-19 20:32
问题就是直接运行,查看内存并没有改变

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

使用道具 举报

发表于 2013-7-19 22:48:25 | 显示全部楼层
小甲鱼 发表于 2013-7-19 22:07
程序直接运行并退出后,所有的环境和状态都会弹出栈,也就是恢复默认。在1图中,你是执行完成4.exe,再执 ...

鱼大~~~~在汇编中不用使得栈平衡吗? 他直接push了数据在退出的时候却并没用pop或者其它指令使得栈平衡(我记得以前使用vc中内联汇编的时候,push后数据要pop掉栈里的东西否则堆栈在最后的时候就会崩溃~~~),这里他怎么没出现过这个问题呀~~~~很费解~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-20 09:42:54 | 显示全部楼层
小甲鱼 发表于 2013-7-19 22:07
程序直接运行并退出后,所有的环境和状态都会弹出栈,也就是恢复默认。在1图中,你是执行完成4.exe,再执 ...

也就是说程序执行完,栈段的内容会恢复默认。但是1中最后显示出来的内容(0,0,0,0......)是在程序里给定的数值,而这段内存原本的默认值并不是0,0,0,0.......这是怎么回事
还有就是只有栈段的内容会恢复,而其他普通段的内容是不会恢复的吗?我自己看是不会恢复的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-20 09:44:08 | 显示全部楼层
Crazy迷恋. 发表于 2013-7-19 22:40
哥们 ~~~鱼大说的就是要在dos中输入:debug 4.exe 这样来调试~~~  不知道楼主这个程序是在哪里的~~你push ...

这个是汇编课本上的课后题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-20 09:58:12 | 显示全部楼层
漠然 发表于 2013-7-20 09:44
这个是汇编课本上的课后题

我尝试了一下确实是我想多了~~~程序退出的时候栈直接清了~~~~{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-20 11:19:41 | 显示全部楼层
Crazy迷恋. 发表于 2013-7-20 09:58
我尝试了一下确实是我想多了~~~程序退出的时候栈直接清了~~~~

那用debug加载的结果会不会清呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-20 11:27:59 | 显示全部楼层
小甲鱼 发表于 2013-7-19 22:07
程序直接运行并退出后,所有的环境和状态都会弹出栈,也就是恢复默认。在1图中,你是执行完成4.exe,再执 ...

我又试了一下,直接运行之后确实会恢复默认,上面可能是我前面哪里搞错了。但我发现用debug加载运行之后的结果是不会被恢复的,是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-20 11:29:22 | 显示全部楼层
漠然 发表于 2013-7-20 11:19
那用debug加载的结果会不会清呢?

如果 在cmd中输入  的是debug 4.exe的话 这样就是向debug程序传入4.exe这个程序,debug会对4.exe这个程序进行调试,debug调试它的时候它就相当于进入运行状态~~~~在运行中内存寄存器的值才会按照我们程序所写的那样正常执行,如果一个程序执行完毕后,内存空间是不属于这个程序的。它是属于整个操作系统自由调配的空间。{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-20 11:33:40 | 显示全部楼层
这个是题目和答案,题目要求是将数据储存在B段中,可是答案讲b段设为一个栈段,程序运行之后,栈段就恢复了,这样并没有将数据储存到b段中。这样就和题目要求不符了。
12.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-20 17:03:13 | 显示全部楼层
漠然 发表于 2013-7-20 11:27
我又试了一下,直接运行之后确实会恢复默认,上面可能是我前面哪里搞错了。但我发现用debug加载运行之后的 ...

16#给了很好的回答~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-20 17:07:06 | 显示全部楼层
Crazy迷恋. 发表于 2013-7-19 22:48
鱼大~~~~在汇编中不用使得栈平衡吗? 他直接push了数据在退出的时候却并没用pop或者其它指令使得栈平衡( ...

这是有BUG的编程,PUSH就需要POP对应,但就算程序里边只有PUSH没有POP也是没关系的,因为程序退出后,所有的数据会销毁无效啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-20 18:10:34 | 显示全部楼层
Crazy迷恋. 发表于 2013-7-20 11:29
如果 在cmd中输入  的是debug 4.exe的话 这样就是向debug程序传入4.exe这个程序,debug会对4.exe这个程序 ...

明白了  谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 07:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表