Page 2 of 5

Re: Длина командной строки и пути к файлу при запуске

Posted: Sun Jul 21, 2013 7:43 pm
by Mario_r4
К черту 256 байт! Для нового заголовка нужно делать полностью динамическое выделение и не важно что там в заголовке прописал программист.

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

Re: Длина командной строки и пути к файлу при запуске

Posted: Thu Oct 03, 2013 1:20 pm
by Mario_r4
Serge wrote:Я так и сделаю, расширю "MENUET02" заголовок, или будет новый "KOLIBRI", совместимый с i386ABI.
Я так понимаю это как с буфером обмена?

Re: Длина командной строки и пути к файлу при запуске

Posted: Thu Oct 03, 2013 2:52 pm
by Serge
Mario_r4
Если делать новый заголовок, надо формат обсудить.
Я сейчас такой использую с линковкой dll

Code: Select all

  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

Re: Длина командной строки и пути к файлу при запуске

Posted: Thu Oct 03, 2013 8:53 pm
by Mario_r4
Ты, кроме названий указателей, разместил бы еще краткое описание каждого, тогда было бы что обсуждать. :)
Пока у меня предложение только по заголовку поменять Menuet на Kolibri, а то мало ли чего Вилли мог там придумать с именем MenuetNN.

Re: Длина командной строки и пути к файлу при запуске

Posted: Thu Oct 03, 2013 8:55 pm
by SoUrcerer
Люди, а может все же PE/ELF?

Re: Длина командной строки и пути к файлу при запуске

Posted: Thu Oct 03, 2013 8:58 pm
by Mario_r4
SoUrcerer wrote:Люди, а может все же PE/ELF?
А зачем мне в моем бинарнике избыточные поля? Чтобы Avira и остальные антивирусы с дуру объявили все приложения Колибри страшными вирусами, потому что мы не заполнили поля как надо и используем LZMA сжатие как у вирусов? Не, нам такого щастя не надь!

Re: Длина командной строки и пути к файлу при запуске

Posted: Thu Oct 03, 2013 11:47 pm
by Serge
Вот такой пример для наглядности

Code: Select all

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

Re: Длина командной строки и пути к файлу при запуске

Posted: Fri Oct 04, 2013 12:37 am
by art_zh
Serge
Правильная тема.
//TBD: зарезервируй поле для указателя пользовательской очереди GUI-запросов.
(вовсе незачем гонять int40 для вывода каждой строчки).

Re: Длина командной строки и пути к файлу при запуске

Posted: Fri Oct 04, 2013 11:50 am
by SoUrcerer
Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.
Serge, я не эксперт, но мне нравится :)

Re: Длина командной строки и пути к файлу при запуске

Posted: Fri Oct 04, 2013 12:22 pm
by Mario_r4
SoUrcerer wrote:Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.
Минус PE/ELF в том что разработчики вирусов их тоже любят, ценят и уважают. А разработчики антивирусов не уважают и не ценят.
Тебе мало уже существующих проблем с EXE файлами включаемыми в дистрибутив?

Re: Длина командной строки и пути к файлу при запуске

Posted: Fri Oct 04, 2013 12:24 pm
by 0CodErr
SoUrcerer, что там мудрить? Написал один раз скрипт — и пользуйся им хоть вечно. А вот какие плюсы этих форматов именно в KolibriOS?
Mario_r4 wrote:А зачем мне в моем бинарнике избыточные поля?
Абсолютно согласен, что не зачем. И даже если на размер файла на диске они не сильно повлияют(потому что есть KPack), то при загрузке в память они будут занимать лишнее место.

Re: Длина командной строки и пути к файлу при запуске

Posted: Fri Oct 04, 2013 12:46 pm
by Serge
DLL удобней стандартную грузить. А для приложений достаточно секции импорта. Для фасм она генерируется макросами, для ld добавляется скриптами линковщика. Когда-то давно я с diamond'ом спорил на эту тему, а всё оказалось намного проще. Правда пролетают другие компиляторы, если их объектники не сможет слинковать ld. Скорее всего MSVC.

Re: Длина командной строки и пути к файлу при запуске

Posted: Fri Oct 04, 2013 1:20 pm
by Serge
Продолжение. TLS

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

Re: Длина командной строки и пути к файлу при запуске

Posted: Fri Oct 04, 2013 1:31 pm
by Leency
Serge wrote:Правда пролетают другие компиляторы, если их объектники не сможет слинковать ld. Скорее всего MSVC.
Нужны будут костыли вроде pe2kos.exe? Или его использование стаёт крайне проблематицным в принципе?

Re: Длина командной строки и пути к файлу при запуске

Posted: Fri Oct 04, 2013 1:38 pm
by SoUrcerer
Я так понимаю, что динамическая линковка будет большой проблемой для MSVC.