среда, 11 декабря 2013 г.

Математика хардкор? Глупости!

Меня никогда не интересовала математика, пока я не попал в универ. Именно там я узнал что это такое на самом деле и чем-то даже заинтересовался, однако чего мне стояло это вхождение ... Первое время я рвал на себе волосы видя непонятные иероглифы и абсурдные равенства, большие пробелы в знаниях обостряли ситуацию, затем кое как подцепив фундаментальные основы, что-то стало прояснятся. Тем не менее это сильно сказалось на моём эмоциональном здоровие. Моя самооценка пала, неудачные попытки понять формулы и доказательства вызывали во мне чувство отчаянья, "Какой же я дибил" вот что крутилось у меня в голове на тот момент) Тем не менее нарвавшись на перездачи, моя упрямость сыграла мне на руку и по крупицам понимание стало приходить. Но то ощушение отчаянья до сих пор время от времени посещает меня, однако не такими приступами как раньше)

Но к чему я это говорю, пока я пытался осилить матчасть, я много перебрал литературы, конспекты которые я брал у одногрупников были трудночитаемы и часто требовали предворительной расшифровки. Конечно нам давали и книги, но ... увы то что написано в книгах 80г такой хардкор я вам скажу. Даже спустя время, имея уже базис знаний за плечами мне не понятно что там написано. Понятно что математика это точная наука, и развивает особый склад ума, но как показал мой опыт за всеми этими сложными формулами стоят очевидные и простые явления. Единственная сложность в понимании математики это интерпритация написанного. Т.е. пока ты себе не представишь чтолибо ты это не поймёшь. Например я долго ломал голову что такое комплексные числа и в чём их смысл, пока не увидел их на графике, или таже линейная независимость казалась мне просто бессмысленной формулой, пока я не увидел рисунок с замкнутыми векторами. Так почему нельзя такие простые вещи давать так же просто? Почему нет книг в которых бы доступно и иллюстрированно обьяснялись очевидные вещи. Нет я не имею введу картинки как в 5 классе с яблоками и зверушками) Но порой так не хватает рисунка на графике, или разобраного по косточкам примера.

Мне очень нравится  сайт http://mathprofi.ru, посвещённый высшей математике. Проект поддерживает на сколько я знаю один человек и задумывался он как ресурс в помощь заочникам. Ценность данного ресурса заключается в том что матерьял разжован на человеческом языке, причём так, что его поймёт даже семиклассник. Конечно в этом есть и свой недостаток, там обьясняется как решать но не обьясняется почему так, тем не менее если я пытаюсь освоить какой-то материал, то сперва проще прочесть его именно с mathprofi, а потом сидеть уже теребить теоремы и доказательства. Для примера взгляните на гостевую книгу ресурса, ЕЖЕДНЕВНО на протяжении 3х лет автора благодарят студенты, за то что он так хорошо разжевал матерьял. А это чего то да значит.

Очень бы хотелось, чтобы в ближайшем будующем в ВУЗах появился качественный материал, который доступно и наглядно разьяснял любую науку, не только математику. Я понимаю что раньше не одно поколение назад, студентам приходилось учится по этим деревянным книгам, но у них просто небыло выбора, однако сейчас же не каменный век.

понедельник, 2 декабря 2013 г.

О расширении секций PE приложений

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

Проблемы расширения


Начнём пожалуй с того, что взглянем на проблемы которые стоят на нашем пути. На самом деле проблема только одна, это связи. Их можно поделить на 2 типа:

1. Смещения (анг. offset), т.е. относительные адреса, которые могут указывать на данные из других секций.
2. Виртуальные адреса(анг. virtual address), которые обычно находятся в кодосекции (напр. mov eax, dword ptr[00404264])

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


Рис. 1. Связи внутри PE приложения

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

Но решения в данном случае есть, покрейней мере найдено два. Одно из них базирутеся на релоках, а другое на изменении последней секции. Оба сейчас мы и разберём.

Изменение размера произвольной секций PE файла

Пример техники изменения виртуального размера произвольной секции исполняемого файла и нормализации связей через релоки. Реализованы следующие фитчи:
- Изменение виртуального размера произвольной секции
- Нормализация смещений PE заголовков (включая импорты, экспорты, ресурсы и т.д.)
- Нормализация виртуальных адресов через релоки
- Поддержка PE и PE+(x64) частично
и т.д.