VDV Опубликовано 5 июля, 2013 Поделиться Опубликовано 5 июля, 2013 как правильно использовать эту функцию и для чего она вообще(msdn читал-не понял до конца)? MEMORY_BASIC_INFORMATION mbi; VirtualQuery( ( void* )pvAddress, &mbi, sizeof( mbi ) );я пытаюсь применить эту функцию к(совместно) AOB scan :DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask){ for(DWORD i=0; i<dwLen; i++) if (bCompare((BYTE*)(dwAddress+i),bMask,szMask)) return (DWORD)(dwAddress+i); return 0;}потому что когда я начинаю сканировать массив в промежутке памяти допустимFindPattern(0х15000000 , 0х3000000 , блаблабла.......)Кроме краша нечего не происходит.А когда я указываю определенный модуль и его длину , то все нормально находит. Хотя если сканер не найдет указанный массив в пределах модуля и выйдет за приделы модуля - тоже краш.Такой сканер отлично подходит для поиска статических адресов и поиска внутри модуля , а вот как быть с динамикой? она может быть где угодно при перезапуске игры - за пределами модуля , посредине модуля , в начале,в конце и т.д. Как найти решение , может я не правильно применяю функцию FindPattern???Если правильно , то как на счет "VirtualQuery" , как правильно её применить? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 5 июля, 2013 Поделиться Опубликовано 5 июля, 2013 В твоем посте я не вижу примера твоего совместного применения VirtualQuery с функцией FindPattern. Вот когда приведешь своего применения - тогда я постараюсь помочь, и указать на возможные ошибки. А пока я лишь вижу, что ты процитировал вызов функции VirtualQuery из мсдн, и функцию FindPattern из урока Кодера. Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 5 июля, 2013 Автор Поделиться Опубликовано 5 июля, 2013 В твоем посте я не вижу примера твоего совместного применения VirtualQuery с функцией FindPattern. Вот когда приведешь своего применения - тогда я постараюсь помочь, и указать на возможные ошибки. А пока я лишь вижу, что ты процитировал вызов функции VirtualQuery из мсдн, и функцию FindPattern из урока Кодера.я не знаю как её применить с FindPattern совместно - если ты на счет исходного кода , да я прошу помочь с исходным кодом , я не пойму как его сделать , на практике лучше всего обучаться.На счетVirtualQuery( ( void* )pvAddress, &mbi, sizeof( mbi ) ); я тут понимаю только переменную pvAddress, для чего mbi я не помойму.Если объяснить на примере кода - это выше твоих принципов - я не знаю тогда, объясни в л\с или скайп. Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 6 июля, 2013 Автор Поделиться Опубликовано 6 июля, 2013 я не знаю как её применить с FindPattern совместно - если ты на счет исходного кода , да я прошу помочь с исходным кодом , я не пойму как его сделать , на практике лучше всего обучаться.На счетVirtualQuery( ( void* )pvAddress, &mbi, sizeof( mbi ) ); я тут понимаю только переменную pvAddress, для чего mbi я не помойму.Если объяснить на примере кода - это выше твоих принципов - я не знаю тогда, объясни в л\с или скайп.нашел вот это:MEMORY_BASIC_INFORMATION mbi = {0};unsigned char *pAddress = NULL, *pEndRegion = NULL;DWORD dwFindData = 0xBAADF00D, dwProtectionMask = PAGE_READONLY | PAGE_EXECUTE_WRITECOPY | PAGE_READWRITE | PAGE_WRITECOMBINE;while( sizeof(mbi) == VirtualQuery(pEndRegion, &mbi, sizeof(mbi)) ){ pAddress = pEndRegion; pEndRegion += mbi.RegionSize; if ((mbi.AllocationProtect & dwProtectionMask) && (mbi.State & MEM_COMMIT)){ for (pAddress; pAddress < pEndRegion ; pAddress++){ if (*pAddress == dwFindData){ } } }} Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 6 июля, 2013 Поделиться Опубликовано 6 июля, 2013 Дело не в моих принципах. Просто, если я приведу тебе готовый код, ты его скопипастишь, и будешь использовать до тех пор, пока не возникнет какая-либо нестандартная ситуация, в которой у тебя снова возникнут проблемы. В этом случае ты снова будешь обращаться за помощью. А если же ты разберешься, какой функционал выполняет эта функция (тавтология, знаю), то уже в любой ситуации ты сможешь изменить свой код так, чтобы все работало. Даю наводку - VirtualQuery опрашивает регионы памяти, начиная с указанного ей адреса. В приведенном тобой коде, который ты где-то нашел, как раз в цикле перебираются все регионы памяти, пока не будет найден нужный. Тебе же этот код нужно изменить так, чтобы в каждой итерации цикла вызывалась функция FindPattern, в которую будут передаваться данные, полученные вызовом VirtualQuery. Если присмотришься к структуре MEMORY_BASIC_INFORMATION (а, точнее, почитаешь о ней на MSDN), увидишь, что в нее сохраняются некоторые данные. Что это за данные - легко понять по названиям членов структуры. Так вот, для FindPattern в каждой итерации вышеприведенного цикла тебе всего лишь нужно передавать определенные данные из указанной структуры. Ну и, разумеется, предусмотреть выход из цикла, если сигнатура найдена. Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 6 июля, 2013 Автор Поделиться Опубликовано 6 июля, 2013 Дело не в моих принципах. Просто, если я приведу тебе готовый код, ты его скопипастишь, и будешь использовать до тех пор, пока не возникнет какая-либо нестандартная ситуация, в которой у тебя снова возникнут проблемы. В этом случае ты снова будешь обращаться за помощью. А если же ты разберешься, какой функционал выполняет эта функция (тавтология, знаю), то уже в любой ситуации ты сможешь изменить свой код так, чтобы все работало. Даю наводку - VirtualQuery опрашивает регионы памяти, начиная с указанного ей адреса. В приведенном тобой коде, который ты где-то нашел, как раз в цикле перебираются все регионы памяти, пока не будет найден нужный. Тебе же этот код нужно изменить так, чтобы в каждой итерации цикла вызывалась функция FindPattern, в которую будут передаваться данные, полученные вызовом VirtualQuery. Если присмотришься к структуре MEMORY_BASIC_INFORMATION (а, точнее, почитаешь о ней на MSDN), увидишь, что в нее сохраняются некоторые данные. Что это за данные - легко понять по названиям членов структуры. Так вот, для FindPattern в каждой итерации вышеприведенного цикла тебе всего лишь нужно передавать определенные данные из указанной структуры. Ну и, разумеется, предусмотреть выход из цикла, если сигнатура найдена.я ж и говорю давай в л\с объяснишь или в скайп на готовом коде , копипаст мне не нужен , мне нужно понять как работает , с удовольствием выслушаю тебя , мне это будет интересно и ты как раз будешь знать , что я не просто скопипастил код а еще и понял как он работает Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 6 июля, 2013 Поделиться Опубликовано 6 июля, 2013 я ж и говорю давай в л\с объяснишь или в скайп на готовом коде , копипаст мне не нужен , мне нужно понять как работает , с удовольствием выслушаю тебя , мне это будет интересно и ты как раз будешь знать , что я не просто скопипастил код а еще и понял как он работаетТы уж извини но давать свой скайп, я думаю никто не будет.Тебе Xipho уже всё объяснил. И на MSDN описание функций очень понятное, так что нет такого варианта что ты мог не понять для чего она. Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 6 июля, 2013 Автор Поделиться Опубликовано 6 июля, 2013 Ты уж извини но давать свой скайп, я думаю никто не будет.Тебе Xipho уже всё объяснил. И на MSDN описание функций очень понятное, так что нет такого варианта что ты мог не понять для чего она.я просто не понимаю , что такого в скайпе объяснить.....Я не такой как вы , с++ мне трудно даётся - я не понимаю многого в с++ , поэтому и прошу помощи у Вас, объяснить какую-то функцию не можете......- она запретная какая-то ....? Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 6 июля, 2013 Поделиться Опубликовано 6 июля, 2013 я просто не понимаю , что такого в скайпе объяснить.....Я не такой как вы , с++ мне трудно даётся - я не понимаю многого в с++ , поэтому и прошу помощи у Вас, объяснить какую-то функцию не можете......- она запретная какая-то ....?Понимаешь, это тоже самое, что ко мне подойдёт человек на улице и попросит оставить ему свой номер телефона.Но в твоём случае вопрос касается WinAPI, а не самого C++.На MSDN дано описание функции, там всё написано чётко, коротко и ясно.И задам тебе встречный вопрос, если не знаешь что это такое, то зачем используешь? Для каких целей? Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 6 июля, 2013 Автор Поделиться Опубликовано 6 июля, 2013 Понимаешь, это тоже самое, что ко мне подойдёт человек на улице и попросит оставить ему свой номер телефона.Но в твоём случае вопрос касается WinAPI, а не самого C++.На MSDN дано описание функции, там всё написано чётко, коротко и ясно.И задам тебе встречный вопрос, если не знаешь что это такое, то зачем используешь? Для каких целей?моя цель - поиск байт и возврат динамического адреса, FindPattern не справляется с этой задачей(только для отдельных случаев) , если есть другой способ я только за , я о нем не знаю...На счет скайпа - это ты преувеличил......если ты чего-то боишься я могу для тебя создать скайп со своего ip и дать логин и пароль тебе. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 6 июля, 2013 Поделиться Опубликовано 6 июля, 2013 Парни, давайте без споров.VDV, тебе я в предыдущем своем посте все максимально подробно разжевал. Тебе осталось только положить в рот и проглотить. То есть, на основе сказанного мной написать код. Тем более, что цикл у тебя уже есть. Тебе же нужно совсем чуть-чуть его подправить, и вставить в нужное место вызов FindPattern, а по результатам вызова этой функции либо продолжать перебор цикла дальше, либо выйти из него с сохранением результатов. Это простая задача, и код я приводить точно не буду, ибо не вижу смысла. Ни по ЛС, ни в скайпе у меня нет времени разжевывать еще более подробно (да и куда уж там подробнее, осталось только непосредственно за тебя код написать), соответственно, делать я этого не стану. Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 14 июля, 2013 Автор Поделиться Опубликовано 14 июля, 2013 тему можно закрыть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения