![]() |
eXeL@B —› Вопросы новичков —› Проверка адресов и размеров секций. |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 21 сентября 2019 23:50 · Поправил: zombi-vadim · Личное сообщение · #1 Я вот хотел программку себе в помощь написать, которая проверяет валидность адресов и размеров секций. и столкнулся с такой проблемкой.. Допустим некий плохой дядя открыл в редакторе мой файл и изменил немного адрес одной из секций. И вот я начинаю проверять свой файл, складываю адрес предыдущей секции с ее размером и вижу что следующий адрес не правильный. Ага вот и нашли вроде. Однако тут проблема что дядя испортил адрес текущей или размер предыдущей секции? Как тут ни крути ничего не получается, может посоветуете что нибудь? ![]() |
|
Создано: 22 сентября 2019 14:59 · Личное сообщение · #2 |
|
Создано: 22 сентября 2019 15:04 · Личное сообщение · #3 |
|
Создано: 22 сентября 2019 15:07 · Поправил: zombi-vadim · Личное сообщение · #4 ClockMan пишет: Оверлей в память не грузится Естественно. И если мы приравняем физические адреса данной секции к виртуальным, то оверлей выпадет. а он нужен для работы файла. Добавлено спустя 26 минут Секции нарушены?И хрен с ними. Пусть PointerToRawData = VirtualAddress и дело с концом. А еще лучше обьявить все одно секцией с размером виртуального образа. Вот и вся диагностика ![]() ![]() |
|
Создано: 22 сентября 2019 17:31 · Личное сообщение · #5 |
|
Создано: 22 сентября 2019 20:58 · Поправил: zombi-vadim · Личное сообщение · #6 Вообщем проанализировал я ситуацию. Как везде говорится разработчики PE формата были мудрыми людьми.Заголовок файла имеет множество всяких структур и значений. Одни кажутся ненужными другие важными. Но по сути почти все что задумано - правильно. И если сделать множественный анализ ошибки то можно получить если не 100 процентный, то близкий к этому результат. А какого то хитрого сто процентного алгоритма по видимому нет или никто еще не придумал ![]() Добавлено спустя 12 минут А вот интересно во многих источниках написано, что секции могут располагаться не по возрастанию размеров а как попало. Это реально возможно?И какой линкер на такое способен? Или просто можно это сделать специально для каких то непонятных целей? ![]() |
|
Создано: 22 сентября 2019 22:18 · Поправил: difexacaw · Личное сообщение · #7 zombi-vadim > А какого то хитрого сто процентного алгоритма по видимому нет Потому что без загрузчика файл бесполезен, так как нет его фич и последовательности загрузки. > Пусть PointerToRawData = VirtualAddress Интереса ради сделал такое для pe-заголовка - задал смещение равное VA секции данных, соответственно хидер дописал в конец файла. Модуль рабочий XP-7-8. Получилось что в модуле два pe-хидера, а какой из них используется зависит от ситуации ![]() Пока файл в память не отображён, то используется первый заголовок, как только отобразится загрузчик сместит секцию данных и адресация будет второго хидера по тому же смещению. Вот и как даже в этом примере проверить валид, это фактически получается два разных модуля.. ![]() Отображение проходит успешно, падает на EP(7-8), так как я туда релок записал во 2-й хидер посмотреть что получится.. но на XP завелось как не странно ![]() ![]() ----- vx ![]() |
<< . 1 . 2 . |
![]() |
eXeL@B —› Вопросы новичков —› Проверка адресов и размеров секций. |