![]() |
Цитата:
Выделяя память через new[] или malloc, CRT выделяет память только с правами на чтение и запись (в теории, это нигде не прописано), а выделяя память через VirtualAlloc мы явно указываем, что мы потом хотим исполнять данный кусок памяти Память вещь сложная, по мере изучения cs (computer science) и операционных систем разница между ними станет тебе более явной Цитата:
И да, производительность естественно меньше, но разница мизерная, и ради нескольких миллисекунд не думаю, что стоит заморачиваться Цитата:
Зона статической памяти(там, где хранятся статические переменные) не имеет права на исполнение |
Цитата:
|
Используй kthook и будет счатье хД
GitHub - kin4stat/kthook Contribute to kin4stat/kthook development by creating an account on GitHub. github.com p.s. @kin4stat обнови документацию для новичков, ктхук в массы! |
Цитата:
Вся память поделена на страницы, размерами по 4 кб, как раз таки эти страницы и имеют права на чтение, запись и исполнение Очень упрощённо говоря, это наименьшая единица выделения памяти |
Цитата:
Второе отличие - VirtuaAlloc аллоцирует страницу памяти, а не отдает кусок из заранее выделенной памяти. Также operator new юзает под капотом HeapAlloc на винде, а не VirtualAlloc. Почему для хуков юзают VirtualAlloc: operator new выделяет невыровненный кусок памяти, а также выделяет ее с правами ReadWrite, когда у VirtualAlloc можно выбрать самому сразу, с какой защитой будет выдана страница памяти. Выровненный кусок памяти нужен для скорости. Процессор читает память в кеш кусками по 64 байта. Когда мы используем VirtuaAlloc, процессору нужно лишь подгрузить начало страницы, и он уже будет обладать всеми нужными инструкциями. В случае operator new, ему придется подгрузить невыровненный кусок памяти, который в худшем случае будет содержать всего один байт инструкций, а все остальное будет мусором, что побудит его подгрузить еще 64 байта памяти в кеш линию Цитата:
Цитата:
Цитата:
Также, если мы будем создавать хуки на такой основе - мы будем раздувать размер файла, вместо того чтобы выделять нужное количество памяти когда нам нужно в рантайме. |
Цитата:
1) Касательно этого момента: Цитата:
2) Вы писали о том, что постоянное такое использование приведёт к раздутию файла. Собсна, к этому у меня идёт следующий вопрос: Цитата:
|
Цитата:
Цитата:
Берем из расчета: jmp в месте хука + трамплин(затертые инструкции + jmp back) Но там еще несколько проблем, кроме раздувания памяти. Секция данных защищена от выполнения, и сделано это не просто так. А еще там не будет выравнивания адресов |
Цитата:
Цитата:
Поправьте, если не прав. |
| Время: 16:33 |