/* 4f/debug_linux.c 09.09.2009 4f Krakow Labs Development -> 4f File Format Fuzzing Framework jbrown@KL Linux Debugging Module -> 4f.tar.gz Associated Files & Information: http://www.krakowlabs.com/dev/fuz/4f/4f http://www.krakowlabs.com/dev/fuz/4f/4f.c.txt http://www.krakowlabs.com/dev/fuz/4f/core.c.txt http://www.krakowlabs.com/dev/fuz/4f/include/core.h.txt http://www.krakowlabs.com/dev/fuz/4f/debug_linux.c.txt http://www.krakowlabs.com/dev/fuz/4f/oracle.c.txt http://www.krakowlabs.com/dev/fuz/4f/include/oracle.h.txt http://www.krakowlabs.com/dev/fuz/4f/mod/dev/bas.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/dev/ccc.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/dev/per.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/mul/m3u.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/mul/pls.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/mul/pul.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/net/tor.c.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/dev/bas.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/dev/ccc.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/dev/per.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/mul/m3u.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/mul/pls.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/mul/pul.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/net/tor.h.txt http://www.krakowlabs.com/dev/fuz/4f/mod/example/exa.c.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/example/exa.h.txt http://www.krakowlabs.com/dev/fuz/4f/Makefile.txt http://www.krakowlabs.com/dev/fuz/4f/doc/4f_doc.txt http://www.krakowlabs.com/dev/fuz/4f/media/4f.jpeg http://www.krakowlabs.com/dev/fuz/4f/media/4f.avi http://www.krakowlabs.com/dev/fuz/4f/4f.tar.gz 4f/debug_linux.c */ #include "include/core.h" void debug_status(char *tar, char *lgf, char *ffn, char *fdsc, int cb, pid_t pid, int stat) { char regs[512], sdsc[16]; int eax, ecx, edx, ebx, esp, ebp, esi, edi, eip, sig, log = 0; struct user_regs_struct reg; if(WIFSTOPPED(stat)) { sig = WSTOPSIG(stat); if(sig == SIGTRAP) return; if(sig == SIGKILL) return; if(sig == SIGTERM) return; memset(regs, 0, sizeof(regs)); memset(sdsc, 0, sizeof(sdsc)); if(sig == SIGILL) { log = 1; snprintf(sdsc, sizeof(sdsc), "%d (SIGILL)", sig); } if(sig == SIGABRT) { log = 1; snprintf(sdsc, sizeof(sdsc), "%d (SIGABRT)", sig); } if(sig == SIGBUS) { log = 1; snprintf(sdsc, sizeof(sdsc), "%d (SIGBUS)", sig); } if(sig == SIGSEGV) { log = 1; snprintf(sdsc, sizeof(sdsc), "%d (SIGSEGV)", sig); } if(sig == SIGPIPE) { log = 1; snprintf(sdsc, sizeof(sdsc), "%d (SIGPIPE)", sig); } if(ptrace(PTRACE_GETREGS, pid, NULL, ®) != 0) perror("PTRACE_GETREGS"); eax = reg.eax; ecx = reg.ecx; edx = reg.edx; ebx = reg.ebx; esp = reg.esp; ebp = reg.ebp; esi = reg.esi; edi = reg.edi; eip = reg.eip; snprintf(regs, sizeof(regs), "* EAX = 0x%x\n* ECX = 0x%x\n* EDX = 0x%x\n* EBX = 0x%x\n* ESP = 0x%x\n* EBP = 0x%x\n* ESI = 0x%x\n* EDI = 0x%x\n* EIP = 0x%x\n*", eax, ecx, edx, ebx, esp, ebp, esi, edi, eip); if(log == 1) debug_log(tar, lgf, ffn, fdsc, sdsc, regs); } else { if(cb == 1) { remove(ffn); } // apprently not perfect } } void debug_log(char *tar, char *lgf, char *ffn, char *fdsc, char *sdsc, char *regs) { fp = fopen(lgf, "a+"); fprintf(fp, "**************************************************\n*\n"); fprintf(fp, "* PATH: [%s]\n* SIGNAL: %s\n* FILE: [%s]\n* DATA: %s\n*\n%s\n", tar, sdsc, ffn, fdsc, regs); fprintf(fp, "***************************************************\n\n"); fclose(fp); }