Вот простой asm-код, который я вставил в проект VC ++.return_addr - это адрес возврата фрейма стека.У меня есть функция StackWalk (не была написана мной codeproject.com/KB/threads/StackWalker.aspx), которая использует StackWalk64 () для извлечения кадров.Подробности этого не актуальны.Используя адрес возврата, я извлекаю один байт из кода функции в проверяемом стеке.
__asm{
push eax
push ecx
mov eax, return_addr
mov cl, BYTE PTR [eax - 5] //Problem Statement
mov ret_5, cl
pop ecx
pop eax
}
Я запускаю свой код вместе с другими приложениями, такими как gtalk, vlc и т. Д. Приложение всегда вылетает, когда я включаю формулировку проблемы.Когда я удаляю эти заявления, все работает нормально.Я запустил отладчик, и он выходит из строя при формулировке проблемы, показывающей ошибку считывания местоположения нарушения прав доступа 0xzzzzzz.Я предполагаю, что приложение пытается прочитать код некоторой ограниченной DLL или секции кода, и это вызывает ошибку.Я использовал блок try catch, но это не помогло.Любые предложения относительно того, что я могу сделать?