ШАРИК Опубликовано 19 октября, 2016 Поделиться Опубликовано 19 октября, 2016 Здравствуйте , помогите исправить баг в сканере сигнатур . Сканер простой . Из урока Coder'а . Раздражает эта строчка byte* buffer = new byte[mbi.RegionSize]; Тем , что из-за неё вылетает чит. Какими другими способами можно выделить и освободить память ? Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 19 октября, 2016 Поделиться Опубликовано 19 октября, 2016 (изменено) Посмотри в этот момент чему равняется mbi.RegionSize. Проблема в нем похоже Изменено 19 октября, 2016 пользователем helldrg Ссылка на комментарий Поделиться на другие сайты Поделиться
ШАРИК Опубликовано 19 октября, 2016 Автор Поделиться Опубликовано 19 октября, 2016 (изменено) 29 минуты назад, helldrg сказал: Посмотри в этот момент чему равняется mbi.RegionSize. Проблема в нем похоже С ним всё норм . Но лог компилятора выдаёт std::bad_alloc Изменено 19 октября, 2016 пользователем ШАРИК Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 19 октября, 2016 Поделиться Опубликовано 19 октября, 2016 Обычно такое бывает когда значение в скобках отрицательное или слишком большое. Если у тебя значение mbi.RegionSize в пределах нормы, тогда не знаю в чем дело Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 19 октября, 2016 Поделиться Опубликовано 19 октября, 2016 (изменено) Цитата Какими другими способами можно выделить и освободить память ? Другой способ такой: void *buffer; buffer = VirtualAlloc(0, mbi.RegionSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); освобождение if(buffer) { VirtualFree(buffer, 0, MEM_RELEASE); } Изменено 19 октября, 2016 пользователем helldrg 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
ШАРИК Опубликовано 19 октября, 2016 Автор Поделиться Опубликовано 19 октября, 2016 Спасибо . Но теперь почему-то на DataCompare ругается Скрытый текст Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 19 октября, 2016 Поделиться Опубликовано 19 октября, 2016 Ну тут много вариантов, у меня, к примеру, раньше такая же ошибка была, из-за того, что я указывал не правильный размер модуля, в котором искал сигнатуру(размер модуля был меньше указанного) Ссылка на комментарий Поделиться на другие сайты Поделиться
ШАРИК Опубликовано 19 октября, 2016 Автор Поделиться Опубликовано 19 октября, 2016 Только что, helldrg сказал: Ну тут много вариантов, у меня, к примеру, раньше такая же ошибка была, из-за того, что я указывал не правильный размер модуля, в котором искал сигнатуру(размер модуля был меньше указанного) Не , мне наверно надо выделить память под byte* а не под void *... Только как ? Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 19 октября, 2016 Поделиться Опубликовано 19 октября, 2016 void* универсальный тип, только приведение типов сделать и все. Есть еще malloc функция, которая выделяет память, но я ей никогда не пользовался поэтому ничего писать про неё не буду Ссылка на комментарий Поделиться на другие сайты Поделиться
helldrg Опубликовано 19 октября, 2016 Поделиться Опубликовано 19 октября, 2016 Приведение типов выглядит примерно так: byte *buff = (byte*)buffer; for (int i = 0; i < 100; i++) *buff++ = '0x99'; 100 раз запишется символ 0x99 в buffer Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 20 октября, 2016 Поделиться Опубликовано 20 октября, 2016 Не запишется. Потому что символ нужно записывать либо '\x99', либо 0x99. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения