К черту 256 байт! Для нового заголовка нужно делать полностью динамическое выделение и не важно что там в заголовке прописал программист.
З.Ы. Да, и к черту заголовок "MENUET02" - мы уже давно строим свой лунапарк! Так что "KOLIBRI" и только так.
Длина командной строки и пути к файлу при запуске
-
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Я так понимаю это как с буфером обмена?Serge wrote:Я так и сделаю, расширю "MENUET02" заголовок, или будет новый "KOLIBRI", совместимый с i386ABI.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Mario_r4
Если делать новый заголовок, надо формат обсудить.
Я сейчас такой использую с линковкой dll
Если делать новый заголовок, надо формат обсудить.
Я сейчас такой использую с линковкой 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
Ты, кроме названий указателей, разместил бы еще краткое описание каждого, тогда было бы что обсуждать.
Пока у меня предложение только по заголовку поменять Menuet на Kolibri, а то мало ли чего Вилли мог там придумать с именем MenuetNN.
Пока у меня предложение только по заголовку поменять Menuet на Kolibri, а то мало ли чего Вилли мог там придумать с именем MenuetNN.
Last edited by Mario_r4 on Thu Oct 03, 2013 8:56 pm, edited 2 times in total.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Люди, а может все же PE/ELF?
А зачем мне в моем бинарнике избыточные поля? Чтобы Avira и остальные антивирусы с дуру объявили все приложения Колибри страшными вирусами, потому что мы не заполнили поля как надо и используем LZMA сжатие как у вирусов? Не, нам такого щастя не надь!SoUrcerer wrote:Люди, а может все же PE/ELF?
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Вот такой пример для наглядности
Основные отличия от использующихся заголовков:
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
Last edited by Serge on Fri Oct 04, 2013 1:10 pm, edited 4 times in total.
Serge
Правильная тема.
//TBD: зарезервируй поле для указателя пользовательской очереди GUI-запросов.
(вовсе незачем гонять int40 для вывода каждой строчки).
Правильная тема.
//TBD: зарезервируй поле для указателя пользовательской очереди GUI-запросов.
(вовсе незачем гонять int40 для вывода каждой строчки).
Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.
Serge, я не эксперт, но мне нравится
Serge, я не эксперт, но мне нравится
Минус PE/ELF в том что разработчики вирусов их тоже любят, ценят и уважают. А разработчики антивирусов не уважают и не ценят.SoUrcerer wrote:Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.
Тебе мало уже существующих проблем с EXE файлами включаемыми в дистрибутив?
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
SoUrcerer, что там мудрить? Написал один раз скрипт — и пользуйся им хоть вечно. А вот какие плюсы этих форматов именно в KolibriOS?
Абсолютно согласен, что не зачем. И даже если на размер файла на диске они не сильно повлияют(потому что есть KPack), то при загрузке в память они будут занимать лишнее место.Mario_r4 wrote:А зачем мне в моем бинарнике избыточные поля?
DLL удобней стандартную грузить. А для приложений достаточно секции импорта. Для фасм она генерируется макросами, для ld добавляется скриптами линковщика. Когда-то давно я с diamond'ом спорил на эту тему, а всё оказалось намного проще. Правда пролетают другие компиляторы, если их объектники не сможет слинковать ld. Скорее всего MSVC.
Продолжение. TLS
Однопоточные приложения могут использовать библиотеки, которые будут создавать дополнительные потоки. Поэтому TLS предлагается создавать всегда, независимо от числа потоков в программе.
Однопоточные приложения могут использовать библиотеки, которые будут создавать дополнительные потоки. Поэтому TLS предлагается создавать всегда, независимо от числа потоков в программе.
- fs:0 хранит id текущего потока
- fs:4 зарезервирован для id процесса/адресного пространства
- fs:8 нижняя граница стека потока
- fs:12 верхняя граница стека потока
- fs:16-1020 доступны приложениям
Нужны будут костыли вроде pe2kos.exe? Или его использование стаёт крайне проблематицным в принципе?Serge wrote:Правда пролетают другие компиляторы, если их объектники не сможет слинковать ld. Скорее всего MSVC.
Из хаоса в космос
Я так понимаю, что динамическая линковка будет большой проблемой для MSVC.
Who is online
Users browsing this forum: No registered users and 14 guests