StackWalk64 on Windows - Get symbol name
You have set symbol.MaxNameLength
to 255, but you allocated "symbol" on the stack with IMAGEHLP_SYMBOL64 symbol;
. That type is defined as:
typedef struct _IMAGEHLP_SYMBOL64 { DWORD SizeOfStruct; DWORD64 Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; TCHAR Name[1];} IMAGEHLP_SYMBOL64;
Notice that the Name field only has one character by default. If you want to store bigger names, you need to do something like:
const int MaxNameLen = 255; IMAGEHLP_SYMBOL64* pSymbol = malloc(sizeof(IMAGEHLP_SYMBOL64)+MaxNameLen*sizeof(TCHAR)); pSymbol->MaxNameLength = MaxNameLen;
Otherwise, SymGetSymFromAddr64()
is likely to overwrite memory. Here is what the help page for the structure says (emphasis added):
MaxNameLength: The maximum length of the string that the Name member can contain, in characters, not including the null-terminating character. Because symbol names can vary in length, this data structure is allocated by the caller. This member is used so the library knows how much memory is available for use by the symbol name.