首页
社区
课程
招聘
[求助]求简单点的调用堆栈遍历源码
发表于: 2014-9-24 16:19 2548

[求助]求简单点的调用堆栈遍历源码

2014-9-24 16:19
2548
求调用堆栈遍历源码, 有类似源码的大侠位指点一下
能在当前函数,遍历所有上层调用,最好是能得到模块名+函数名+偏移
像proce explorer或vs的调试中的显示

代码越简单越好(20~30行左右不知道搞得定不)

贡献一下我现在的代码:
目标是追溯到上一个不是自己模块的调用,但原理基本差不多,高手如果觉得有啥不好的地方,求指点

char* WINAPI CUnknown::GetParentCaller(PVOID pEBP, char* pszBuffer)
{
	HMODULE hThis = NULL;
	GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)GetParentCaller, &hThis);
	GetModuleFileNameA(hThis, pszBuffer, MAX_PATH);

	PVOID pCaller = 0, pStack = pEBP;
	HMODULE hModule = hThis;
	while (hModule == hThis)
	{
		pCaller = ((PVOID*)pStack)[1];
		pStack = ((PVOID*)pStack)[0];
		GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)pCaller, &hModule);
		GetModuleFileNameA(hModule, pszBuffer, MAX_PATH);
	}

	GetModuleFileNameA(hModule, pszBuffer, MAX_PATH);
	return pszBuffer;
}

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//