首页
社区
课程
招聘
[求助]int3中断后在OD中不能继续运行
发表于: 2011-10-20 17:42 6879

[求助]int3中断后在OD中不能继续运行

2011-10-20 17:42
6879
问题描述:
运行0Day2里面的程序,在被调用函数插入中断指令
用VS2008编译运行后,OD调试异常
在OD中想用F8 步过断点,但是按了没任何反应。(代码在后面)
(我想观察修改.data节内容的过程)

是不是调试方法错误?忘赐教

附代码和环境:
void test(char * str, int i, char * src)
{
	char dest[200];
	char * buf;
	if(i<0x9995) 
	{
		__asm int 3
		buf=str+i;
		*buf=*src;
		*(buf+1)=*(src+1);
		*(buf+2)=*(src+2);
		*(buf+3)=*(src+3);
	    strcpy(dest,src);
	}
}
void main()
{
	char * str=(char *)malloc(0x10000);
	test(str,0xFFFF2FB8,shellcode);	
}

环境:
xp sp3
VS 2008 (debug和releas都不行,开启GS)
OllyICE (从看雪tools下载的)

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 645
活跃值: (247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
_try
   {
   __asm int 3

    }
_catch()
{

试一下
2011-10-20 17:52
0
雪    币: 805
活跃值: (2698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
int 3 和 int3是完全不同的2个指令,前者指令编码是"cd 03",后者是"cc",后者被调试器用于设置软件断点。你首先应该搞清楚你函数入口的那条指令是几个字节的编码。
    当程序执行到int3指令的时候,会引发异常,通常在执行这条指令之前应该先设定异常处理程序,就像楼上所说的try...catch代码块。如果你自己不处理异常,操作系统就会无情地终止程序的执行,并且会让你看到那个带着醒目红叉的异常错误信息框。
2011-10-20 18:33
0
雪    币: 8
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
嗯,你说的意思我懂了。这个解释了为什么我按F7后会跳入SEH的原因

我还想知道一般是怎么调试的。如果在有源码的情况下,我想:
1.查看malloc分配空间的起始地址  (是不是在malloc函数后插入 int 3?我试过,不过不会看)
2.查看strcpy之后,栈帧的情况,就在strcpy之后插入int 3 么?

期待你的回答
2011-10-20 18:48
0
雪    币: 8
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
“老伙计”分析了你的意思,我理解了。
但如果仅仅是想查看一些信息,都得这样添加try……catch,是不是有点麻烦呢?
你们都是怎么做的?
2011-10-20 18:53
0
雪    币: 8
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
刚才摸索出了一个办法:
1.在代码中插入 int 3, 然后 ctrl + F5 运行程序,VS报异常后进入OD
2.设置 OD-选项-调试选项-异常 选项卡中去掉“INT3 中断”前面的勾
3.F7 单步执行

至此,可以定位调试点和单步观察状态了。

同样期待各位的调试方法,thx~
2011-10-20 19:29
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
真难啊!
2011-10-20 19:35
0
游客
登录 | 注册 方可回帖
返回