Board.KolibriOS.org
http://board.kolibrios.org/

Длина командной строки и пути к файлу при запуске
http://board.kolibrios.org/viewtopic.php?f=1&t=2297
Page 2 of 5

Author:  Mario_r4 [ Sun Jul 21, 2013 7:43 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

К черту 256 байт! Для нового заголовка нужно делать полностью динамическое выделение и не важно что там в заголовке прописал программист.

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

Author:  Mario_r4 [ Thu Oct 03, 2013 1:20 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

Serge wrote:
Я так и сделаю, расширю "MENUET02" заголовок, или будет новый "KOLIBRI", совместимый с i386ABI.

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

Author:  Serge [ Thu Oct 03, 2013 2:52 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

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

Author:  Mario_r4 [ Thu Oct 03, 2013 8:53 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

Ты, кроме названий указателей, разместил бы еще краткое описание каждого, тогда было бы что обсуждать. :)
Пока у меня предложение только по заголовку поменять Menuet на Kolibri, а то мало ли чего Вилли мог там придумать с именем MenuetNN.

Author:  SoUrcerer [ Thu Oct 03, 2013 8:55 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

Люди, а может все же PE/ELF?

Author:  Mario_r4 [ Thu Oct 03, 2013 8:58 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

SoUrcerer wrote:
Люди, а может все же PE/ELF?

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

Author:  Serge [ Thu Oct 03, 2013 11:47 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

Вот такой пример для наглядности
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

Author:  art_zh [ Fri Oct 04, 2013 12:37 am ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

Serge
Правильная тема.
//TBD: зарезервируй поле для указателя пользовательской очереди GUI-запросов.
(вовсе незачем гонять int40 для вывода каждой строчки).

Author:  SoUrcerer [ Fri Oct 04, 2013 11:50 am ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.
Serge, я не эксперт, но мне нравится :)

Author:  Mario_r4 [ Fri Oct 04, 2013 12:22 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

SoUrcerer wrote:
Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.

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

Author:  0CodErr [ Fri Oct 04, 2013 12:24 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

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

Author:  Serge [ Fri Oct 04, 2013 12:46 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

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

Author:  Serge [ Fri Oct 04, 2013 1:20 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

Продолжение. TLS

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

Author:  Leency [ Fri Oct 04, 2013 1:31 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

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

Author:  SoUrcerer [ Fri Oct 04, 2013 1:38 pm ]
Post subject:  Re: Длина командной строки и пути к файлу при запуске

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

Page 2 of 5 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/