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.