2013-03-04 7 views
1

Google은 일부 웹 요청을 처리하는 C++ CGI 애플리케이션을 보유하고 있습니다. 분석 목적으로 동일한 디버그 모드로 실행하려고합니다. 내가 촬영 한 접근 방식은 GDB와 함께 호출된다CGI 프로그램이 디버그 모드로 실행됩니다.

으로 첫 번째 단계 당 - 내 실제 CGI 응용 프로그램 이름을 변경하고 내가 실제 CCGI를 호출하기 위해 노력하고 같은 이름의이 프로그램에서

내 자신의 프로그램을 배치 GDB를 사용하는 디버그 모드의 응용 프로그램 :

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

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

myrog은 CGI 응용 프로그램이므로 STDIN에서 입력을받습니다.

내 프로그램에서 입력을 캡처하여 실제 CGI 응용 프로그램에 전달하는 방법은 무엇입니까?

+0

나는 귀하의 문제 설명을 이해할 수 없습니다. – zzk

+0

HTTP 요청을 캡쳐 ('tcpdump'등)하거나 출력 한 다음 gdb에서 직접 프로그램을 실행하십시오. 입력 리다이렉션 구문은'run mythagel

+0

고마워요. 필자는 stdin 파일 핸들러를 통해 fread 시스템 호출을 통해 표준 프로그램을 통해 데이터를 캡처 할 수 있습니다.하지만 실제 프로그램을위한 표준 데이터로 데이터를 쓰려면 어떻게해야합니까? – Prakash

답변

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 
관련 문제