CGI程序在调试模式下运行 我们有一个C++的CGI应用程序,它可以满足一些Web请求。出于分析目的,我正尝试在调试模式下运行相同的程序。我采用的方法是使用gdb调用它:

CGI程序在调试模式下运行 我们有一个C++的CGI应用程序,它可以满足一些Web请求。出于分析目的,我正尝试在调试模式下运行相同的程序。我采用的方法是使用gdb调用它:,c++,apache,gdb,C++,Apache,Gdb,按照第一步-我重命名我的实际CGI应用程序,并用相同的名称放置我自己的程序 在该程序中,我试图使用GDB在调试模式下调用实际的CCGI应用程序: const char* argv[] = ["gdb -p <pid> -batch -ex bt 2>/dev/null", NULL]; execve("./myprog", (char**)argv, NULL); const char*argv[]=“gdb-p-batch-exbt2>/dev/null”,null];

按照第一步-我重命名我的实际CGI应用程序,并用相同的名称放置我自己的程序

在该程序中,我试图使用GDB在调试模式下调用实际的CCGI应用程序:

const char* argv[] = ["gdb -p <pid> -batch -ex bt 2>/dev/null", NULL];

execve("./myprog", (char**)argv, NULL);
const char*argv[]=“gdb-p-batch-exbt2>/dev/null”,null];
execve(“./myprog”,(char**)argv,NULL);
问题在于,由于myrog是一个CGI应用程序,它从STDIN获取输入

如何在程序中捕获输入并将其传递给实际的CGI应用程序?

我这样做: 在cgi main中,我添加了查找现有文件的代码,如/var/tmp/flag。 当存在时,我在一个循环中运行。 足够的时间通过gdb连接到cgi进程。 然后我删除/var/tmp/flag,从现在起我可以调试我的cgi代码

bool file_exists(const char *filename)
{
   ifstream ifile(filename);
   return ifile;
}

int cgiMain()
{

 while (file_exists ("/var/tmp/flag"))
     sleep (1);
 ...
 your code 
我这样做: 在cgi main中,我添加了查找现有文件的代码,如/var/tmp/flag。 当存在时,我在一个循环中运行。 足够的时间通过gdb连接到cgi进程。 然后我删除/var/tmp/flag,从现在起我可以调试我的cgi代码

bool file_exists(const char *filename)
{
   ifstream ifile(filename);
   return ifile;
}

int cgiMain()
{

 while (file_exists ("/var/tmp/flag"))
     sleep (1);
 ...
 your code 

我无法理解您的问题陈述。捕获(
tcpdump
等)或写出HTTP请求,然后在
gdb
下手动执行您的程序。输入重定向的语法是
run
,即,如果您有http_request.dump,您将:1<代码>gdb./myprog2<代码>(gdb)运行谢谢。我能够通过stdin文件处理程序上的fread系统调用捕获通过stdin的程序中的数据-但我如何将其作为数据写入我正在以编程方式调用的实际程序的stdin?@zzk:CGI应用程序由inetd服务调用,输入数据作为stdin文件处理程序传递,并输出到STDOUT文件处理程序。因此,我的要求是,我的应用程序是一个CGI应用程序,它应该捕获STDIN文件中的请求,并通过传递数据捕获来调用另一个CGI应用程序。这是您无法从命令行手动运行流程的原因吗?您调试此应用程序的解决方案似乎不必要地复杂。我无法理解您的问题陈述。捕获(
tcpdump
等)或写出HTTP请求,然后在
gdb
下手动执行您的程序。输入重定向的语法是
run
,即,如果您有http_request.dump,您将:1<代码>gdb./myprog2<代码>(gdb)运行谢谢。我能够通过stdin文件处理程序上的fread系统调用捕获通过stdin的程序中的数据-但我如何将其作为数据写入我正在以编程方式调用的实际程序的stdin?@zzk:CGI应用程序由inetd服务调用,输入数据作为stdin文件处理程序传递,并输出到STDOUT文件处理程序。因此,我的要求是,我的应用程序是一个CGI应用程序,它应该捕获STDIN文件中的请求,并通过传递数据捕获来调用另一个CGI应用程序。这是您无法从命令行手动运行流程的原因吗?您调试此应用程序的解决方案似乎不必要地复杂。