首页
社区
课程
招聘
[求助]为什么会无限循环?
发表于: 2009-6-5 16:15 3468

[求助]为什么会无限循环?

2009-6-5 16:15
3468
我用的odb, 无论是自动还是手动单步都会在一个地方无限循环,
可是点F9"运行"可以正常运行,这是为什么?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
2
不明白LZ的问题.
2009-6-5 16:20
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
比如有个函数x, 现在程序call x, 然后我F7步入进去就有一段代码无限循环,
但是我如果不进去这个函数直接F8步过,这个函数可以正常返回.....
2009-6-5 16:23
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
4
如果x的代码不多, 你可以贴上来看看~
2009-6-5 16:44
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
可能循环了1000次,你一步步跟当然觉得是无穷循环,F8一下当然又正常返回~~
2009-6-5 20:06
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
绝对不是有穷循环, 我用自动跟踪了5分钟还循环, 而且一直在重复固定的几个数字, 现在贴不了代码...
2009-6-5 20:32
0
雪    币: 22
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
贴下代码看看比较好。
2009-6-5 20:33
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
8
自动跟踪说明不了问题。

CPU执行一条指令花费的时间在ns级别,而跟踪一条指令至少要慢上几个数量级。

OLLY1中的跟踪功能,实现为自动单步运行程序。因此,每执行一条指令,CPU至少要进入单步异常的处理,进入内核,最后由内核调度调试器进程运行,最后调试器还要执行很多分析记录的工作。假设跟踪一条指令所花的时间在us级别,也相差了3个数量级。按这样的时间算,假设1秒能执行完的程序,跟踪的话需要数十分钟!在很多数值计算的场合,一个算法运行数百毫秒甚至数秒是很常见的事。

似乎OLLY2中的跟踪功能使用指令级模拟技术(可能我记错了,不过至少与OLLY1不一样的),可以让跟踪的速度快许多。然而OLLY2目前还没有正式发布。

分析循环,一种可能的方法是用ollyflow插件,或IDA,生成这段代码的流程图,然后从流程图中就可以找到循环的出口附近的代码。

注:程序利用SEH及单步异常,可以实现这样的功能:程序正常运行时不循环,而当调试器单步运行时执行无限循环。选择OD不忽略单步异常,F9运行程序,看看会不会有单步异常发生。如果有的话,就是SEH
2009-6-6 18:31
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢LS老大, 长知识了, 应该是你说的"数量级"问题, 看来还要更加努力谢谢大家!
2009-6-7 09:51
0
游客
登录 | 注册 方可回帖
返回
//