| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > ReadProcessMemory |
| Автор: NET_or_not_NET 22.5.2007, 13:45 |
| Доброго дня! У меня возникла проблема с ReadProcessMemory при работе с приложением написанном на C# & VS2005! Когда я использую эту функцию (например с игрой "Минер") то все ОК!!!! все читаеться, все работает! И не только с "минером", с другими приложениями тоже все ок! Но решил я посмотреть что твориться в пямяти в моем приложении... как Складываеться такое впечетление что работает со всеми прогами написанными где угодно только без участия CLR, .Net FrameWork! надеюсь я страшно заблуждаюсь! Народ ПОМОГИТЕ! наставте на путь истинный! Пишу C# & VS2005 P.S. Написал самое простое: одну форму + одна кнопка + 2-ве переменные! и вот немогу добраться до памяти процесса! В ЧЕМ я ОШИБСЯ???? P.S.S. пробывал OpenProcess со всеми флагами - 0! пробывал сам создавать CreateProcess , Process.Start - 0! P.S.S.S. BaseAddress главного модуля получаеться без проблем! |
| Автор: NET_or_not_NET 22.5.2007, 14:32 | ||
Даю...
|
| Автор: tol05 22.5.2007, 18:12 |
| Проблема в том, что в .Net, в отличие от "winmine.exe" есть сборщик мусора. Он запускается самопроизвольно и в своей работе не стесняется удалять и перемещать объекты в куче (а куча - это та память приложения, которую мы хотим знать). Если в процессе чтения памяти он запустится - результаты выполнения ReadProcessMemory() окажутся непредсказуемыми. |
| Автор: NET_or_not_NET 23.5.2007, 11:06 |
| Доброго дня, tol05 а если это не ссылочнае значение а значимое и оно не в куче а в стеке? И переменная глобальная? Как догда? тоже сборьщик грохнет?, или он грохнет при закрытии приложения? если при закрытии, то значение в памяти? может прочитать адреес памяти для потока, а не для главного модуля? конечно - если так можно? |
| Автор: tol05 23.5.2007, 11:39 | ||
сборщик работает в куче. Запускается недетерминированно (никто не знает когда, в начале, в конце). Но это не важно, ведь если бы даже ты приноровился к какому-то режиму в одной сборке, то для другой мог бы быть другой режим, так? Стек заполняется и очищается независимо от кучи. По мере прохода потоком выполнения кода. Ссылочные переменные находятся в куче, неважно, локальные они, глобальные, экземплярные или статические. Значимые - в стеке. Тоже неважно кому они принадлежат. Одним словом, есть мнение, что от этой ф-ции в .Net лучше отказаться. Можно попробовать решить поставленную задачу через члены GC класса. Я имею в виду GC.GetTotalMemory например. Больше ничего, к сожалению, сказать не могу. |
| Автор: NET_or_not_NET 23.5.2007, 13:26 |
| tol05, спаисбо! буду пробывать через GC класс..... |