INT PageFaultExceptionFilter(DWORD dwCode)
{
LPVOID lpvResult;
EXCEPTION_POINTERS *ep;
if (dwCode != EXCEPTION_ACCESS_VIOLATION)
{
printf(("Exception code = %d.\n"), dwCode);
return EXCEPTION_EXECUTE_HANDLER;
}
printf("Exception is a page fault.\n");
ep = GetExcepotionInformation();
lpvResult = VirtualAlloc((LPVOID)ep->ExceptionRecord.ExceptionInformation[1], pageSize,MEM_COMMIT, PAGE_READWRITE);
if (lpvResult == NULL)
{
printf("VirtualAlloc failed.\n");
return EXCEPTION_EXECUTE_HANDLER;
}
else{printf("Allocating another page.\n");}
pageCounter++;
return EXCEPTION_CONTINUE_EXECUTION;
}
ep->ExceptionRecord.ExceptionInformation[1]
, я ожидаю, что в начало сбойной страницы. возможно как раз из-за этого....
EXCEPTION_POINTERS::ExceptionRecord.ExceptionInformation[1]
. А как же померяться?
...
Да и просто поболтать?
AddressOfEntryPoint
заинжектить длл в другой процесс
берешь таблицу исполняемого файла
Просто смотришь что такое точка входа
https://docs.microsoft.com/en-us/windows/win32/deb...
находишь точку входа, перекидываешь ее в конец, вставляешь ссылку на свой код и в конце переход на перенесенную оригинальную точку входа.
Чем это лучше предыдущего ответа?
берёшь значит таблицу входа, находишь точку входа,
есть файл exe, он должен заинжектить длл в другой процесс
моя цель другая что бы не задавали дурацких вопросов, или как минимум спрашивали то что можно объяснить
такими трюками я занимался наверное раз в жизни, тут кстати задавал вопрос, разжевал для себя и выбросил.
с чего начать
как вообще это просчитывается
нужно посчитать такты выполнения программ
объясни попроще
"%[^\n]"
там было задумано же. И тоже будет неправильно работать. Должно быть "%[^\n]\n"
И как помогут вектора?
std::vector<std::string> grps;
...
while (...) {
if (std::find(grps.begin(), grps.end(), gr) == grps.end()) {
grps.push_back(gr);
...
}
...
}