Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб апр 29, 2017 10:33 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 70 сообщений ]  На страницу Пред. 1 2 3 4 5 След.
Автор Сообщение
СообщениеДобавлено: Вс июл 21, 2013 7:43 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
К черту 256 байт! Для нового заголовка нужно делать полностью динамическое выделение и не важно что там в заголовке прописал программист.

З.Ы. Да, и к черту заголовок "MENUET02" - мы уже давно строим свой лунапарк! Так что "KOLIBRI" и только так.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Чт окт 03, 2013 1:20 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Serge писал(а):
Я так и сделаю, расширю "MENUET02" заголовок, или будет новый "KOLIBRI", совместимый с i386ABI.

Я так понимаю это как с буфером обмена?

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Чт окт 03, 2013 2:52 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Mario_r4
Если делать новый заголовок, надо формат обсудить.
Я сейчас такой использую с линковкой dll
Код:
  db 'MENUET02'
  dd 0x01
  dd __start
  dd __iend
  dd __bssend
  dd __stack
  dd __cmdline
  dd __pgmname
  dd 0x0; tls map
  dd __idata_start; секция .import
  dd __idata_end
  dd main


Вернуться к началу
СообщениеДобавлено: Чт окт 03, 2013 8:53 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Ты, кроме названий указателей, разместил бы еще краткое описание каждого, тогда было бы что обсуждать. :)
Пока у меня предложение только по заголовку поменять Menuet на Kolibri, а то мало ли чего Вилли мог там придумать с именем MenuetNN.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Последний раз редактировалось Mario_r4 Чт окт 03, 2013 8:56 pm, всего редактировалось 2 раза.

Вернуться к началу
СообщениеДобавлено: Чт окт 03, 2013 8:55 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Люди, а может все же PE/ELF?


Вернуться к началу
СообщениеДобавлено: Чт окт 03, 2013 8:58 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
SoUrcerer писал(а):
Люди, а может все же PE/ELF?

А зачем мне в моем бинарнике избыточные поля? Чтобы Avira и остальные антивирусы с дуру объявили все приложения Колибри страшными вирусами, потому что мы не заполнили поля как надо и используем LZMA сжатие как у вирусов? Не, нам такого щастя не надь!

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Чт окт 03, 2013 11:47 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Вот такой пример для наглядности
Код:
STACK_SIZE  equ 4096
include 'proc32.inc'
org 0

    db 'KOLIBRI',0     ;+00 banner + revision 0-255
    dd start           ;+08 application entry
    dd ecode           ;+12 end of code and constant data
    dd import          ;+16 import section, if present
    dd eimport         ;+20 end of import section
    dd edata           ;+24 end of initialized data, end of disk image
    dd emem            ;+28 end of uninitialized data
    dd STACKSIZE       ;+32 size of stack
    dd 0               ;+36 address of tls info structure kernel-defined
    dd 0               ;+38 exec_path  kernel-defined
    dd 0               ;+40 cmdline    kernel-defined
    dd 0               ;+44 env        kernel-defined

exec_path  equ 38
.code:
start:
    ...
    ...

align 8
main:
    cinvoke _printf, msg_hello, [exec_path]
    xor eax, eax
    ret

msg_hello db '%s: Hello world!',0x0D,0x0A,0
ecode:

align 16
import:
  library libc,'libc.dll'
include 'libc.inc'
eimport:

;place initialized data here
align 16
.data:
   ...
   ...
edata:

;place unitialized data here
align 16
.bss:
   ...
   ...
emem:
ailign 16
tlsinfo rd 1        ;tls mutex  kernel-defined
tls_map rb 128  ;kernel-defined
       

Основные отличия от использующихся заголовков:
  • Вместо значения esp приложение указывает необходимый размер стека.
  • ядро размещает в стеке полный путь к приложению, командную строку и переменные окружения и устанавливает указатели в заголовке
  • структура tlsinfo необходима для синхронизации доступа к tls в многопоточных приложениях.
    многопоточные (thread safe) dll не должны работать в приложениях без tlsinfo
ABI //TBD


Последний раз редактировалось Serge Пт окт 04, 2013 1:10 pm, всего редактировалось 4 раза.

Вернуться к началу
СообщениеДобавлено: Пт окт 04, 2013 12:37 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Serge
Правильная тема.
//TBD: зарезервируй поле для указателя пользовательской очереди GUI-запросов.
(вовсе незачем гонять int40 для вывода каждой строчки).


Вернуться к началу
СообщениеДобавлено: Пт окт 04, 2013 11:50 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.
Serge, я не эксперт, но мне нравится :)


Вернуться к началу
СообщениеДобавлено: Пт окт 04, 2013 12:22 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
SoUrcerer писал(а):
Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.

Минус PE/ELF в том что разработчики вирусов их тоже любят, ценят и уважают. А разработчики антивирусов не уважают и не ценят.
Тебе мало уже существующих проблем с EXE файлами включаемыми в дистрибутив?

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Пт окт 04, 2013 12:24 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 910
SoUrcerer, что там мудрить? Написал один раз скрипт — и пользуйся им хоть вечно. А вот какие плюсы этих форматов именно в KolibriOS?
Mario_r4 писал(а):
А зачем мне в моем бинарнике избыточные поля?
Абсолютно согласен, что не зачем. И даже если на размер файла на диске они не сильно повлияют(потому что есть KPack), то при загрузке в память они будут занимать лишнее место.


Вернуться к началу
СообщениеДобавлено: Пт окт 04, 2013 12:46 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
DLL удобней стандартную грузить. А для приложений достаточно секции импорта. Для фасм она генерируется макросами, для ld добавляется скриптами линковщика. Когда-то давно я с diamond'ом спорил на эту тему, а всё оказалось намного проще. Правда пролетают другие компиляторы, если их объектники не сможет слинковать ld. Скорее всего MSVC.


Вернуться к началу
СообщениеДобавлено: Пт окт 04, 2013 1:20 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Продолжение. TLS

Однопоточные приложения могут использовать библиотеки, которые будут создавать дополнительные потоки. Поэтому TLS предлагается создавать всегда, независимо от числа потоков в программе.
  • fs:0 хранит id текущего потока
  • fs:4 зарезервирован для id процесса/адресного пространства
  • fs:8 нижняя граница стека потока
  • fs:12 верхняя граница стека потока
  • fs:16-1020 доступны приложениям


Вернуться к началу
СообщениеДобавлено: Пт окт 04, 2013 1:31 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4080
Serge писал(а):
Правда пролетают другие компиляторы, если их объектники не сможет слинковать ld. Скорее всего MSVC.
Нужны будут костыли вроде pe2kos.exe? Или его использование стаёт крайне проблематицным в принципе?

_________________
Через тернии к звездам


Вернуться к началу
СообщениеДобавлено: Пт окт 04, 2013 1:38 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Я так понимаю, что динамическая линковка будет большой проблемой для MSVC.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 70 сообщений ]  На страницу Пред. 1 2 3 4 5 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB