Нарушение прав чтения в ассемблере - PullRequest
0 голосов
/ 05 января 2011

Вот простой 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, но это не помогло.Любые предложения относительно того, что я могу сделать?

1 Ответ

0 голосов
/ 05 января 2011

Ясно, что независимо от значения return_addr, оно не указывает на допустимое место в памяти, потому что в противном случае нарушение доступа не произошло бы. Так что детали этого очень актуальны.

...