Что такое «выравнивание» и как конвертировать из одного выравнивания в другое? - PullRequest
4 голосов
/ 21 сентября 2010

Вот шаги для преобразования из выравнивания раздела в выравнивание файла:

  1. Найти RVA для данных
  2. Из RVA выведите раздел, к которому относятся данные, на которые ссылаются. Это тривиально, поскольку разделы не перекрываются. Начальные адреса различных разделов доступны в заголовке файла
  3. Найдите разницу между RVA и начальным адресом раздела, чтобы найти смещение данных, т. Е. Смещение этих данных в разделе.
  4. Из заголовка файла для того же раздела найдите расположение этого же раздела в файле.
  5. Добавьте смещение данных в расположение раздела в файле, чтобы найти адрес данных в файле.

Но я просто не понимаю этого, может кто-нибудь уточнить детали?

1 Ответ

9 голосов
/ 22 сентября 2010

Выравнивание является округленным значением. Размер данных раздела округляется для большей эффективности, поскольку операционная система все равно перемещает данные по частям.

Выравнивание файлов обычно составляет 512 байт, что соответствует размеру блоков большинства файловых систем.

Выравнивание раздела обычно составляет 4096 байт, что соответствует размеру страницы памяти.

Таким образом, если у вас есть PE-файл с разделом (например, ".text"), который содержит 513 байтов данных:

  • Раздел .text будет округлен до 1024 байт в файле.
  • Раздел .text будет округлен до 4096 байт в памяти.

Обратите внимание, сколько свободного места возможно как в файле, так и в памяти.

Я не уверен, почему вы хотите "конвертировать из одного выравнивания в другое". Рецепт, который вы получили, оставляет загадку цели упражнения. Если ваша цель - манипулировать PE-файлами, то все, что вам нужно учитывать, - это выравнивание файлов. Загрузчик Windows будет обрабатывать данные выравнивания разделов, когда выбрасывает их в память, поэтому обычно вам вообще не нужно об этом думать.

Подробнее о PE вы можете прочитать здесь .

...