Форум программистов, компьютерный форум, киберфорум
FreeBSD
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
1

FreeBSD пример cgi

31.12.2011, 06:57. Показов 1312. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо чтобы этот простейший cgi скрипт,
заработал на сервере где установлена ОС FreeBSD.

Желательно использовать FASM!
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
format pe console
 
include 'win32axp.inc'
 
.data
  bfr  db 'content-type: text/html',13,10,13,10
       db '<HTML',13,10
       db '<HEAD>',13,10
       db '<TITLE>ПРИМЕР!</TITLE>',13,10
       db '</HEAD>',13,10
       db '<BODY>',13,10
       db '<CENTER>',13,10
       db '<FONT FACE=Courier>',13,10
       db 'ПРИМЕР!'
       db '</FONT>',13,10
       db '</CENTER>',13,10
       db '</BODY>',13,10
       db '</HTML>',13,10,0
  size = $ - bfr
  tag  dd ?
 
.code
start:
        invoke    GetStdHandle,STD_OUTPUT_HANDLE
        invoke    WriteFile,eax,bfr,size,tag,0
        invoke    ExitProcess,0
.end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.12.2011, 06:57
Ответы с готовыми решениями:

не запускаеться (CGI вместе с MySQL) под Apache: Premature end of script headers: c:/www/cgi-bin/catalog.cgi
такая трабла: вот что пишет Apache в Log: Premature end of script headers:...

пример использование exec (ping) на FreeBSD
Уважаемые коллеги, подскажите пожалуйста как можно использовать exec для программы ping (FreeBSB)....

Запуск CGI вне cgi-bin и запуск index.cgi
Никак не получается сделать настройку 1) Запуск CGI-программ ВНЕ /cgi-bin/ 2) Запуск index.cgi...

Ошибка 500 cgi, нужно запустить батник через cgi
Apache на Windows (!!) Если запускаю localhost/run.bat все работает исправно, скрипт простой,...

8
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
31.12.2011, 14:02 2
include 'win32axp.inc'
Сдается мне что код будет под ОС Windows
FreeBSD не будет исполнять код сделанный под Windows
Мне казалось что это очевидно всем кто пишет на асме
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
31.12.2011, 14:16  [ТС] 3
Цитата Сообщение от odip Посмотреть сообщение
Сдается мне что код будет под ОС Windows
FreeBSD не будет исполнять код сделанный под Windows
Мне казалось что это очевидно всем кто пишет на асме
Мне это известно.
Необходимо узнать какой формат файла задавать,
и какие функции ОС FreeBSD вызывать для исполнения программы.

Добавлено через 8 минут
К примеру пробовал так ошибка 500!

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
format ELF
 
include 'ccall.inc'
 
section '.text' executable
 
 public main
 extrn printf
 
 main:
    ccall   printf, bfr
    ret
 
section '.data' writeable
 
  bfr  db 'content-type: text/html',13,10,13,10
       db '<HTML',13,10
       db '<HEAD>',13,10
       db '<TITLE>ПРИМЕР!</TITLE>',13,10
       db '</HEAD>',13,10
       db '<BODY>',13,10
       db '<CENTER>',13,10
       db '<FONT FACE=Courier>',13,10
       db 'ПРИМЕР!'
       db '</FONT>',13,10
       db '</CENTER>',13,10
       db '</BODY>',13,10
       db '</HTML>',10,0
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
31.12.2011, 14:26 4
За основу можешь взять линуксовый пример : Есть ли в нотации AT&T аналог dos-овского прерывания 02h?
Только нужно узнать интерфейс системных вызовов для free bsd. Либо ищешь документацию, либо создаёшь пример на Си с вызовами write и exit, компиляешь, дизассемблируешь

Добавлено через 1 минуту
Ну и на всякий случай символы \r (с кодом 10) надо убрать, потому что под юникс-системами перевод строк осуществляется только в один символ. По идее http-сервер это должен рулить, но мало ли что
1
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
01.01.2012, 00:25  [ТС] 5
Evg! Благодарю буду пробовать.
По поводу, что HTTP сервер должен сам обрабатывать
переход на другую строку. Вроде в ОС FreeBSD как и в Windows,
вывод осуществляется до завершающего символа `0`.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
01.01.2012, 00:36 6
Фишка не в нуле. А в том, что заголовок и документ отправляются одним запросом. При этом первые два подряд идущих перевода строки трактуются как граница между заголовком и документом

С новым годом!
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
01.01.2012, 08:41  [ТС] 7
С наступившим новым годом.
Всё верно первые два подряд идущих перевода строки трактуются как граница между заголовком и документом, а всё остальное выводятся в браузер до завершающего символа `0`.
Кактотак.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
01.01.2012, 12:37 8
Цитата Сообщение от IOAN Посмотреть сообщение
а всё остальное выводятся в браузер до завершающего символа `0`
У тебя cgi, а потому речь идёт о серверной стороне, а не о браузере. В случае использования системного вызова write (или любого другого механизма НИЗКОГО уровня) твоё утверждение неверно. Будет послано столько байтов, сколько указано в параметре, отвечающем за длину печатаемого фрагмента. Затем соединение будет закрыто. И никаких хвостовых нулей никто не учитывает (со стороны сервера). Точно так же на стороне браузера закрытие соединения (EOF) будет трактоваться как конец документа. Ну либо если прислано 100 килобайт, а на середине этого документа встретился байт с кодом 0, то реальным концом документа будет считаться отметка 50 килобайт, а весь хвост будет проигнорирован. Последнее справедливо в том случае, если действительно браузер трактует 0 как конец (я не знаю, так ли это на самом деле)

Ну а в твоём первом примере ты использовал функцию printf (т.е. механизм ВЫСОКОГО уровня, в котором есть соглашение, что строка заканчивается нулевым символом), а потому та критично наличие нуля на конце. В противном случае printf начнёт печатать дальнейший мусор из памяти, лежащий за твоими данными, до тех пор, пока не наткнётся на нулевой байт. Низкоуровневым механизмам чихать на этот завершающий ноль, они работают исключительно на основании размера буфера
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
01.01.2012, 15:24  [ТС] 9
Согласен. Но на болле низкий уровень передаётся размер буфера для вывода, а определяется он по заверщающему символу. Если я буду делать вывод непосредственно через системные вызовы то соответсвенно буду сам подсчитывать размер данных.
0
01.01.2012, 15:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.01.2012, 15:24
Помогаю со студенческими работами здесь

Perl + SSI = ошибка invalid CGI ref 'http://сервер/cgi-bin/view_bag.pl' in ....
Вопрос такой: Скрипт view_bag.pl без ошибок выполняется в папке /cgi-bin/, при этом атрибуты файла...

При попытке отправить данные формы открывается страница с сообщением: 'The requested method POST is not allowed for the URL /cgi-bin/script.cgi.'
Имеется форма, начальный тег: &lt;form method=post action='cgi-bin/script.cgi'&gt; При попытке...

Пользователь в инпуте пишет пример на сложение, например, 5+2. Внизу в виде картинок с этими цифрами вывести пример
Пользователь в инпуте пишет пример на сложение, например, 5+2. Внизу в виде картинок этих цифер...

Как записать пример в Maxima? Пример внутри
Здравствуйте. Кто может записать этот пример в программе? Чтобы считал и не выдавал ошибку

CGI и С++
Ребят есть программа. Я очень долго её собирал, компилил, долго разбирался что к чему, собирал...

CGI и C++
Решил попросить помощи в объяснении моей курсовой. Всю работу свел к минимуму. Сейчас представлю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru