#include #include #include #include #include #include #include #include #define PATTERN #define BUFSIZE 128 #define SUBMATCH_NUM 20 void usage(char *progname); void search(regex_t *preg, char *buffer); int main(int argc, char **argv) { if(argc != 2) { usage(argv[0]); exit(1); } FILE *memdump; char *buf = calloc(BUFSIZE, sizeof(char)); int c, i = 0; char n; regex_t prg; if(regcomp(&prg, PATTERN, 0) != 0) { perror("regcomp"); exit(1); } if((memdump = fopen(argv[1], "r")) == NULL) { perror("fopen"); exit(1); } while((c = fgetc(memdump)) != EOF) { if((isgraph(c) == 0) && (i < BUFSIZE)) { buf[i] = (char)c; } else { search(&prg, buf); i = 0; } i++; } regfree(&prg); free(buf); fclose(memdump); return 0; } void usage(char *progname) { printf("Usage: %s filename\n", progname); } void search(regex_t *preg, char *buffer) { size_t nmtch = SUBMATCH_NUM; regmatch_t pmtch[SUBMATCH_NUM]; int err, i; if((err = regexec(preg, buffer, nmtch, pmtch, 0)) != 0) { size_t length = regerror(err, preg, NULL, 0); char *err_buf = malloc(length); regerror(err, preg, err_buf, length); printf("%s\n", err_buf); free(err_buf); } else { for(i=0;i < SUBMATCH_NUM;i++) { if(sizeof(pmtch[i]) != 0) { printf("w00t! match!\n"); } } } }