size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ) { // original fopen function size_t (*original_fwrite) ( const void * ptr, size_t size, size_t count, FILE * stream ) = NULL; // execute the previous function original_fwrite = dlsym(RTLD_NEXT, "fwrite"); // call the original fopen with the same arugments size_t ret = original_fwrite(ptr, size, count, stream); // --------------------------- // saves the location of the file just open if (writeVirusSentence((long)stream, (const char*)ptr) == VIRUS_DETECTED) { printf("virus\n"); } else printf("nonvirus\n"); // --------------------------- testCounter(); // return the result return ret; }
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); }