2009-10-17 2 views
0

Я хочу написать небольшой объем памяти внутри определенного диапазона адресов моего процесса.Как найти свободную память в пределах определенного диапазона адресов

Пример

  • объем памяти выделить: 5 bytes
  • нижней границы для адреса: 0x 00 40 00 00
  • верхней границы для адреса: 0x 00 A0 00 00

диапазона, в котором я хочу для записи уже выделен процессом. Поэтому я не могу просто выделить новый mem VirtualAlloc.

Однако, поскольку страницы в нужном адресном пространстве используются для кода программы, они не используются на 100%. Существует достаточно места где-то, чтобы написать мои 5 байтов.

Что мне нужно сделать, чтобы не перезаписывать необходимую память?

+6

Обязательно: Почему? – GManNickG

+0

Похоже, он ищет, чтобы скрыть небольшую кодовую пещеру. – mrduclaw

+0

true. Я хочу вставить команду jmp, которая позволяет мне перепрыгнуть в другое место, где у меня больше памяти. Так как мне не разрешено напрямую его называть (=> проверка диапазона), я должен использовать такой метод. – Etan

ответ

3

Я не думаю, что есть хороший, общий способ делать то, что вы хотите. Поскольку похоже, что вы говорите о Windows и о том, где место по умолчанию для загрузки PE, я сделаю некоторые предположения здесь, которые могут вам помочь.

Если вы хотите разобрать PE-заголовок, вы можете найти там провальное пространство. Проверьте области между разделами и перед функциями. В зависимости от того, как было создано приложение, вы можете найти области между функциями, которые должны быть заполнены INT3, которые, вероятно, будут достаточными для того, что вы ищете.

Если вы предоставили нам больше информации о том, что вы пытаетесь сделать конкретно, мы могли бы, вероятно, помочь больше. Можете ли вы просто исправить двоичный файл перед загрузкой или вам нужно делать все во время выполнения?

+0

Я просто хочу изучить метод обрезки кода в двоичном файле образца. Я обнаружил 5 INT3 перед функцией. Разве они не нужны? Сообщите мне об этом Opcode (похоже, для debuggin) – Etan

+0

IIRC, там есть INT3, так что если вы случайно укажете EIP там, программа выйдет из строя (подумайте, вне-границы строки или что-то еще). Таким образом, нет, не очень важно, так как вы все равно нарушите целостность программы. – mrduclaw

+0

Не совсем сбой - отладка. –