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

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

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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞7
打赏
分享
最新回复 (19)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
petnt 12 2008-2-21 15:24
2
0
在函数入口点断下之后,观察堆栈。。。。
到栈顶所在的地址看看。。
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
softworm 30 2008-2-21 19:28
3
0
有个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时记录的只有控制转移指令
雪    币: 1667
活跃值: (286)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
menting 14 2008-2-22 01:08
4
0
在函数入口断下..查看ESP为返回地址,这个学汇编.......应该 知道的哦~~~
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2008-2-22 01:56
5
0
请注意跳转和调用的区别
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2008-2-22 12:49
6
0
楼主问的是:


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