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

"hello world" c cgi script crashes on server”

我正在尝试在托管网络服务器上执行一个简单的 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; 
}

with gcc -o index.cgi index.c, 将二进制文件上传到 cgi-bin 目录并将权限更改为 755。但是在执行脚本 (url/cgi-bin/index.cgi) 时它会导致核心转储,我收到“500 内部服务器错误”。用 gdb 分析核心转储得到了我 "Cannot access memory at address 0x3000000000008" 和同一行“0x3000000000000”。

我试过了:

(使用静态二进制文件中的 gdb 进行分析:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000000000401e82 in __libc_start_main ()

)

我的系统:Arch Linux,内核 4.20.12 x86_64

服务器:云端Linux7、内核3.10.0-962.3.2.lve1.5.24.8.el7x86_64

不幸的是,我没有 shell 访问权限。


编辑:解决方案:

在安装了 CentOS(服务器发行版基于的)的虚拟机上构建静态二进制文件成功了!

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

建议大家在虚拟机中设置交叉编译或者运行CloudLinux 7,在虚拟机中编译。