首页
社区
课程
招聘
od断点问题
发表于: 2012-2-25 11:43 7358

od断点问题

2012-2-25 11:43
7358
最近用od下函数断点比如bp LoadIconA等,发现od断在LoadIconA函数的第一个字节上,但我需要od能够断在用户层的call LoadIconA上,而不是进入系统里面,以前od是可以的,但最近不知怎么了,断在第一个字节那里,我也在论坛搜索了,没发现此类问题,od也查了很久,请问各位前辈应该要如何设置,先在此谢谢了。。。 发现在其他的地方发表都要悬赏金,找来找去就找到这里了。。。

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 60
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
自己先顶一个,我只有7kx啊,论坛要求最低是10kx,
2012-2-25 11:45
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
OD进哪个系统内核?指ntdll.dll?
2012-2-25 11:47
0
雪    币: 60
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
首先谢谢笨奔的回答,比如我用bp FindWindowA下断,希望od能够断在用户层那里
00402687 >PUSH 0                                   ; /Title = NULL
00402689  PUSH Clock.00403160                      ; |Class = "Clock"
0040268E  CALL <JMP.&user32.FindWindowA>           ; \FindWindowA  //想要断在这里
而od却断在
77D282E1 >MOV EDI,EDI                              ;  ntdll.7C930228  //od断在这里了
77D282E3  PUSH EBP
77D282E4  MOV EBP,ESP
77D282E6  XOR EAX,EAX
77D282E8  PUSH EAX
77D282E9  PUSH DWORD PTR SS:[EBP+C]
77D282EC  PUSH DWORD PTR SS:[EBP+8]
77D282EF  PUSH EAX
77D282F0  PUSH EAX
77D282F1  CALL user32.77D28242
77D282F6  POP EBP
77D282F7  RETN 8

我不想进入到系统的dll里面去啊,请问应该如何设置od呢???
2012-2-25 11:56
0
雪    币: 807
活跃值: (2278)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
答案是用OD的命令搜索功能,用以下代码为例:

004EC8AE  |.  FF15 A8757900              call    dword ptr [<&KERNEL32.GetVersion>]     ;  kernel32.GetVersion

具体做法是:

    在OD的代码窗口内,点击鼠标右键,在弹出式菜单上选"搜索>所有命令",在新弹出的"查找所有命令"界面上,输入:call [007975A8],然后点击"查找",可以找出程序中所有调用"KERNEL32.GetVersion"函数调用的地方,这时,可以选择"在每个命令上设置断点",就可以实现楼主所要求的效果了。

    如果不知道"[007975A8]"是咋来的,可以分析一下该指令的十六进制形式: "FF15 A8757900",没错,只要把操作码"FF15"去掉,剩下的4个字节"A8757900"就是操作数,对于该指令来说,就是目标地址,把它们的前后顺序完全颠倒就得到了。此内存地址保存了函数"KERNEL32.GetVersion"的入口地址。
2012-2-25 12:47
0
雪    币: 60
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
感谢老伙计的回答,,,你那样做确实可以断下,但是却多了一步,你必须先找到一个你所要断下的函数的调用地址,而且用“查找->所有模块间的调用”功能也能够找到很多的函数调用。。。谢谢你的回答,,,但是我是想问一下用bp这种方式下断,如何断在用户层的call那里,,,以前od是可以的,但最近用着用着却发现它断在系统函数里面了,又要跑出来特别烦,,,是不是要设置什么东西,,,
2012-2-25 15:16
0
雪    币: 807
活跃值: (2278)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
    没听懂,我理解,你的意思是说,在命令行插件中下bp断点,比如:

bp GetVersion

    则,如果

004EC8AE |. FF15 A8757900 call dword ptr [<&KERNEL32.GetVersion>] ; kernel32.GetVersion

    这条指令断下的时候是停在代码地址: 004EC8AE 处,而不是函数: KERNEL32.GetVersion 的入口第1条指令地址,是这样吗?如果说是,估计你会在本论坛招来一片喝彩的!
2012-2-25 22:01
0
雪    币: 60
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=老伙计;1047795]没听懂,我理解,你的意思是说,在命令行插件中下bp断点,比如:

bp GetVersion

    则,如果

004EC8AE |. FF15 A8757900 call dword ptr [<&KERNEL32.GetVersion>] ; kernel32...[/QUOTE]

嗯,我的确是这样想的,难道是我记错了,用bp下断不会断在call那里老伙计你说的那种方法确实可以,,,谢谢了。。。
2012-2-25 23:34
0
游客
登录 | 注册 方可回帖
返回
//