社区
进程/线程/DLL
帖子详情
VC6调用堆栈溢出如何调试?高手请进!
skyclear81
2007-09-22 11:14:09
VC6调用堆栈溢出如何调试?
当程序异常时调试进入查看堆栈仅看到A调用B,B又调用A,如此无穷递归...,最终调用ntdll.dll里的函数,且A,B函数地址都是非法的,不在当前进程加载模块内。
望高手相助!
...全文
1605
32
打赏
收藏
VC6调用堆栈溢出如何调试?高手请进!
VC6调用堆栈溢出如何调试? 当程序异常时调试进入查看堆栈仅看到A调用B,B又调用A,如此无穷递归...,最终调用ntdll.dll里的函数,且A,B函数地址都是非法的,不在当前进程加载模块内。 望高手相助!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
32 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zlxiao001
2012-01-06
打赏
举报
回复
mark
skyclear81
2007-10-27
打赏
举报
回复
不小心点了无满意结贴,不知道怎么纠正?? 管理员请进!~~
skyclear81
2007-10-27
打赏
举报
回复
楼上各位大师都提出了自己独到的见解,一并感谢,最近比较忙,忘记结贴了,请各位谅解,并在以后一如既往地支持我哦.... 散分!~
yuxinxxgc
2007-10-02
打赏
举报
回复
编译了么,用OD反汇编看看
linuxpgy
2007-09-26
打赏
举报
回复
用好VC6调试工具,做编程高手!
http://blog.sina.com.cn/s/blog_4e5dcb9701000cfz.html
skyclear81
2007-09-25
打赏
举报
回复
VS2005里有防止缓冲区溢出,通过编译时候插入_checkesp,但是用VC6编译的工程转到VS2005下编译有n多error,郁闷中...
loops
2007-09-25
打赏
举报
回复
release下的情况如何?
我记得vc6的debug下每次调用函数,开的栈空间都相当得大,距离父函数的栈顶大约填充了0x40h的0xccccccc,所以你的数组或者指针越界应当不是越出1个,2个的问题,可能是比较夸张的一大片。
Torch009
2007-09-24
打赏
举报
回复
跟踪再跟踪
masterz
2007-09-24
打赏
举报
回复
比如Intel VTune,他能告诉你每个函数的调用次数--包括库函数和你自己的函数,你把重点放在自己的函数上面,可以找到的。
另外,如果是你的代码破坏了堆栈,还是用调试工具好一些--Boundschecker或者Purify.它能找到你数组越界之类的错误。
ouyh12345
2007-09-24
打赏
举报
回复
排错是很费劲的,通常没有什么快捷的方法。
scq2099yt
2007-09-24
打赏
举报
回复
我也建议用屏蔽代码的手段找到出问题的代码。先大块屏蔽,然后逐渐缩小范围。
skyclear81
2007-09-23
打赏
举报
回复
大家都午睡了吗? 自己再顶一下!
skyclear81
2007-09-23
打赏
举报
回复
这样也许可以,但不是最有效的方法。也不是发贴的初衷...
dyw
2007-09-23
打赏
举报
回复
哈,lz不要急。可以通过屏蔽代码的手段找到出问题的代码。先大块屏蔽,然后逐渐缩小范围。
skyclear81
2007-09-23
打赏
举报
回复
To楼上: 我知道自己的程序有问题,难道还是微软的程序有问题吗?如果一眼能看出的问题,我也不用在发帖子了。
To masterz:非常感谢告诉我用profile工具,但是A,B函数地址不在当前进程内也有用吗?通过统计能知道是从我代码里哪个函数掉进去的?望详细告知,万分感谢!
dyw
2007-09-23
打赏
举报
回复
这说明自己的程序有问题,应首先解决自身问题
shanhqk
2007-09-23
打赏
举报
回复
其实TRACE中的内容也可以输出出来,不管是在代环境的条件下,还是在执行的环境下,但前提是:必须要是在debug下。
shanhqk
2007-09-23
打赏
举报
回复
1.输出错误日志。
2。 环缓冲区:就是定义一个很大的链表,然后往链表中增加程序运行记录(主要一些函数),然后当到一定数量时,删除前100条,然后继续使用,这样可以知道程序是哪里出现了错误。这种方式可以结合vc中debug环境下的一些方法,然后输出出来,当出现错误时,写入文件,然后分析。可以判断出在哪个函数中出现了错误。
dyw
2007-09-23
打赏
举报
回复
记得以前去面试,问的就是堆栈溢出问题,如果是你,你就这么回答?
-----------
难道这不是办法吗?难道回答说你会用什么什么工具,又怎么样发现了问题代码,诸如此类???!!!
难道这个问题不是考察你解决问题的能力吗?写TRACE不是调试程序的方法吗?否则要TRACE何用?
难道不是先找到出错行,然后再分析其堆栈使用问题吗?难道是通过看汇编代码,然后逆向导出错误所在???即使有这样的办法,偶不认为这个办法有什么优点!本来是写代码时就应该注意的问题。
呵呵,说句实话,偶很少碰到堆栈溢出问题,一般在写程序时就已经避免了。一旦发生问题,也有对付办法。写TRACE代码是一个程序员的基本习惯,对于日后代码维护非常有益。偶认为,规范的公司都应要求程序员写TRACE。
堆栈溢出一般有两个可能:
1、函数递归调用;
2、在堆栈上创建大数组。
这两个问题,TRACE一下很快就能找到出错行,也很容易解决。有问问题的时间早解决了。
劝lz一句,培养自己解决问题的能力,而不是执著于自己期望的答案。
另外,看看这个是否有帮助:
http://support.microsoft.com/kb/315937
jsphuang
2007-09-23
打赏
举报
回复
IBM RATIONAL Purify专门用于检查堆栈OVERFLOW或者MEMORY LEAK的,
还有VALGRIND(LINUX 版?)吧,能够检查程序是哪儿出问题。
加载更多回复(12)
Win32环境下函数
调用
的堆栈之研究
Win32环境下函数
调用
的堆栈之研究 由于阅读《Q版缓冲区溢出教程》的需要理解和掌握栈的相关知识,故而使用VC 6.0工具来研究win32环境下函数
调用
时具体的栈操作。 阅读本文建议先看结论,大概了解相关概念,再看第4节,更易于理解。
缓冲区溢出攻击的原理及对策
从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数
调用
。当函数
调用
发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来了极大的隐患。
堆栈溢出
Q:什么是
堆栈溢出
?
堆栈溢出
是什么意思? 堆栈是一种计算机内存的管理方式,在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(Last-In/First-Out) 。 从物理上讲,堆栈是就是一段连续分配的内存空间。
Windows
堆栈溢出
全面解析
关于
堆栈溢出
,前面写的多期文章都是关于具体漏洞分析和ShellCode的编写技术,而有朋友希望我能写点入门级的文章。今天,我就和大家一起,来全面解析Windows下
堆栈溢出
的具体细节及利用过程。过程虽然简单,但自己又走了一遍,才发现里面的确有一些值得注意的地方。废话少说,我们直接切入正题!基础知识首先简单讲两个基础知识,一是函数
调用
时堆栈的变化;二是函数
调用
约定对函数
调用
及返回时堆栈变化的影响。
c语言之
堆栈溢出
问题
1.函数的
调用
,系统所作的工作 2.函数
调用
时与内存管理 3.递归函数 4.数组作为形参
调用
函数时,为什么需要连同数组长度一起传进来
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章