问题描述
最近在玩goahead,嵌入式开源webserver,代码中有一cgitest.c的cgi例子代码,不知道如何编译,仿goahead编译(在标准FC8上)cc-g-Wall-DWEBS-DUEMF-DOS="LINUX"-DLINUX-DUSER_MANAGEMENT_SUPPORT-DDIGEST_ACCESS_SUPPORT-I../..-ccgitest.c-ocgitest.occ-ocgitest.cgicgitest.o编译完成之后,拷贝cgitest.cgi到ws031202/web/cgi-bin,跑起./webs,用IE连接http://192.168.13.198/cgi-bin/cgitest.cgi,服务器端出现Segmentationfault,gdb调试信息如下:(gdb)where#00x0059d12binstrlen()from/lib/libc.so.6#10x0804a391inbstrdup(s=0xffffffff<Address0xffffffffoutofbounds>)at../balloc.c:461#20x080497afinwebsGetCgiCommName()atmain.c:328#30x0804aa07inwebsCgiHandler(wp=0x9798c48,urlPrefix=0x9796bd8"/cgi-bin",webDir=0x9796bf0"",arg=0,url=0x97994d0"/cgi-bin/test.cgi",path=0x9799510"/cgi-bin/test.cgi",query=0x9797288"")at../cgi.c:185#40x0804e8c8inwebsUrlHandlerRequest(wp=0x9798c48)at../handler.c:279#50x0805778finwebsGetInput(wp=0x9798c48,ptext=0xbfb40f40,pnbytes=0xbfb40f38)at../webs.c:699#60x08057090inwebsReadEvent(wp=0x9798c48)at../webs.c:362#70x08056fedinwebsSocketEvent(sid=1,mask=2,iwp=158960712)at../webs.c:319#80x0805157dinsocketDoEvent(sp=0x97972a0)at../sockGen.c:933#90x08051424insocketProcess(sid=1)at../sockGen.c:875#100x080492d9inmain(argc=1,argv=0xbfb41074)atmain.c:96好像是strlen的问题。请教cgi高手代码应该如何编译,谢谢!如果能够给出Makefile例子,那就更好了。
解决方案
解决方案二:
cgi的编译是不是和普通应用程序的编译是一样的?
解决方案三:
一样吧
解决方案四:
你的CGI沒有處理無效的input吧。
解决方案五:
该回复于2010-02-23 09:42:31被版主删除
解决方案六:
是吗好!
解决方案七:
啊?你怎么编译的啊?直接gcc编译生成默认的a.out放到你说的路径直接就能看见一对你的机器的相关信息了就是那一堆printf函数的结果啊
解决方案八:
该回复于2010-11-11 10:08:05被版主删除
解决方案九:
web文件夹下,有个cgi-bin文件夹,把里面滴代码编译,即可测试!
解决方案十:
LZ把在移植的步骤中不要把tempnam改成mkstemp函数。应该就可以了。