Гость ypsykk Опубликовано 23 марта, 2013 Поделиться Опубликовано 23 марта, 2013 Здравствуйте. При написании сканера памяти столкнулся с проблемой, которую не могу решить. Суть проблемы в том, что при объявлении переменной {1} (массив байтов) до цикла do while все работает, то есть в listBox1 добавляется около 2000 элементов. Но когда я комменчу {1} и раскомменчиваю {2}, то программа начинает работать не корректно, то есть в listBox1 добавляется около 50 элементов. А если {2} заменить на {3}, то значений в listBox1 будет всего 3. Но, если закомментить функцию ReadProcessMemory, то программа работает корректно. То есть скорее всего проблема именно с функцией ReadProcessMemory, вот только как она влияет на количество итераций в цикле мне совершенно не понятно, так как за это отвечает переменная address, которая функцией ReadProcessMemory, явно, никак не меняется. Помогите разобраться пожалуйста.Информация о среде разработки:Microsoft Visual Studio Express 2012 для Windows DesktopВерсия 11.0.51106.01 Update 1Microsoft .NET FrameworkВерсия 4.5.50709Ниже приведен код программы из которого я убрал все лишнее, для отображения сути проблемы. Полная программа выполняет сканирование страниц памяти программы в поисках строки, из которой потом, при помощи регулярных выражений, вынимается нужные мне данные. Работоспособность программы сверял с Cheat Engine`ом - все значения находит правильно, при условии, что я инициализирую массив pageBuffer перед циклом do while {1}.public void miniF(){ IntPtr nobr; long MaxAddress = 0x7fffffff; long address = 0x0; //{1} //инициализирую массив байтов размером в 100мб, чтоб наверняка хватило для страницы памяти //переменная используется только как аргумент функции ReadProcessMemory byte[] pageBuffer = new byte[100000000]; do { MEMORY_BASIC_INFORMATION MBI; int VQEReturn = VirtualQueryEx(pHandle, (IntPtr)address, out MBI, (uint)Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION))); listBox1.Items.Add(MBI.BaseAddress.ToString() + "-" + ((uint)MBI.BaseAddress + (uint)MBI.RegionSize - 1) + " : " + MBI.RegionSize); //{2} //инициализирую массив байтов размером в страницу памяти, //в который записывается страница памяти функцией ReadProcessMemory, //в Debug режиме видно, что переменная создается с нужным размером //byte[] pageBuffer = new byte[MBI.RegionSize.ToInt32()]; //{3} //byte[] pageBuffer = new byte[100000000]; //считываю в pageBuffer данные размером в страницу памяти начиная с базового адреса страницы ReadProcessMemory(pHandle, MBI.BaseAddress, pageBuffer, (int)MBI.RegionSize, out nobr); if(address == (long)MBI.BaseAddress + (long)MBI.RegionSize) break; address = (long)MBI.BaseAddress + (long)MBI.RegionSize; } while (address <= MaxAddress);} Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость ypsykk Опубликовано 27 марта, 2013 Поделиться Опубликовано 27 марта, 2013 На С++ код работает корректно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 марта, 2013 Поделиться Опубликовано 28 марта, 2013 В таком случае, возможно, это связано с текущей реализацией фреймворка. Впрочем, не могу утверждать наверняка, на решетках кодил очень мало. Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 30 марта, 2013 Поделиться Опубликовано 30 марта, 2013 В таком случае, возможно, это связано с текущей реализацией фреймворка. Впрочем, не могу утверждать наверняка, на решетках кодил очень мало.Я тоже так думаю. Только не текущей а всей версией фреймворка.С этой проблемой сталкивался где то два месяца назад и перепробовал все возможные варианты, даже менял версию фреймворка. решение так и не нашел. Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 12 апреля, 2013 Поделиться Опубликовано 12 апреля, 2013 Кои что вспомнил. попробуй запустить прогу без отладки. в некотором случае работает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 22 апреля, 2013 Поделиться Опубликовано 22 апреля, 2013 Сканер сигнатур и поиск значении на C#. Внешний вид похож на CE, так что думаю будет понятен.Ккому интересно вот http://yadi.sk/d/3oj8xpgN4F2Ar Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения