Цитата из dbgeng.h:
// A symbol name may not be unique, particularly
// when overloaded functions exist which all
// have the same name. If GetOffsetByName
// finds multiple matches for the name it
// can return any one of them. In that
// case it will return S_FALSE to indicate
// that ambiguity was arbitrarily resolved.
// A caller can then use SearchSymbols to
// find all of the matches if it wishes to
// perform different disambiguation.
STDMETHOD(GetOffsetByName)(
THIS_
__in PCSTR Symbol,
__out PULONG64 Offset
) PURE;
Итак, я бы получил имя с помощью IDebugSymbols :: GetNameByOffset () (оно возвращается как «module! Name», я считаю), убедитесь, что это перегрузка (если вы не уверены), используя IDebugSymbols :: GetOffsetByName () (который должен возвращать S_FALSE для нескольких перегрузок) и поискать все возможности с этим именем с помощью StartSymbolMatch () / EndSymbolMatch (). Не один лайнер, хотя (и не очень полезно в этом отношении ...)
Другим вариантом будет пойти с
HRESULT
IDebugSymbols3::GetFunctionEntryByOffset(
IN ULONG64 Offset,
IN ULONG Flags,
OUT OPTIONAL PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BufferNeeded
);
// It can be used to retrieve FPO data on a particular function:
FPO_DATA fpo;
HRESULT hres=m_Symbols3->GetFunctionEntryByOffset(
addr, // Offset
0, // Flags
&fpo, // Buffer
sizeof(fpo), // BufferSize
0 // BufferNeeded
));
, а затем используйте fpo.cdwParams для различения базовых параметров (cdwParams = размер параметров)