Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перебазирование адресов PE 
:(
    Опции темы
ТарасАтавин
Дата 13.9.2013, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Как оно вообще происходит? Хорошо, пусть существует поле с предпочтительным адресом загрузки и все адреса базируются на этот адрес, а когда фактический адрес загрузки отличается от предпочтительного, адреса просто складываются с разностью. Эйси. А как система ищет перебазируемые адреса? Пусть предпочтительный адрес загрузки 0x40000000, данные начинаются с 0x40002000, по этому адресу валяется 4=х байтное целое и где то в коде есть инструкция 
Код
MOV EAX, [0x40002000]
, или 
Код
MOV EAX, 0x40002000
MOV SI, EAX
MOV EAX, [SI]
, а файл загружен по адресу 0x60000000, тогда вместо 0x40002000 должно стоять 0x60002000. 0x40002000+(0x60000000-0x40002000)=0x60002000. Вроде адрес вычислен правильный. Только где его искать в коде исполняемой секции? И как быть если адрес 0x40002000 случайно совпал с константой 0x40002000? Ведь когда 0x40002000 - не адрес, а обычное данное, загружаемое в регистр для каких то математических расчётов, то исправлять его на 0x60002000 уже не надо. А в адресной арифметике
Код
MOV EAX, 0x40002000
ADD EAX, EBX
MOV SI, EAX
MOV EAX, [SI]
 надо.

Это сообщение отредактировал(а) ТарасАтавин - 13.9.2013, 08:01


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
_zorn_
Дата 13.9.2013, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Релоки (relocation table)
Продолжай дальше курить PE формат  smile 

ЗЫ. Ты наверное имел ввиду ESI в своем примере ?

Это сообщение отредактировал(а) _zorn_ - 13.9.2013, 09:22
PM MAIL   Вверх
ТарасАтавин
Дата 13.9.2013, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



А где про них можно прочитать?

Добавлено через 24 секунды
Цитата(_zorn_ @  13.9.2013,  09:20 Найти цитируемый пост)
ЗЫ. Ты наверное имел ввиду ESI в своем примере ?
Наверное.



--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
bems
Дата 13.9.2013, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(ТарасАтавин @  13.9.2013,  11:14 Найти цитируемый пост)
А где про них можно прочитать?

я тебе давал ссылку на описание формата РЕ, там раздел "The .reloc Section (Image Only)"

Это сообщение отредактировал(а) bems - 13.9.2013, 13:01


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ТарасАтавин
Дата 14.9.2013, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(bems @  13.9.2013,  13:01 Найти цитируемый пост)
я тебе давал ссылку на описание формата РЕ, там раздел "The .reloc Section (Image Only)"
Простите, где? Пока что я знаю ответ zornа: 
Цитата(_zorn_ @  4.9.2013,  08:51 Найти цитируемый пост)
Начни с простого
http://ru.wikipedia.org/wiki/Portable_Executable
: [quote=]Таблица перемещений[править | править исходный текст]
Файлы PE не содержат позиционно-независимого кода. Вместо этого они скомпилированы для предпочтительного базового адреса, и все адреса, генерируемые компилятором/компоновщиком, заранее фиксированы. Если PE файл не может быть загружен по своему предпочтительному адресу (потому что он уже занят чем-то ещё), операционная система будет перебазировать его. Это включает в себя перевычисление каждого абсолютного адреса и изменение кода для того, чтобы использовать новые значения. Загрузчик делает это, сравнивая предпочтительный и фактический адреса загрузки, и вычисляя значение разности. Тогда для получения нового адреса ячейки памяти эта разность складывается с предпочтительным адресом. Базовые адреса перемещений хранятся в списке и при необходимости добавляются к существующей ячейке памяти. Полученный код является теперь отдельным по отношению к процессу и не является больше разделяемым, так что при таком способе теряются многие из преимуществ экономии памяти динамически загружаемых библиотек. Такой способ также значительно замедляет загрузку модуля. По этой причине следует избегать перебазирования везде, где это возможно; например, библиотеки, поставляемые Microsoft, имеют предварительно вычисленные неперекрывающиеся базовые адреса. В случае отсутствия необходимости перебазировании PE файлы имеют преимущество очень эффективного кода, но при наличии перебазирования издержки в использовании памяти могут быть значительными. Это отличает формат PE от ELF, который использует полностью позиционно-независимый код и глобальную таблицу смещений, которая жертвует временем выполнения в пользу расходования памяти.[/quote] (если я правильно понял). А мне бы подробно про эту таблицу.



--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
bems
Дата 14.9.2013, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(ТарасАтавин @  14.9.2013,  12:36 Найти цитируемый пост)
Простите, где?

вот в этом сообщении http://forum.vingrad.ru/index.php?showtopi...t&p=2581085


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ТарасАтавин
Дата 14.9.2013, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(bems @  14.9.2013,  13:32 Найти цитируемый пост)
вот в этом сообщении http://forum.vingrad.ru/index.php?showtopi...t&p=2581085 
Мне не чем читать docx.


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
bems
Дата 14.9.2013, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



можно скачать фриварный опенофис или конвертеры к старым ms-офисам.
и вообще, было бы желание


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ТарасАтавин
Дата 15.9.2013, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(bems @  14.9.2013,  17:13 Найти цитируемый пост)
можно скачать фриварный опенофис
Давно.

Добавлено через 40 секунд
Цитата(bems @  14.9.2013,  17:13 Найти цитируемый пост)
и вообще, было бы желание 
Этому формату не поможет ни какое желание.



--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
bems
Дата 15.9.2013, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(ТарасАтавин @  15.9.2013,  04:58 Найти цитируемый пост)
Давно.

ну у меня опенофис отлично открывает docx


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ТарасАтавин
Дата 16.9.2013, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



А у меня он почему-то и doc понимает не до конца.


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
bems
Дата 16.9.2013, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



ну насчет "не до конца" это есть такое, но docx поддерживается


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.1971 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.