我们有一个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应用程序?
答案 0 :(得分: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