在上一章节介绍了如何利用EBP指针获取上一层的调用地址,从而用来检测非法call,这一章节我们将介绍如何实现一个类似VS调试器中的“调用堆栈窗口”这种效果,能显示出当前模块名、函数名、行号等,如下图所示:
这里我们需要用到微软MSDN官方提供的几个API函数:
一、实现原理
1.SymInitialize
这个函数是初始化进程所对应的符号处理程序。
BOOL IMAGEAPI SymInitialize(
[in] HANDLE hProcess,
[in, optional] PCSTR UserSearchPath,
[in] BOOL fInvadeProcess
);
hProcess:当前进程句柄,可使用GetC