куча вопросов, интересных и разных

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

  1. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    1) Вопрос.
    Это мой тестовый скрипт, для проверки работы передачи данных по http методом post
    размер буфера всего 5 байт, для простоты теста.
    Код пишется для ОС Linux .
    Компилятор NASM

    Код (Text):
    1. ;Секция не инициалезированных данных BSS
    2. ;Буфер для приёма параметров
    3. section .bss
    4. http_login_param_buf resb 5 ; зарезервировать память в 5 байт для пароля и логина переданных через форму. (команда инициализирует память заполненную нулями)
    5.  
    6.  
    7. section .date
    8.  
    9. global _start
    10. _start:
    11.  
    12. ;Системный вызов #3 read:
    13. mov eax, 3 ; syscall read
    14. mov ebx, 2 ; STD_IN
    15. mov ecx, http_login_param_buf ; адрес буфера для приёма параметров
    16. mov edx, 5 ; длинна записываемых данных в байтах
    17. int 0x80 ; Обратится к ядру для возбуждения системного вызова
    18. cmp eax,0
    19. jg buf
    20. jmp exit
    21. buf:
    22. mov eax, 4 ; syscall write
    23. mov ebx, 1 ; STD_OUT
    24. mov ecx, http_login_param_buf ; адрес полученных данных
    25. mov edx, 5 ; длинна полученных данных в байтах
    26. int 0x80 ; Обратится к ядру для возбуждения системного вызова
    27.  
    28.  
    29. exit: ; test_post.asm Закончил обработку данных
    30. ;Системный вызов #1 exit:
    31. mov eax, 1 ; syscall exit
    32. xor ebx,ebx ; поместить 0 в ebx
    33. int 0x80 ; Обратится к ядру для возбуждения системного вызова
    Так вот ).. как сделать так, чтоб при передаче данных скрипту методом POST из html формы. Скрипт принимал не больше 5 байт?
    И чтоб не было вот такого: 0.o

    [stellaco@localhost]$ nasm -f elf test_post.asm
    [stellaco@localhost]$ ld test_post.o
    [stellaco@localhost]$ ./a.out
    aaaaa6789A
    aaaaa[stellaco@localhost]$ 6789A
    bash: 6789A: command not found
    [stellaco@localhost]$



    Эта тема в разделе # WASM.NETWORKS
    Так как остальные вопросы будут связаны непосредственно с сетью.
     
  2. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Несколько вариантов
    1) Пусть программа запишет эти данные в файл, а не на stdout
    2) Проверяй - если переданный байт = 0Ah (перевод строки), то выкусывай его или выводи текст "/x0A" вместо него.
     
  3. stellaco

    stellaco New Member

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

    [stellaco@localhost]$ ./a.out
    123456789_10
    [stellaco@localhost]$ 6789_10
    bash: 6789_10: command not found
    [stellaco@localhost]$

    Запускаю a.out и консоль переходит на следующую строку, ждёт ввода данных.
    Ввожу 123456789_10
    Первые 5 байт записываются в созданный файл test.txt
    А остальные 6789_10 передаются, как команда bash
    Отсюда вытекает следующее bash: 6789_10: command not found
    Хотя в такой программе можно было бы вместо 123456789_10 передать к примеру 12345cd /var/www . Тогда бы первые пять байт снова записались в файл, а все последующие символы, bash воспринял бы, как команду cd /var/www . И перешёл бы в каталог /var/www

    [stellaco@localhost]$ ./a.out
    12345cd /var/www
    [stellaco@localhost]$ cd /var/www /* прописалось само, после завершения записи в test.txt */
    [stellaco@localhost www]$ ls -l
    итого 24
    drwxrwxrwx 2 root root 4096 2008-12-15 07:24 cgi-bin/
    drwxrwxrwx 3 root root 4096 2008-12-10 16:09 error/
    drwxrwxrwx 2 root root 4096 2008-07-27 18:55 fcgi-bin/
    drwxrwxrwx 3 root root 4096 2008-12-10 16:09 html/
    drwxrwxrwx 3 root root 4096 2008-12-10 16:09 icons/
    drwxrwxrwx 2 root root 4096 2008-12-10 16:09 perl/

    Я как понимаю, это глюк bash связан с тем, как он оперирует с данными argv программы и завершением рабты проги данной консолью. (перевод строки...), вот и получается подобная хрень)..
    Поправьте если я ошибаюсь.

    А вообще, это и не важно в данном случаи) так как , мне интересно на данный момент то, как принимать данные присланные пользователем из html формы, cgi скрипту.
    Вот и интересно, если человек решит послать мне данные размером 600 байт, а у меня выделенно только 500 байт для принятых байтов. И я считываю данные через системный вызов read с ограничением в 500 символов. то будет ли возможен взлом?

    И ещё)..я буквально всю ночь просидел, пытаясь понять...как из Apache читать присланные данные с помощью ассембера! Говорят что подобные сервера, всё передают через стандартный ввод.и вывод... и если программе надо получить какието данные, то следует всеголишь считать их из стандартного ввода.... (что я и делал).... Так вот..ничего не получилось (((.. и сейчас опять не получается ничего принимать.
    Если кто может, пожалуйчта, разъясните мне...как это работает?!?!?!
     
  4. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    stellaco
    Поставь винду и не парься.
     
  5. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Меня устраивают UNIX системы.
    И мне нравится контролировать каждый байт в приложении, такого в винде не добьешься.
    Вот тут ещё два вопроса, которые мне нужно решить http://www.wasm.ru/forum/viewtopic.php?id=30165 . Если кто может, помогите.
    В той теме есть вопрос, о подключении в БД , если кто знает как это сделать то прошу поделиться мудростью. Ну а если, кто знает, как делать свою базу данных (именно базу данных, а не структуру... наподобии есть клиент, есть адрес и тд..), то буду благодарен если просветите меня и в этом, или посоветуете качественные книги (которых я кстати, по этой теме не нашёл)
     
  6. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    stellaco
    Фу, понял. У тебя получается вот что:
    - Ты пишешь текст, нажимаешь Enter и происходит следующее.
    - твоя программа читает из потока stdin 5 байтов и пишет их файл.
    - все остальные байты, оставшиеся в потоке ввода после выхода программы, достаются родительскому процессу (bash'у)
    Сделай вот что:
    - попробуй перед выходом из программы очистить поток stdin (по-моему функция flush, не помню), чтобы в нем не осталось непрочитанных байтов.
    - или прочитай все байты, пока не достигнешь "конца файла".
     
  7. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    stellaco, если у тебя так много вопросов, сходи на Linux-сайт по программированию, на сайте, посвещенному Windows'у, тебе вряд ли ответят.

    P.S. Если все-таки хочешь на wasm'e полязить, попроси модераторов перенаправить эту тему на форум "Beginners".
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    кто тебе такую чушь сказал? и зачем в бегинерс переносить? что-то ты не то сегодня пишешь
     
  9. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    MSoft, я говорил в общем смысле, но судя по размеру и активности UNIX-раздела это так.
     
  10. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    О дааа!!! Этож только в юниксах можно...

    К базе можно подключиться например по TCP/IP.

    MSoft
    Ну, если не ошибаюсь WASM - Windows Assembly
    А вопрос лучше перенести в wasm.unix
     
  11. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Ну контролировать каждый байт и в винде можно, если драйвер написать...
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    stellaco
    Обычно читают в цикле пока не встретится допустим \n (или \r\n) . Например, читаешь 5 байт, остальные в цикле отбрасываешь пока не конец. Вот и все. Это один из вариантов.

    AndreyMust19
    Если вы не знаете, это не значит что надо МНОГО ФЛУДИТЬ на этом форуме.
    И не надо говорить за всех! Каждый сам подумать может.
    Лучше молчите.
     
  13. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    AndreyMust19
    Точно, STD_IN записывает данные прежде всего в буфер, а затем уже в файл . Как-то я сразу не додумался.
    Не подскажите, как можно подобное сделать не прибегая к СИ ??

    Хорошо, попрошу модераторов перенести тему в "Beginners"
     
  14. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Просто на UNIX заходят намного реже, чем на другие форумы. Если нужен ответ на UNIX-тему, то ответ лучше искать на UNIX-сайтах.
     
  15. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    TermoSINteZ
    Спасибо, сегодня попробую этот вариант.

    K10
    Подключиться то наверно можно, но мне хотелось бы посылать в неё sql запросы и получать данные. Былоб замечательно, еслиб мне показли на примере, как это сделать.
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    /offtop
    нда как флудить на тему win vs nix так большинство голосов обычно за nix и аргументов накидывают длинные списки ;), а как подсказать по программированию - так "поставь win" да "иди на nix форум"... А тема cgi на асме под nix имхо интересная и полезная, с учётом того, что куча серверов под nix. Я бы тоже с удовольствием почитал внятные ответы на вопросы ТС, просто чтобы что-то знать когда наконец ход дойдёт в этом разобраться ;)
     
  17. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    K10
    вот блин. а я всегда читал ватком асм.. а он, собака, только что под армовые мобилы бинари не лепит. почему-бы?..
     
  18. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Y_Mur
    Потому что UNIX сильно никто не занимается - так, поставят, побалаются и бросят игрушку.