1

我们有一个 C++ CGI 应用程序,它服务于一些 Web 请求。我试图在调试模式下运行相同的分析目的。我采用的方法是用 gdb 调用它:

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

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

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

execve("./myprog", (char**)argv, NULL);

问题是由于 myrog 是一个 CGI 应用程序,它从 STDIN 获取输入。

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

4

1 回答 1

1

我这样做了:在 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 
于 2015-09-17T08:03:44.890 回答