OSDev
http://osdev.ru/

Исполняемые файлы
http://osdev.ru/viewtopic.php?f=4&t=90
Страница 1 из 2

Автор:  phantom-84 [ 16 июл 2007, 22:24 ]
Заголовок сообщения:  Исполняемые файлы

Написал manual по формату исполняемых файлов, который я использую.

P.S. Обсуждение других форматов тоже приветствуется :)

Автор:  orl [ 16 июл 2007, 22:39 ]
Заголовок сообщения:  Re: Исполняемые файлы

Ух ты ;) А зачем тебе свой формат? Чем стандартные не устраивают? ;)
Цитата:
P.S. Обсуждение других форматов тоже приветствуется :)

Вот вам код загрузки ELF-файла:
Код:
u32_t TProcess::LoadELF(register void *image)
{
  u32_t *object;
  Elf32_Phdr *p;
  Elf32_Ehdr *h = (Elf32_Ehdr *) image; /* образ ELF */
  Elf32_Phdr *ph = (Elf32_Phdr *) ((u32_t) h + (u32_t) h->e_phoff);

  /*
    Если секция обозначена как загружаемая - выделим для неё память,
    скопируем из файла данные и смонтируем в адресное пространство процесса
   */
  for (p = ph; p < ph + h->e_phnum; p++){
    if (p->p_type == ELF32_TYPE_LOAD && p->p_memsz) {
      if (p->p_filesz > p->p_memsz)
 hal->panic("Invalid section!");

      /*
      Выделим память под секцию
      Учтём, что начало секции может быть не выровнено по началу страницы
       */
      object = (u32_t *) kmalloc(p->p_memsz + (p->p_vaddr % PAGE_SIZE));

      if (p->p_filesz > 0) {
   memcpy((u32_t *) ((u32_t)object + (p->p_vaddr % PAGE_SIZE)), (u32_t *) ((u32_t) image + p->p_offset), p->p_filesz);
      }

      /* Монтируем секцию в адресное пространство процесса */
      memory->kmmap(object, (u32_t *) (p->p_vaddr & 0xfffff000), p->p_memsz + (p->p_vaddr % PAGE_SIZE));
      kfree(object); /* освобождаем память ядра от ненужных тут страниц */
    }
  }
  /* Возвращаем указатель на точку входа */
  return h->e_entry;
}

Вроде как, предельно просто и понятно ;)

Автор:  phantom-84 [ 16 июл 2007, 22:53 ]
Заголовок сообщения:  Re: Исполняемые файлы

legos, это очень простой и эффективный формат - все драйверы и приложения для моей оси на сегодняшний день записаны именно в этом формате. Однако я планирую ввести в свою систему и поддержку ELF - он мне тоже нравится. Отчасти данная тема посвящена и этому вопросу.

Автор:  orl [ 16 июл 2007, 23:34 ]
Заголовок сообщения:  Re: Исполняемые файлы

Phantom-84, понятно ;)

Ждём выхода системы ;) Когда хоть это будет?

Автор:  phantom-84 [ 16 июл 2007, 23:50 ]
Заголовок сообщения:  Re: Исполняемые файлы

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

Автор:  orl [ 17 июл 2007, 00:03 ]
Заголовок сообщения:  Re: Исполняемые файлы

Phantom-84, я думаю, выкладывать стоит в первую очередь, может кому пригодится.

Автор:  semiono [ 17 июл 2007, 05:09 ]
Заголовок сообщения:  Re: Исполняемые файлы

DEF v3 рулит! Если Phantom-84 сделает систему - это будет бомба!
Потому-что слишком тщательно всё подготавливается...
Однако б, не сглазить!

MZ конечно видимо отстой, либо геморой. :)
Но мнеб хотелось. Привычка 8-) привязка к софту...

Автор:  phantom-84 [ 17 июл 2007, 17:41 ]
Заголовок сообщения:  Re: Исполняемые файлы

legos, ОК. Вот все необходимое для создания файлов приложений и драйверов в формате DEF v3 на fasm'е...

Исходники образцов и необходимые включаемые файлы: samples-src.rar

Если у кого-то нет последних версий fasm'а для самостоятельной компиляции образцов, можно посмотреть и бинарники образцов: samples-bin.rar

Если у кого-то возникнут вопросы, спрашивайте. По возможности постараюсь ответить на все вопросы.

Автор:  phantom-84 [ 17 июл 2007, 17:43 ]
Заголовок сообщения:  Re: Исполняемые файлы

semiono, спасибо. И хотя я не преследую цель создать бомбу или что-то еще в этом духе, твои слова мне приятны.

Автор:  orl [ 18 июл 2007, 02:03 ]
Заголовок сообщения:  Re: Исполняемые файлы

Phantom-84, спасибо за исходники ;)

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/