-
-
[求助]求简单点的调用堆栈遍历源码
-
发表于: 2014-9-24 16:19 2548
-
求调用堆栈遍历源码, 有类似源码的大侠位指点一下
能在当前函数,遍历所有上层调用,最好是能得到模块名+函数名+偏移
像proce explorer或vs的调试中的显示
代码越简单越好(20~30行左右不知道搞得定不)
贡献一下我现在的代码:
目标是追溯到上一个不是自己模块的调用,但原理基本差不多,高手如果觉得有啥不好的地方,求指点
能在当前函数,遍历所有上层调用,最好是能得到模块名+函数名+偏移
像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; }
赞赏
他的文章
看原图
赞赏
雪币:
留言: