首页
社区
课程
招聘
[旧帖] [原创]放一段可以随处打印函数调用栈的代码 0.00雪花
发表于: 2010-4-1 16:46 2821

[旧帖] [原创]放一段可以随处打印函数调用栈的代码 0.00雪花

2010-4-1 16:46
2821

原理不多说了,我们知道,GetThreadContext只能取得被挂起线程的上下文,所以我这里使用内嵌汇编得到当前地址eip和当前函数栈指针ebp

由于没有使用Debug Help API,当然也不想自己分析pdb文件,打印信息可以和map文件和cond文件对照使用,还是比较方便的

其实可以从teb中得到堆栈位置信息来确定最外层调用栈,这里偷懒了,但是不影响这段代码的实用性,呵呵。

使用这段代码跟踪的程序,最好将编译选项中的优化去掉,原因大家都知道的

void PrintStackTrace()
{

        DWORD dwAddr         = 0;
        DWORD dwChildEbp = 0;

        _asm call $+5;
        _asm pop eax;
        _asm mov dwAddr,eax;
        _asm mov dwChildEbp,ebp;

        DWORD dwRetAddr = *(DWORD*)(dwChildEbp+4);

        CString strMsg =        "Addr\t\tChildEbp\t\tRetAddr\r\n"
                                                "===============================\r\n";
        try
        {
                while (TRUE)//dwRetAddr != 0)
                {
                        dwAddr = dwRetAddr;
                        dwChildEbp = *(DWORD*)dwChildEbp;
                        dwRetAddr = *(DWORD*)(dwChildEbp+4);

                        CString strTemp;
                        strTemp.Format("0x%08X\t0x%08X\t0x%08X\r\n",dwAddr,dwChildEbp,dwRetAddr);
                        strMsg += strTemp;
                }
        }
        catch (...)
        {
               
                printf("%s",(LPCTSTR)strMsg);
        }
}


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这样打还不如自己用OD调
2010-4-1 23:33
0
雪    币: 184
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
客户不懂调试,而且在国外,怎么办?每次出问题就飞过去么?
2010-4-2 10:17
0
雪    币: 1312
活跃值: (5164)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
看了你很多编贴子,,不知什么原因,发现很少人回复你的贴子。

我不回复你的贴子,因为我看不明(太深了),多发一些让我们看得明白的吧,这样,像我一样水平的人才会....
2010-4-25 02:57
0
雪    币: 184
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
我不否认有朋友可能看不懂我的帖子,因为我比较懒,好多背景知识懒得说,加上每个朋友的知识结构不一样,术业有专攻嘛。

但是这里高手如云,我想大家不愿意回我所写的帖子的真正原因是我的写的东西没有特别之处,或者说是大家都会了,或者说我是在班门弄斧,大家都不屑跟贴,呵呵。

这是我用于死锁检测的一段代码,还是很有效的,当时写出来只是希望斑竹早点赏我一个邀请注册码。
2010-4-25 07:38
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
进来学习来了,已经保存下来了,或许有天能用得上,谢谢喽~
2010-4-25 07:55
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
原来就是通过ebp的栈回溯呀
2010-4-28 14:27
0
游客
登录 | 注册 方可回帖
返回
//