Сейчас на форуме: tyns777, bezumchik (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Проверка адресов и размеров секций.
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 21 сентября 2019 23:50 · Поправил: zombi-vadim
· Личное сообщение · #1

Я вот хотел программку себе в помощь написать, которая проверяет валидность адресов и размеров секций.
и столкнулся с такой проблемкой.. Допустим некий плохой дядя открыл в редакторе мой файл и изменил немного
адрес одной из секций. И вот я начинаю проверять свой файл, складываю адрес предыдущей секции с ее размером
и вижу что следующий адрес не правильный. Ага вот и нашли вроде. Однако тут проблема что дядя испортил адрес
текущей или размер предыдущей секции? Как тут ни крути ничего не получается, может посоветуете что нибудь?



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 22 сентября 2019 14:59
· Личное сообщение · #2

DumpFixer Я вообще не понимаю как эта штука работает не угробив файл. А если физически размер секции больше виртуального и она содержит секторный оверлей с привязкой к Raw адресам?




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 22 сентября 2019 15:04
· Личное сообщение · #3

zombi-vadim пишет:
оверлей

Оверлей в память не грузится.......

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 22 сентября 2019 15:07 · Поправил: zombi-vadim
· Личное сообщение · #4

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

Добавлено спустя 26 минут
Секции нарушены?И хрен с ними. Пусть PointerToRawData = VirtualAddress и дело с концом. А еще лучше обьявить все одно секцией с размером виртуального образа. Вот и вся диагностика




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 22 сентября 2019 17:31
· Личное сообщение · #5

zombi-vadim пишет:
А еще лучше обьявить все одно секцией с размером виртуального образа.

А еще лучше обвинить во всем маньяка-убийцу pe-заголовков и дурить всем головы.

-----
2 оттенка серого




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 22 сентября 2019 20:58 · Поправил: zombi-vadim
· Личное сообщение · #6

Вообщем проанализировал я ситуацию. Как везде говорится разработчики PE формата были мудрыми людьми.Заголовок файла имеет множество всяких структур и значений. Одни кажутся ненужными другие важными. Но по сути почти все что задумано - правильно. И если сделать множественный анализ ошибки то можно получить если не 100 процентный, то близкий к этому результат.
А какого то хитрого сто процентного алгоритма по видимому нет или никто еще не придумал

Добавлено спустя 12 минут
А вот интересно во многих источниках написано, что секции могут располагаться не по возрастанию размеров а как попало. Это реально возможно?И какой линкер на такое способен? Или просто можно это сделать специально для каких то непонятных целей?




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

Создано: 22 сентября 2019 22:18 · Поправил: difexacaw
· Личное сообщение · #7

zombi-vadim

> А какого то хитрого сто процентного алгоритма по видимому нет

Потому что без загрузчика файл бесполезен, так как нет его фич и последовательности загрузки.

> Пусть PointerToRawData = VirtualAddress

Интереса ради сделал такое для pe-заголовка - задал смещение равное VA секции данных, соответственно хидер дописал в конец файла. Модуль рабочий XP-7-8. Получилось что в модуле два pe-хидера, а какой из них используется зависит от ситуации

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



Отображение проходит успешно, падает на EP(7-8), так как я туда релок записал во 2-й хидер посмотреть что получится.. но на XP завелось как не странно

d1e8_22.09.2019_EXELAB.rU.tgz - 010.7z

-----
vx



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


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