Решил извратиться: начал писать web-сервер на ада+ассемблер

Тема в разделе "WASM.HEAP", создана пользователем device, 20 сен 2007.

  1. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Все в учебных целях.

    Просто если здесь есть знатоки, то предложите ваши варианты или улучшения.

    Начал я так (по ходу выполнения буду публиковать продолжение текста)

    Код (Text):
    1. -   with Ada.Text_IO;  use Ada.Text_IO;
    2.     with GNAT.Sockets; use GNAT.Sockets;
    3.     with Interfaces;
    4.     with System.Machine_Code; use System.Machine_Code;
    5.     with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
    6.     with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
    7.     procedure webserver is
    8.     Group: Constant String:="192.168.0.255";
    9.     task wserver is
    10.     entry   start (aport: IN INTEGER);
    11.     entry   stop;
    12.     end wserver;
    13.     task body wserver is
    14.     --Объявляем параметры сервера
    15.     Address  : Sock_Addr_Type;
    16.     Server   : Socket_Type;
    17.     Socket   : Socket_Type;
    18.     Channel  : Stream_Access;
    19.     ccv:integer;
    20.     begin
    21.     Address.Addr := Addresses (Get_Host_By_Name (Host_Name), 1);
    22.     EAX:Interfaces.UNSIGNED_32;
    23.     accept start (aPORT: in INTEGER) do
    24.         Address.Port := 10005;
    25.         ccv:=aPORT;
    26.         end start;
    27.     accept stop;
    28.     end wserver;
    29.     procedure startserver is
    30.     begin
    31.     asm (   ".startserver:"&LF&HT&  --Основная точка входа
    32.         "call ada__integer_text_io__get__2"&LF&HT& --Вызываем чтение с консоли
    33.         "addl $16, %%esp"&LF&HT& --Нормализуем стек
    34.         "movl %%eax, %0", --сохраняем номер порта в EAX
    35.         Outputs=>Interfaces.Unsigned_32'ASM_OUTPUT("=g",EAX)
    36.         -- Сохраняемся
    37.         );
    38.     asm (   LF&HT&
    39.         "leal -12(%%ebp), %%eax"&LF&HT&  -- Где вход?
    40.         "movl %%eax, -16(%%ebp)"&LF&HT&
    41.         "movl $100, -12(%%ebp)"
    42.         ); 
    43.     end startserver;
    44.     EAX:INTERFACES.UNSIGNED_32;
    45.     begin
    46.     asm(    LF &HT &
    47.         "jmp .startserver");
    48.     --ПУСК СЕРВЕРА - Просто прыжок (jmp) к основной точке входа
    49.     end webserver;
     
  2. Постигающий

    Постигающий New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2006
    Сообщения:
    35
    Я вот смотрю, у тебя каждые два дня новый проект, а что-то из этого до конца доведено? = )
     
  3. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Рабочие и доводимые до конца проекты пишутся вне форума.
    Здесь - ради изучения.

    Готовый сервер тут:




    Почему в этом месте возникает ошибка сегментирования?
    Код (Text):
    1. asm (".mssg:");
    2.            Address := Get_Address (Channel);
    3.  
    4.  
    5. asm (LF&HT&
    6.     "call gnat__sockets__image__3 "&LF&HT&
    7.     "movl %%esi, %%eax"&LF&HT&
    8.     "movl %%eax, %1"&LF&HT&
    9.     "jmp  .pch"
    10.     );
    11.     goto DNOTH;
    12. <<PCH>>
    13. asm (".pch:");
    14.     String'Output (Channel, MSC);
    15. <<DNOTH>>
    16. asm (".dn:");
    17. null;
     
  4. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    device
    а что за компиль Ада юзаешь ??(забавно надпись выглядит:)))
     
  5. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    UbIvItS
    GNu Ada Translator, или просто GNAT
    Где?

    P.S: Про ошибку сегментирования.
    Спалил вчера NIC на резервном контроллере домена предприятия (там код запускал) :)
     
  6. nerezus

    nerezus New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    89
    Надо будет в целях эксперимента повторить эту глупость и написать в виде функции БД сайт )
    SELECT SITE(%s) as HtmlContent;
    где %s - запрос GET(к примеру).
     
  7. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    nerezus
    GNAT.CGI?
     
  8. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    device
    вот это:)
     
  9. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    UbIvItS
    GNAT не видел?
     
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    device
    я vs юзаю и имею дело с с++, c#, vb.net и пхп нравится ещё - ада, паскаль, делфи не юзаю; хотя, если надо будет- возьмусь и за них:)