Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Jun 26, 2019 8:02 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 70 posts ]  Go to page Previous 1 2 3 4 5 Next
Author Message
PostPosted: Sun Jul 21, 2013 7:43 pm 
Offline
Kernel Developer

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

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

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


Top
   
PostPosted: Thu Oct 03, 2013 1:20 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
Я так и сделаю, расширю "MENUET02" заголовок, или будет новый "KOLIBRI", совместимый с i386ABI.

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

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


Top
   
PostPosted: Thu Oct 03, 2013 2:52 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario_r4
Если делать новый заголовок, надо формат обсудить.
Я сейчас такой использую с линковкой dll
Code:
  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


Top
   
PostPosted: Thu Oct 03, 2013 8:53 pm 
Offline
Kernel Developer

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

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


Last edited by Mario_r4 on Thu Oct 03, 2013 8:56 pm, edited 2 times in total.

Top
   
PostPosted: Thu Oct 03, 2013 8:55 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Люди, а может все же PE/ELF?


Top
   
PostPosted: Thu Oct 03, 2013 8:58 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
SoUrcerer wrote:
Люди, а может все же PE/ELF?

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

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


Top
   
PostPosted: Thu Oct 03, 2013 11:47 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Вот такой пример для наглядности
Code:
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


Last edited by Serge on Fri Oct 04, 2013 1:10 pm, edited 4 times in total.

Top
   
PostPosted: Fri Oct 04, 2013 12:37 am 
Offline
Kernel Developer
User avatar

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


Top
   
PostPosted: Fri Oct 04, 2013 11:50 am 
Offline

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


Top
   
PostPosted: Fri Oct 04, 2013 12:22 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
SoUrcerer wrote:
Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.

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

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


Top
   
PostPosted: Fri Oct 04, 2013 12:24 pm 
Offline

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


Top
   
PostPosted: Fri Oct 04, 2013 12:46 pm 
Offline
Kernel Developer

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


Top
   
PostPosted: Fri Oct 04, 2013 1:20 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Продолжение. TLS

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


Top
   
PostPosted: Fri Oct 04, 2013 1:31 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5053
Serge wrote:
Правда пролетают другие компиляторы, если их объектники не сможет слинковать ld. Скорее всего MSVC.
Нужны будут костыли вроде pe2kos.exe? Или его использование стаёт крайне проблематицным в принципе?

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


Top
   
PostPosted: Fri Oct 04, 2013 1:38 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Я так понимаю, что динамическая линковка будет большой проблемой для MSVC.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 70 posts ]  Go to page Previous 1 2 3 4 5 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited