“hello world”c cgi脚本在服务器上崩溃“

问题描述 投票:3回答:1

我正在尝试在托管的Web服务器上执行一个简单的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内部服务器”错误”。使用gdb分析核心转储让我“无法访问地址0x3000000000008处的内存”和“0x3000000000000”相同的行。

我试过了:

  • 在Ubuntu 11.10上编译(因为auf内核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

遗憾的是,我没有shell访问权限。


编辑:解决方案:

使用CentOS(Servers发行版所基于的)在虚拟机上构建静态二进制文件工作正常!

c linux webserver cgi hosting
1个回答
1
投票

库和链接器行为可能差异很大。有问题的两个发行版甚至没有在相同的主要内核版本上运行。听起来你正在编译一个比你服务器上存在的glibc更新版本的glibc。

我建议您在虚拟机中设置交叉编译或运行CloudLinux 7,然后在VM中进行编译。

© www.soinside.com 2019 - 2024. All rights reserved.