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

Internal structure and you change requests/suggestions
  • Serge wrote:Я так и сделаю, расширю "MENUET02" заголовок, или будет новый "KOLIBRI", совместимый с i386ABI.
    Я так понимаю это как с буфером обмена?
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • 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
    
  • Ты, кроме названий указателей, разместил бы еще краткое описание каждого, тогда было бы что обсуждать. :)
    Пока у меня предложение только по заголовку поменять Menuet на Kolibri, а то мало ли чего Вилли мог там придумать с именем MenuetNN.
    Last edited by Mario_r4 on Thu Oct 03, 2013 8:56 pm, edited 2 times in total.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Люди, а может все же PE/ELF?
  • SoUrcerer wrote:Люди, а может все же PE/ELF?
    А зачем мне в моем бинарнике избыточные поля? Чтобы Avira и остальные антивирусы с дуру объявили все приложения Колибри страшными вирусами, потому что мы не заполнили поля как надо и используем LZMA сжатие как у вирусов? Не, нам такого щастя не надь!
    Всем чмоки в этом проекте! Засуньте эти 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
    ABI //TBD
    Last edited by Serge on Fri Oct 04, 2013 1:10 pm, edited 4 times in total.
  • Serge
    Правильная тема.
    //TBD: зарезервируй поле для указателя пользовательской очереди GUI-запросов.
    (вовсе незачем гонять int40 для вывода каждой строчки).
  • Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.
    Serge, я не эксперт, но мне нравится :)
  • SoUrcerer wrote:Mario, плюс PE/ELF в том, что не нужно будет мудрить с компиляторами и линковщиками же.
    Минус PE/ELF в том что разработчики вирусов их тоже любят, ценят и уважают. А разработчики антивирусов не уважают и не ценят.
    Тебе мало уже существующих проблем с EXE файлами включаемыми в дистрибутив?
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • SoUrcerer, что там мудрить? Написал один раз скрипт — и пользуйся им хоть вечно. А вот какие плюсы этих форматов именно в KolibriOS?
    Mario_r4 wrote:А зачем мне в моем бинарнике избыточные поля?
    Абсолютно согласен, что не зачем. И даже если на размер файла на диске они не сильно повлияют(потому что есть KPack), то при загрузке в память они будут занимать лишнее место.
  • DLL удобней стандартную грузить. А для приложений достаточно секции импорта. Для фасм она генерируется макросами, для ld добавляется скриптами линковщика. Когда-то давно я с diamond'ом спорил на эту тему, а всё оказалось намного проще. Правда пролетают другие компиляторы, если их объектники не сможет слинковать ld. Скорее всего MSVC.
  • Продолжение. TLS

    Однопоточные приложения могут использовать библиотеки, которые будут создавать дополнительные потоки. Поэтому TLS предлагается создавать всегда, независимо от числа потоков в программе.
    • fs:0 хранит id текущего потока
    • fs:4 зарезервирован для id процесса/адресного пространства
    • fs:8 нижняя граница стека потока
    • fs:12 верхняя граница стека потока
    • fs:16-1020 доступны приложениям
  • Serge wrote:Правда пролетают другие компиляторы, если их объектники не сможет слинковать ld. Скорее всего MSVC.
    Нужны будут костыли вроде pe2kos.exe? Или его использование стаёт крайне проблематицным в принципе?
    Из хаоса в космос
  • Я так понимаю, что динамическая линковка будет большой проблемой для MSVC.
  • Who is online

    Users browsing this forum: No registered users and 9 guests