Пишемо найпростіший Джойнер файлів

Пишемо найпростіший Джойнер файлів


II. Лоадером. Що це, принцип роботи нашого лоадера.

У нашому випадку, під лоадером розуміється .exe файл, що складається з Розпакувальник і даних, які
дописують в кінець файлу. Прізапуске, распаковщик зчитує ці дані і робить необхідні
дії (зберегти на диск, запустити і т.д.).
Для того, щоб распаковщик знав, що робити з даними, вони повинні бути якось структуровані.
Ми пишемо найпростіший Джойнер, тому з заголовком мудрувати не будемо. Все зробимо по мінімуму.
Що нам треба? Файл, довжина імені файлу, розмір даних, і, припустимо, параметри командного рядка
і її довжина. Схематично, це можна зобразити так:

Але як распаковщик дізнається, де він закінчується, а де починаються дані? Дуже просто. В самому
розпаковують ми створимо константу і назвемо її, наприклад, ldr_size. Їй дамо значення,
рівне розміру Розпакувальник.
Звідки ми дізнаємося розмір Розпакувальник? Найпростіший спосіб:

1. Збираємо наш лоадер;
2. дивимося його розмір;
3. присвоюємо ldr_size розмір;
4. збирати заново.

Таким чином, принцип роботи нашого лоадера наступний:
а) відкриваємо себе для читання;
б) зміщується на ldr_size байт;
в) обробляємо заголовок;
г) обробляємо дані (створюємо (прихований) і запускаємо файл);
д) зчитуємо наступний заголовок;
е) якщо його немає, то виходимо, інакше пункт в).


III. НАПИСАНИЕ лоадером.

У наступній частині я покажу, як написати найпростіший билдер до нашого лоадером і отримати повноцінний Склеювач файлів.
А поки, в якості домашнього завдання, спробуйте зробити билдер самі.
Також, файли легко склеїти руками. Нам відомий заголовок. Залишається його заповнити. Покажу на простому прикладі.
Є файл fasmw.exe. Необхідно прикріпити його до лоадером, щоб той запустив його з параметрами "hello.asm".

Отже:
- ім'я файлу: fasmw.exe (9 байт + 0 в кінці, разом 10 або ж 0Ah)
- командний рядок: hello.asm (теж 9 байт + 0 в кінці, разом 0Ah).
- розмір fasmw.exe: 122 880 байт (0001E000h)

Тобто заголовок у нас буде такий:

Усе! Тепер ви в початок fasm.exe запишемо заголовок і сміливо весь файл пріпішем в кінець нашому лоадером.

Просто порівняйте два файли fasmw.exe до і після додавання заголовка для нашого лоадера.

файл fasmw.exe ДО обробки:


А тепер файл fasmw.exe ПІСЛЯ обробки:

Ось ми і написали найпростіший лоадер для самого простого Джойнер. Розібрали, як можна їм користуватися, навіть
без білдера.

Я прошу новачків, що читають цю статтю, спробуйте в усьому розібратися, щоб було зрозуміло все, до останнього байта.

Не питайте, шукайте відповіді _самі_.

Тоді і тільки тоді ви легко зможете зробити Джойнер більш наворочений, додати свій функціонал.


II. ЩО ТАКЕ билдер І ЯК ВІН ПРАЦЮЄ?

Білдер, в нашому випадку, це програма, яка на вході отримує файли, а на виході - один ехе-файл, при запуску
якого запустяться всі файли, що були дані билдер. Так-так, це той самий звичайний GUI інтерфейс, з кнопками типу
"Додати файл", "Склеїти файли" і т.п.
Робота білдера проста:
1. Відкриваємо лоадер (див 1-у частину);
2. Відкриваємо файл зі списку;
3. Записуємо першого файлу заголовок (8 байт) + параметри і ім'я;
4. Пишемо цей файл в кінець лоадера.
5. Якщо відкрили всі файли, то вийдемо, інакше пункт 2.

Ми трохи модифікуємо лоадер з першої частини, додамо йому ресурси (іконку). Це для того, щоб її можна було міняти.

Дивіться, вивчайте. Простіше придумати складно. Складніше придумати легко. У цій статті, в двох її частинах, ми розглянули, як
написати простий, але повноцінний Джойнер будь-якої кількості файлів. Якщо у вас будуть питання, я постараюся на них відповісти.
Тільки, будь ласка, перш, ніж запитати - пошукайте ВІДПОВІДЬ САМОСТІЙНО!