Проблема с DbgHelp в 64-битной версииC++

Программы на C++. Форум разработчиков
Anonymous
 Проблема с DbgHelp в 64-битной версии

Сообщение Anonymous »

Я использую Dbgelp в приложении на базе MFC. Все работает нормально, 64-битная отладочная версия. В 64-битной версии он работает нормально, если настройки оптимизации в проекте отключены. Но если настройки оптимизации включены, то снова происходит сбой. В приведенном ниже коде я упомянул, где происходит ошибка. Кто-нибудь может мне помочь?

Код: Выделить всё

auto CALLBACK EnumSymbolsCallback( SYMBOL_INFO* pptSymbolInfo, ULONG piSymbolSize, void* ppvUserContext ) -> BOOL
{

const T_EnumSymbols* lpkSymbols{ static_cast( ppvUserContext ) };

std::vector* lpkParameters{ lpkSymbols->m_pkParameters };

const STACKFRAME64* lptStackFrame{ lpkSymbols->m_ptStackFrame };

if( pptSymbolInfo != nullptr &&
lpkParameters != nullptr    )
{
if( pptSymbolInfo->Flags & SYMFLAG_PARAMETER )
{
if( pptSymbolInfo->Tag == ::SymTagData )
{

// ISSUE HERE
void* lpvValueAddress{ ( void* )( lptStackFrame->AddrStack.Offset + pptSymbolInfo->Address ) };

}
}
}
}
Я читал, что в 64-битной версии без оптимизации первые четыре параметра находятся в регистрах RCX, RDX, R8 и R9, а остальные находятся в стеке. Если да, то как получить значения символов из этих регистров?

Подробнее здесь: https://stackoverflow.com/questions/790 ... se-version

Вернуться в «C++»