CGI程序在调试模式下运行 我们有一个C++的CGI应用程序,它可以满足一些Web请求。出于分析目的,我正尝试在调试模式下运行相同的程序。我采用的方法是使用gdb调用它:
按照第一步-我重命名我的实际CGI应用程序,并用相同的名称放置我自己的程序 在该程序中,我试图使用GDB在调试模式下调用实际的CCGI应用程序: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];
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)运行tcpdump
等)或写出HTTP请求,然后在gdb
下手动执行您的程序。输入重定向的语法是run
,即,如果您有http_request.dump,您将:1<代码>gdb./myprog2<代码>(gdb)运行