根据线程的eip信息来获取当前的函数地址
CONTEXT context; HANDLE hThread = GetCurrentThread(); HANDLE hProc = GetCurrentProcess(); BOOL ret = false; context.ContextFlags = CONTEXT_FULL; ret = GetThreadContext(hThread,&context); STACKFRAME64 sf={0}; sf.AddrPC.Mode= AddrModeFlat; sf.AddrPC.Offset = context.Eip; sf.AddrStack.Mode = AddrModeFlat; sf.AddrStack.Offset = context.Esp; sf.AddrFrame.Mode = AddrModeFlat; sf.AddrFrame.Offset = context.Ebp; DWORD64 placement; IMAGEHLP_SYMBOL64 *symbol_info = (IMAGEHLP_SYMBOL64 *)malloc(sizeof(IMAGEHLP_SYMBOL64) + 1024); memset(symbol_info,0,sizeof(IMAGEHLP_SYMBOL64) + 1024); symbol_info->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64); symbol_info->MaxNameLength = 1024; ret = StackWalk64(IMAGE_FILE_MACHINE_I386,hProc,hThread,&sf,&context,NULL,SymFunctionTableAccess64,SymGetModuleBase64,NULL); cout<<GetLastError()<<endl; ret = SymGetSymFromAddr64(hProc,sf.AddrPC.Offset,&placement,symbol_info); cout<<GetLastError()<<endl;