首页
社区
课程
招聘
[求助]od中,如何确定跳转来自何处?
发表于: 2008-2-21 15:20 18600

[求助]od中,如何确定跳转来自何处?

2008-2-21 15:20
18600

用od调试程序时经常会遇到这样的情况,程序中断在一个函数的入口点
od会把所有调用这个函数的地址列出来,但有时候调用这个函数的地方太多了
我想问的是:如何精确的确定本次执行的到底是哪个地址调用了这个函数?我现在是run跟踪确定,或者一个一个的试,但感觉都不是很方便,高手有更好的方法吗?指点一下啊,非常感谢


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

收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
在函数入口点断下之后,观察堆栈。。。。
到栈顶所在的地址看看。。
2008-2-21 15:24
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
3
有个ring3的插件Conditional Branch Logger,我更喜欢ring0的DebugCtlMSR,openrce上有讨论.

Hook int1:

__declspec(naked) void NewInt01()
{
	//	- Interrupt 1 Handler -
	//
	//  offset   | contains
	//  ---------+-----------------------------
	//	esp		 : EIP Context
	//	esp + 4  : CS  Context
	//	esp + 8  : EFLAGS Context

	__asm
	{
			pushad

			mov		eax, dr6
			bt		eax, 0Eh	//单步?
			jnc		__oldint01

			mov		ecx, 1D9h
			rdmsr
			or		eax, 3
			wrmsr
		
			
		__oldint01:	
			popad
			jmp	  OldHandler01
	}
}


在OD中trace时记录的只有控制转移指令
2008-2-21 19:28
0
雪    币: 1657
活跃值: (291)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
在函数入口断下..查看ESP为返回地址,这个学汇编.......应该 知道的哦~~~
2008-2-22 01:08
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
5
请注意跳转和调用的区别
2008-2-22 01:56
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
6
楼主问的是:


如何精确的确定本次执行的到底是哪个地址调用了这个函数?
2008-2-22 12:49
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
7
完全不懂 呵呵关注中
2008-2-22 16:34
0
雪    币: 127
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
2楼已经说清楚了。。
2008-3-12 19:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
正常来说堆栈顶写的“返回到。。。。”就是调用这CALL的地址了
2008-3-12 19:46
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不懂的说哦.
2008-3-13 12:42
0
雪    币: 280
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
alt+k!!!!!!!!!!!
2008-3-13 14:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
返回后不就是知道是哪个地址调用它的吗?
2008-3-17 08:41
0
雪    币: 1436
活跃值: (3861)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
alt+k
查看调用堆栈就能找到答案
2008-3-17 12:54
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
14
顶 膜拜.
2008-3-17 23:59
0
雪    币: 608
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
只能说查看堆栈
2008-3-19 14:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
到RET行不行了
2008-3-19 20:24
0
雪    币: 223
活跃值: (85)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
17
跳转多了是不是很容易迷路,好像现在要想知道从哪儿来,就只有全代码中serach jmp xxx,或者你直接serach ?? xxx,没有哪个去写一个记录从哪儿来的,只有说明到哪儿去的。
2008-3-19 20:41
0
雪    币: 223
活跃值: (85)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
18
RET好像不行吧,RET就是结束某段代码跳回上一层,也不能行。
2008-3-19 20:42
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
好像我也遇到了同样的问题
不过我都不知道怎么办
2008-3-21 15:58
0
雪    币: 271
活跃值: (21)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
调用看调用堆栈就行了  跳转要怎么看啊?
2008-3-23 05:06
0
游客
登录 | 注册 方可回帖
返回
//