cgi на ассемблере в unix

Тема в разделе "WASM.BEGINNERS", создана пользователем stellaco, 16 дек 2008.

  1. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    Правильнее ставь вопросы. Ты хочешь сделать СУБД. А пишешь БД. Вот и отвечают не то что надо.
    При разработке СУБД затрагивается очень много тем из разных областей.
    Можешь начинать с интерпретатора команд. Тебе надолго хватит ))

    P.S. Только не говори, что на асме писать собрался ))
     
  2. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    =)))


    ВСЁ принялось))))
    ура))

    вот тестовый код).. все данные записались в файл, надо было только, права на доступ открыть chmod a+rwx
    Код (Text):
    1. ;Секция не инициалезированных данных BSS
    2. section .bss
    3. http_login_param_buf resb 65536 ; зарезервировать память в 65536 байт
    4. fd resd 1 ; резервируем 8 байт для возвращаемого дескриптора функции open
    5.  
    6. section .date
    7. path_file db 'test.txt',0
    8. global _start
    9. _start:
    10.  
    11. ;Системный вызов #3 read:
    12. mov eax, 3 ; syscall read
    13. mov ebx, 0 ; STD_IN
    14. mov ecx, http_login_param_buf ; адрес буфера для приёма параметров
    15. mov edx, 65536 ; длинна записываемых данных в байтах
    16. int 0x80 ; Обратится к ядру для возбуждения системного вызова
    17.  
    18. ;системный вызов open
    19. mov eax,5 ; syscall open
    20. mov ebx,path_file
    21. mov ecx,0001002
    22. mov edx,7666
    23. int 0x80
    24. mov [fd],eax ; записываем в fd номер возвращённого дескриптора функции open
    25.  
    26. ; write
    27. mov eax,4
    28. mov ebx,[fd] ; сохраняем в дескриптор открытого файла
    29. mov ecx,http_login_param_buf
    30. mov edx,65536
    31. int 0x80
    32.  
    33. ; close
    34.  
    35.  
    36. mov eax,6
    37. mov ebx,[fd]
    38. int 0x80
    39.  
    40. mov eax, 1 ; syscall exit
    41. xor ebx,ebx ; поместить 0 в ebx
    42. int 0x80 ; Обратится к ядру для возбуждения системного вызова
    Теперь остался второй вопрос)..как из ассама подключиться к БД ?
     
  3. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    Ээ, ODBC кури думаю... (на кой это ваще надо...)

    Если под винду, на этом сайте есть примеры с ODBC.
     
  4. prog

    prog New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2003
    Сообщения:
    62
    Адрес:
    Russia
    К сожалению, нет.
    Но наверняка такая литература есть.
    Если работал с СУБД, то все намного проще- уже знаешь что для чего и как работает.
    Тогда остается только написаьб все то же самое в своем видении и для конкретно своей задачи.

    Я думаю, очень много людей с этого форума написали для своих задач СУБД на асм, в этом нет ничего особого.
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Ну да, БД на асме, что может быть проще ....
     
  6. prog

    prog New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2003
    Сообщения:
    62
    Адрес:
    Russia
    Не просто, но реально.
    При чем- чем меньше требований к быстродействию + чем меньше макс. кол-во ожидаемых записей в проекте + отсутствие возможности работы по сети + не многопользовательская, тем проще.
     
  7. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    В продолжении темы POST.
    Вот что записалось в файл test.txt
    login=stellaco&password=123&button=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C
    И собственно сам вопрос, что это за button такой, и чему он равен??? button=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C



    perez
    Всё делается под *nix . И мне хотелось бы избежать взаимодействия с ODBC. Пойду искать книги по проектированию СУБД. Может какие-то идеи появятся...
     
  8. prog

    prog New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2003
    Сообщения:
    62
    Адрес:
    Russia
    У тебя в форме есть объект button, value='Отправить'
    Вот это value и передается.

    urldecode(%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C) == 'Отправить'

    Если бы написал <input type=button value='send'>, то принялось бы
    login=stellaco&password=123&button=send
     
  9. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    prog
    Огромное спасибо за разъяснение.
     
  10. prog

    prog New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2003
    Сообщения:
    62
    Адрес:
    Russia
    Это самые азы(что за слово такое) html.
    С этими вопросами лучше обращаться в соответсвующий форум.
     
  11. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    И последний вопрос, не в тему.
    есть у кого такая книжка? "Локальная СУБД своими руками" в электронном варианте?
     
  12. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    stellaco
    На сайте INTUIT

    Там есть алгебра Кодда - с нее начни. Реляционная модель организации данных.
    Поучись пока записывать и читать структуры данных в файл и из него
    На Асме не надо odbc. Ты ODBC не настроишь:)
    Юзай libmysql, там есть все функции.
     
  13. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Да и еще тебе в догонку:
    Если че не понятно на асме - бери любую прогу на си и переводи ее на асм. ( gcc -s)
    Там год не очень путанный вылазит, понять и разобраться можно.
     
  14. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Ещё одна проблема.
    Разбор присланных данных.

    вот код
    Код (Text):
    1. ;Секция не инициалезированных данных BSS
    2. section .bss
    3. http_login_param_buf resb 65536 ; зарезервировать память в 65536 байт
    4. fd resd 1 ; резервируем 8 байт для возвращаемого дескриптора функции open
    5. http_login_buf resb 100 ; зарезервировать память в 100 байт для логина переданного через форму.
    6.  
    7. section .date
    8. http_login_string db "login=" ; строка login= передаваемая от клиента серверу
    9. path_file db 'test.txt',0
    10.  
    11. global _start
    12. _start:
    13.  
    14. ;Системный вызов #3 read:
    15. mov eax, 3 ; syscall read
    16. mov ebx, 0 ; STD_IN
    17. mov ecx, http_login_param_buf ; адрес буфера для приёма параметров
    18. mov edx, 65536 ; длинна записываемых данных в байтах
    19. int 0x80 ; Обратится к ядру для возбуждения системного вызова
    20.  
    21. ;сканирование логина
    22. cld ; автоинкремент
    23. mov edi, http_login_param_buf
    24. mov esi, http_login_string
    25. mov ecx,6 ; сколько первых символов строк нужно сравнить  (адресуемые регистрами ESI и EDI)
    26. cmpsb  ; сравниваем две строки, адресуемые регистрами ESI и EDI
    27. jnz exit ; проверяем флаг нуля, если не ноль, то строки не совпали и прыгаем на incorrect
    28. mov eax, "&" ; что будем искать
    29. mov ecx, 65530 ; записать в счётчик 65530 (размер сканируемой строки)
    30. repne scasb ; поиск & в массиве из 65530 байт
    31. jcxz exit ; переход на метку  incorrect , если не нашли
    32. mov edx, 65530 ;
    33. sub edx, ecx ; в edx размер логина в байтах
    34. cmp edx, 100 ; узнаём, хватит  ли места в BSS для логина (http_login_buf)
    35. jg exit ; если больше , (не хватит места в BSS для переданного логина) то incorrect
    36. mov esi, [http_login_param_buf+6] ; логин начинается тут
    37. mov edi, http_login_buf ; в edi адресс куда будем копировать логин
    38. mov ecx, edx ; счётчик равен колличеству символов в логине
    39. rep movsb ; повторить ecx раз, копирование [http_login_param_buf+6] в http_login_buf
    40. ;окончание сканирования логина
    41.  
    42. ;системный вызов open
    43. mov eax,5 ; syscall open
    44. mov ebx,path_file
    45. mov ecx,0001002
    46. mov edx,7666
    47. int 0x80
    48. mov [fd],eax ; записываем в fd номер возвращённого дескриптора функции open
    49.  
    50. ; write
    51. mov eax,4
    52. mov ebx,[fd] ; сохраняем в дескриптор открытого файла
    53. mov ecx, http_login_buf ; записываем логин
    54. ;mov edx,65536  ; длинна логина в http_login_buf
    55. int 0x80
    56.  
    57. ; close
    58. mov eax,6
    59. mov ebx,[fd]
    60. int 0x80
    61.  
    62. exit:
    63. mov eax, 1 ; syscall exit
    64. xor ebx,ebx ; поместить 0 в ebx
    65. int 0x80 ; Обратится к ядру для возбуждения системного вызова
    Ошибка кроется(как я понимаю) в участке "сканирование логина"
    Если передать из формы данные такому коду, то в /var/www/cgi-bin появляется файл core.N , где N всегда различное четырёхзначное число. Кстати если его открыть , то можно вполне сносно разглядеть переменные окружения сервера Apache...

    Подскажите пожалуйста..в чем ошибка?
     
  15. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    ошибка найдена
     
  16. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    Поковыряй исходники SQLITE. Маловесная и мощная бд. На чистом си.
     
  17. TheBits

    TheBits Сергей

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    50
    Адрес:
    St.Petersburg
    «Введение в систему баз данных» — Джеффри Ульман, Дженнифер Уидом. Книга просто про базы данные с некоторым углублением принципов и методов компонентов баз данных.

    MySQL так же отклоняется от SQL как и SQL Server, Oracle или Postgre. Разница в спец. конструкциях.