Я пытаюсь выполнить простой c cgi-скрипт на размещенном веб-сервере.Я скомпилировал этот код:
#include <stdio.h>
int main(){
printf("Content-type: text/plain\n\n");
printf("<html>\n");
printf("<head><title>Testing CGI-Scripts</title></head>\n");
printf("<body>\n");
printf("<h1>Hello World</h1>\n");
printf("</body>\n");
printf("</html>\n");
return 0;
}
с помощью gcc -o index.cgi index.c
, загрузил двоичный файл в каталог cgi-bin и изменил разрешение на 755. Тем не менее при выполнении сценария (url / cgi-bin / index.cgi) это вызывает дамп памяти, и я получаю «500 Internal Server Error».Анализ дампов ядра с помощью gdb дал мне сообщение «Невозможно получить доступ к памяти по адресу 0x3000000000008» и ту же строку с «0x3000000000000».
Я попытался:
- компиляция в Ubuntu 11.10 (потому чтоauf kernel 3.0)
- компиляция с -static
(анализ с помощью gdb из статического двоичного файла:
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x0000000000401e82 in __libc_start_main ()
)
Моя система: Arch Linux, ядро 4.20.12 x86_64
Сервер: CloudLinux 7, ядро 3.10.0-962.3.2.lve1.5.24.8.el7 x86_64
У меня нет доступа к оболочке,к сожалению.
Редактировать: Решение:
Построение статического двоичного файла на виртуальной машине с установленным CentOS (на котором основан дистрибутив Сервера)!