能力值:
( LV4,RANK:50 )
|
-
-
2 楼
自己先顶一个,我只有7kx啊,论坛要求最低是10kx,
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
OD进 哪个系统内核?指ntdll.dll?
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
首先谢谢笨奔的回答,比如我用bp FindWindowA下断,希望od能够断在用户层那里
00402687 >PUSH 0 ; /Title = NULL
00402689 PUSH Clock.00403160 ; |Class = "Clock"
0040268E CALL <JMP.&user32.Fi ndWindowA> ; \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呢???
|
能力值:
( 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"的入口地址。
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
感谢老伙计的回答 ,,,你那样做确实可以断下,但是却多了一步,你必须先找到一个你所要断下的函数的调用地址,而且用“查找->所有模块间的调用”功能也能够找到很多的函数调用。。。谢谢你的回答,,,但是我是想问一下用bp这种方式下断,如何断在用户层的call那里,,,以前od是可以的,但最近用着用着却发现它断在系统函数里面了,又要跑出来特别烦,,,是不是要设置什么东西,,,
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
没听懂,我理解,你的意思是说,在命令行插件中下bp断点,比如:
bp GetVersion
则,如果
004EC8AE |. FF15 A8757900 call dword ptr [<&KERNEL32.GetVersion>] ; kernel32.GetVersion
这条指令断下的时候是停在代码地址: 004EC8AE 处,而不是函数: KERNEL32.GetVersion 的入口第1条指令地址,是这样吗?如果说是,估计你会在本论坛招来一片喝彩的!
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
[QUOTE=老伙计;1047795]没听懂,我理解,你的意思是说,在命令行插件中下bp断点,比如:
bp GetVersion
则,如果
004EC8AE |. FF15 A8757900 call dword ptr [<&KERNEL32.GetVersion>] ; kernel32...[/QUOTE]
嗯,我的确是这样想的,难道是我记错了,用bp下断不会断在call那里 老伙计你说的那种方法确实可以,,, 谢谢了。。。
|
|
|