首页
社区
课程
招聘
关于调试的几个基础问题,是ollydbg的,有点不明白,在此虚心请教
发表于: 2005-7-12 14:43 7766

关于调试的几个基础问题,是ollydbg的,有点不明白,在此虚心请教

2005-7-12 14:43
7766

1.je short ktv.004935AF
 我想问一下,004935AF是指内存地址还是堆栈区地址呢?为什么要用short呢?

2.call ktv.00493343
  上面知道是调用什么吗?好像是调用一个函数什么的,但从哪里得知这个函数起什么作用?

3.ollydbg如何设消息断点?

4.在ollydbg1.10调试中.
  .....
  push eax
  call <jmp.&user32.MessageBoxA>
  mov dword Ptr ss:[ebp-8], eax
  xor eax,eax
  ....
  上面这断是调用MessageBox显示一个对话框的,
我把call <jmp.&user32.MessageBoxA>改成以下几句:
nop 或 test eax,eax 或 mov eax,1 或 mov eax,0
,程序都会运行异常并退出,为什么?

我的目的是不要显示这个MessageBox的对话框,如何做到?


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

收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
1.je short ktv.004935AF
 我想问一下,004935AF是指内存地址还是堆栈区地址呢?为什么要用short呢?
答:short是短距离跳转,即他的跳转范围只有125~-125之间(好象是这个值,记不太清楚了,不过意思差不多)。

2.call ktv.00493343
  上面知道是调用什么吗?好像是调用一个函数什么的,但从哪里得知这个函数起什么作用?
答:调用一个过程或函数,要知道这个过程或函数起什么作用只有靠你去调试和跟踪了。

3.ollydbg如何设消息断点?
答:论坛上有过论讨,你搜一搜论坛吧。

4.在ollydbg1.10调试中.
  .....
  push eax
  call <jmp.&user32.MessageBoxA>
  mov dword Ptr ss:[ebp-8], eax
  xor eax,eax
  ....
  上面这断是调用MessageBox显示一个对话框的,
我把call <jmp.&user32.MessageBoxA>改成以下几句:
nop 或 test eax,eax 或 mov eax,1 或 mov eax,0
,程序都会运行异常并退出,为什么?
答:你要将call <jmp.&user32.MessageBoxA>NOP或修改掉,你还必须将他前面4个push xxNOP掉或加一句add esp,10之类的语句才行。

我的目的是不要显示这个MessageBox的对话框,如何做到?
2005-7-12 15:04
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上的谢谢你,不过你只有第4个问题答得好些,
上面3个我还没太明白,
2005-7-12 15:06
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
1、short即是短距离的意思,004935AF是je将跳转的地址(不是堆栈地址,是代码地址,即程序执行的地址),这个地址不会超过他本身的125~-125的字节之间的距离。也就是说je只能跳到125~-125个字节的距离。要远距离跳转就只有使用jmp跳转,其他的条件跳转都是short短距离跳转。

2、call ktv.00493343可以是过程调用,也可以是函数调用,至于他是过程还是函数和这个过程和函数起什么作用只看这样是无法知道的,只有靠你自己去调试和跟踪才能知道,一般有返回值的是函数,没有返回值的是过程。

3、OllyDbg如何下消息断点
你可以点击OllyDbg的查看->窗口,在窗口对话框中选择WndProc,点击右键->消息断点设置在WinProc,在弹出的窗口中选择一个消息就行了。
2005-7-12 15:26
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
精典,回答的太好了,多谢,回家试试看
2005-7-12 15:29
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
第4个问题我有点问题,确实如你所说:
call <jmp.&user32.MessageBoxA>这句前有4个push,
为何也要nop掉呢?
在call <jmp.&user32.MessageBoxA>这句的后面不远,应该会有相对话的pop才对,push和pop是成对的,如果把push改成nop了,那pop不就乱了吗?
2005-7-12 15:30
0
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不是在后面pop的,是在MessageBoxA中pop掉的。(严格说也不是pop掉,是ret掉的)。
2005-7-12 15:37
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
8
API函数除了少数几个,大部分都是在内部平衡堆栈的,在调用完函数后,函数在返回程序之前都会进行add esp,xx来平衡堆栈,不用在外面用pop来平衡,外面也没有pop对应前面的push的,他前面的4个push是MessageBox的参数,你将他的调用都NOP掉了,当然也要将他的的关系的push也NOP掉才行,或者自己加一个add esp,10的语句来平衡堆栈。
2005-7-12 15:38
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
9
上面说的没错,正确来说是ret 10来平衡堆栈的
2005-7-12 15:39
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
小虾,你真是厉害,请问你这些知识从哪学来的?我怎么就不知道呢?
2005-7-12 16:36
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
11
上面的知识一般用过OllyDbg和学习过汇编编程的一般都知道。
2005-7-12 17:21
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
小虾,能留下QQ吗?
很想认识你,
我的QQ:35938754
2005-7-12 17:32
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
13
在论坛上交流更好,我更多的时间都是在论坛上,知道的一般我都会回答。
2005-7-12 17:41
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
明白,问题解决,
谢谢楼上几位,特别是小虾,
真心感谢
2005-7-13 11:55
0
游客
登录 | 注册 方可回帖
返回
//