Можно ли увидеть, когда к отладке в VC ++ 6.0 обращаются к куску памяти? - PullRequest
2 голосов
/ 01 июля 2010

Я пытаюсь отладить проблему с помощью VC ++ 6.0.Я думаю, что проблема в том, что доступ к буферу происходит после его освобождения, и поэтому мне интересно, есть ли в отладчике VC ++ отличная функция для контроля блока памяти и его прерывания, как только что-то пытается получить к нему доступ.

Любые идеи приветствуются, так как очень простые инструкции: -)

Спасибо, Сэм.

Ответы [ 4 ]

0 голосов
/ 23 июля 2010

Visual Studio может установить точек останова в памяти .Вам нужно знать адрес памяти, о которой идет речь, поэтому, если вы перезаписываете стек, это не так полезно.

0 голосов
/ 02 июля 2010

Ограничить доступ к буферу, используя функции типа getbuffer()/setbuffer(). Затем точка останова в начале этих функций позволит вам увидеть стек вызовов после достижения точки останова. Из этого вы можете узнать, как контроль достиг там.

0 голосов
/ 08 июля 2010

Если у вас есть контроль над тем, где буфер выделен и освобожден, вы можете выделить буфер с помощью функции VirtualAlloc (http://msdn.microsoft.com/en-us/library/aa366887%28v=VS.85%29.aspx).

Чтобы впоследствии освободить эту память, вы обычно используете VirtualFree (http://msdn.microsoft.com/en-us/library/aa366892%28v=VS.85%29.aspx),, но в вашем случае лучше не освобождать буфер, а защитить его с помощью VirtualProtect (http://msdn.microsoft.com/en-us/library/aa366898%28v=VS.85%29.aspx). Использовать постоянную защиты PAGE_NOACCESS (см. http://msdn.microsoft.com/en-us/library/aa366786%28v=VS.85%29.aspx). Каждый, кто получит доступ к странице после этого вызова, получит нарушение прав доступа.

Конечно, этот трюк предполагает, что вы не используете гигабайты буферов, поскольку количество страниц, которые вы можете выделить таким образом, ограничено (размером таблицы).

0 голосов
/ 01 июля 2010

Я не знаю насчет Visual Studio, но знаю, что в дизассемблере IDA есть такая функция. http://www.hex -rays.com / idapro / idadown.htm это отличное приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...