Сейчас на форуме: tyns777, cppasm, dutyfree, asfa (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Вопрос по релокам
Посл.ответ Сообщение

Ранг: 0.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 15 апреля 2017 19:12 · Поправил: r_one_
· Личное сообщение · #1

Здравствуйте.

Есть небольшая проблема с dll, большое спасибо daFix за подсказку, проблема в следущем при добавлении новых релоков, которые содержат адреса импортов, dll начинает загружатся по фиксированному imagebase, и программа не работает в другой ос, записывал в релоки примерно следущее :

1.dd База RVA
2.dd Размер блока
3.dd 3 (HIGH/LOW)/ Короткий RVA + Размер команды.

Я в чем-то ошибся ?

Мне вот интересно можно-ли во время выполнения получить текущий imagebase и обойтись без релоков ?



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 15 апреля 2017 20:17
· Личное сообщение · #2

r_one_
Это что за релоки такие что там размер опкода нужен?
Релоки строятся по битмаске (type:4, offset:12, если память не подводит) и внутри блока влючают в себя только смещение.

Если у тебя длл грузится только по imagebase, то вероятно в заголовке отсутствует вообще ссылка на релоки. А может еще и флаг Rel Stripped быть установлен. Я правда не помню влияет ли он на обработку если релоки в реальности присутствуют.

-----
старый пень




Ранг: 0.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 15 апреля 2017 20:36 · Поправил: r_one_
· Личное сообщение · #3

r_e
Ошибся немного в описании размер команды, ссылка на релоки в заголовке есть, проблема с добавлением новых, если я меняю размер релоков на оригинальный (без новых релоков), то dll грузится не по фиксированному imagebase.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 16 апреля 2017 01:36
· Личное сообщение · #4

r_one_
Можешь просто использовать GetModuleHandle/GetProcAddress. Для тебя этот вариант будет самый оптимальный, думаю

-----
Research For Food


| Сообщение посчитали полезным: Relax_

Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 16 апреля 2017 02:03
· Личное сообщение · #5

подобные вопросы давно уже имеют ответы на SO, учитесь искать.
http://stackoverflow.com/questions/17436668/how-are-pe-base-relocations-build-up



Ранг: 0.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 16 апреля 2017 05:37
· Личное сообщение · #6

daFix
Я уже думал об этом, использовать LoadLibrary/GetProcAddress, но в импорте нет этих функций.
shellstorm
Я это уже читал.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 17 апреля 2017 01:54
· Личное сообщение · #7

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

-----
Research For Food


| Сообщение посчитали полезным: r_one_


Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 17 апреля 2017 02:43
· Личное сообщение · #8

от imagebase берется смещение функи, и не надо париться

-----
От многой мудрости много скорби, и умножающий знание умножает печаль


| Сообщение посчитали полезным: daFix, r_one_

Ранг: 0.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 22 апреля 2017 11:29 · Поправил: r_one_
· Личное сообщение · #9

Большое спасибо, всем кто ответил в теме.

На будущее всем кто работает с релоками, как оказалось загрузчик пересчитывает адрес от фиксированного imagebase, а не от imagebase после загрузки, собственно получается примерно следующее [Fix ib + RVA] -> [(Fix ib + RVA) - Fix ib] -> [New ib + RVA].




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 22 апреля 2017 15:09
· Личное сообщение · #10

r_one_

Да, это дельта адресов. И есчо загрузчик опенсурсный.

-----
vx



 eXeL@B —› Вопросы новичков —› Вопрос по релокам
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати