首页
社区
课程
招聘
int3 是做什么
发表于: 2009-12-19 18:07 8280

int3 是做什么

2009-12-19 18:07
8280
一个未加壳的程序,我用OllyICE调试,怎么又那么多的int3 啊,做什么的???

00778A9B   .  E8 8139F9FF   call    0070C421
00778AA0   .  59            pop     ecx
00778AA1   .  C3            retn
00778AA2      CC            int3
00778AA3      CC            int3
00778AA4      CC            int3
00778AA5      CC            int3
00778AA6      CC            int3
00778AA7      CC            int3
00778AA8      CC            int3
00778AA9      CC            int3

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 100
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
无用 可以忽略.
2009-12-19 18:18
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
晕。不是就这么简单吧   

那int 3 的含义是什么啊??

顺便问一下怎么采纳答案,我第一次提问啊,还有可以选多个答案吗??
2009-12-19 18:31
0
雪    币: 3794
活跃值: (2332)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也想知道…
看过一篇文上写OD的断点好像就利用了这个值。
为何叫“int3”呢
2009-12-19 18:33
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
int 3不知道是什么中断,在网上也搜不到
2009-12-19 18:57
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
6
这里的int 3指令只是用于填充无用的空间以做到代码对齐而已。
2009-12-19 18:59
0
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
7
正常情况下是不会执行到这些地方的,如果执行到这里,INT 3就会中断方便查错,类似debugbreak
2009-12-19 19:37
0
雪    币: 322
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
只知道是中断 普通情况一般不会执行到int3
2009-12-19 19:55
0
雪    币: 49
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
int 3是引起中断的指令
在内存中的显示就刚好是CC  你看到的那么多int 3就是某一连续填充CC的空间  理论上这些地方是不会访问到的  一旦访问到了就是程序逻辑错误 所以填充CC(int 3) 被访问则产生告警
2009-12-19 20:07
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
那就奇怪了啊,程序不就是应该是顺序执行的吗,int3不执行就执行下面的mov cmp指令???
难道你的意思是见到int3都跳过不执行而执行下面其他的语句

00401026   .  E8 849B3000   call    0070ABAF
0040102B   .  83C4 04       add     esp, 4
0040102E   >  8BC6          mov     eax, esi
00401030   .  5E            pop     esi
00401031   .  C2 0400       retn    4
00401034      CC            int3
00401035      CC            int3
00401036      CC            int3
00401037      CC            int3
00401038      CC            int3
00401039      CC            int3
0040103A      CC            int3
0040103B      CC            int3
0040103C      CC            int3
0040103D      CC            int3
0040103E      CC            int3
0040103F      CC            int3
00401040   $  C3            retn
00401041      CC            int3
00401042      CC            int3
00401043      CC            int3
00401044      CC            int3
00401045      CC            int3
00401046      CC            int3
00401047      CC            int3
00401048      CC            int3
00401049      CC            int3
0040104A      CC            int3
0040104B      CC            int3
0040104C      CC            int3
0040104D      CC            int3
0040104E      CC            int3
0040104F      CC            int3
00401050  /$  8B4424 0C     mov     eax, dword ptr [esp+C]
00401054  |.  83F8 04       cmp     eax, 4
00401057  |.  8B4C24 08     mov     ecx, dword ptr [esp+8]
0040105B  |.  8B5424 04     mov     edx, dword ptr [esp+4]
2009-12-19 21:19
0
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
00401031   .  C2 0400       retn    4

这句已经返回了,何来跳过
2009-12-19 21:25
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
据说是0xcc
2009-12-20 01:34
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
int 3断点,程序运行到这里就会触发调试器
2009-12-20 01:49
0
雪    币: 6
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
虽然是顺序执行的,但是也会有跳转与返回什么的.,

所以 int 3 是执行不到的,当执行到的时候,就是你平时看到程序崩溃时的样子了
2009-12-20 03:00
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我看别人是这样告诉我的

int3 是中断我们都知道,程序是顺序执行的我们也知道

如果说程序执行的时候出错了那执行到带有int3的地方了,那么方便调试器附加查找错误
2009-12-20 08:47
0
雪    币: 273
活跃值: (64)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
16
就是汇编中的一个中断指令,原来的DOS就是一种单任务系统,如果执行一个任务而要想执行另外一个任务就需要中断当前执行的任务所以就有了中断指令!
2009-12-20 12:37
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
还有int 3为什么有那么多,既然是填充用的那一个不行吗,为什么有那么多,让人费解的是中间还有一个retn,返回做什么啊
2009-12-20 13:35
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
18
填充是为了代码对齐:
00401040 $ C3 retn
00401050 /$ 8B4424 0C mov eax, dword ptr [esp+C]

你可以看到相邻的两个函数,中间却要填充那么多,那是因为函数开头是0x10字节对齐的。
至于那个retn,答案是:它也是一个函数,是一个什么都不做直接返回的函数(有些类函数,基类的相应函数就是这样什么都不做的,派生的子类再重载这个函数加入程序员自己定义的代码)。
2009-12-20 16:23
0
雪    币: 22
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
int3
int 3
别写错了,他们不同呀。

我问下,这是编译器自动编译的?那如果开发编译器的人,把它设计成nop,也可以?
2009-12-21 17:25
0
雪    币: 808
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
20
看本关于调试的书就会明白很多的啦
2009-12-21 17:39
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
应该是没什么用处吧 填充一下 而已
2009-12-22 08:33
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
int 3你可以理解为停,跟红灯停一样的道理
2009-12-24 16:42
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
  支持!
2009-12-30 21:10
0
游客
登录 | 注册 方可回帖
返回
//