void doMallocReplacement() { int i,j; // Replace malloc functions int modules_to_replace_count = sizeof(modules_to_replace) / sizeof(modules_to_replace[0]); int routines_to_replace_count = sizeof(routines_to_replace) / sizeof(routines_to_replace[0]); for ( j=0; j<modules_to_replace_count; j++ ) for (i = 0; i < routines_to_replace_count; i++) { FRR_TYPE type = ReplaceFunction( modules_to_replace[j], routines_to_replace[i]._func, routines_to_replace[i]._fptr ); if (type == FRR_NODLL) break; if (type != FRR_OK && routines_to_replace[i]._on_error==FRR_FAIL) { fprintf(stderr, "Failed to replace function %s in module %s\n", routines_to_replace[i]._func, modules_to_replace[j]); exit(1); } } }
//---------------------------------------------------------------------------------------------- void CMemoryManager::OverrideMSVCRT() { if(MSVCRTOverriden) return; MSVCRTOverriden = true; HMODULE H = GetModuleHandleA("msvcrt.dll"); if(H) { ReplaceFunction(H, "malloc", (unsigned char*)malloc); ReplaceFunction(H, "_malloc_dbg",(unsigned char*)_malloc_dbg); ReplaceFunction(H, "_nh_malloc",(unsigned char*)_nh_malloc); ReplaceFunction(H, "_nh_malloc_dbg_impl",(unsigned char*)_nh_malloc_dbg_impl); ReplaceFunction(H, "_nh_malloc_dbg",(unsigned char*)_nh_malloc_dbg); ReplaceFunction(H, "_heap_alloc",(unsigned char*)_heap_alloc); ReplaceFunction(H, "_heap_alloc_dbg_impl",(unsigned char*)_heap_alloc_dbg_impl); ReplaceFunction(H, "_heap_alloc_dbg",(unsigned char*)_heap_alloc_dbg); ReplaceFunction(H, "_realloc_dbg",(unsigned char*)_realloc_dbg); ReplaceFunction(H, "realloc",(unsigned char*)realloc); ReplaceFunction(H, "realloc_help",(unsigned char*)realloc_help); ReplaceFunction(H, "calloc",(unsigned char*)calloc); ReplaceFunction(H, "_calloc_impl",(unsigned char*)_calloc_impl); ReplaceFunction(H, "_calloc_dbg_impl",(unsigned char*)_calloc_dbg_impl); ReplaceFunction(H, "_calloc_dbg",(unsigned char*)_calloc_dbg); ReplaceFunction(H, "_recalloc",(unsigned char*)_recalloc); ReplaceFunction(H, "_recalloc_dbg",(unsigned char*)_recalloc_dbg); ReplaceFunction(H, "free",(unsigned char*)free); ReplaceFunction(H, "_free_nolock",(unsigned char*)_free_nolock); ReplaceFunction(H, "_free_dbg",(unsigned char*)_free_dbg); ReplaceFunction(H, "_free_dbg_nolock",(unsigned char*)_free_dbg_nolock); ReplaceFunction(H, "_msize",(unsigned char*)_msize); ReplaceFunction(H, "_msize_dbg",(unsigned char*)_msize_dbg); ReplaceFunction(H, "_aligned_malloc",(unsigned char*)_aligned_malloc); ReplaceFunction(H, "_aligned_malloc_dbg",(unsigned char*)_aligned_malloc_dbg); ReplaceFunction(H, "_aligned_realloc",(unsigned char*)_aligned_realloc); ReplaceFunction(H, "_aligned_realloc_dbg",(unsigned char*)_aligned_realloc_dbg); ReplaceFunction(H, "_aligned_recalloc",(unsigned char*)_aligned_recalloc); ReplaceFunction(H, "_aligned_recalloc_dbg",(unsigned char*)_aligned_recalloc_dbg); ReplaceFunction(H, "_aligned_free",(unsigned char*)_aligned_free); ReplaceFunction(H, "_aligned_free_dbg",(unsigned char*)_aligned_free_dbg); ReplaceFunction(H, "_aligned_msize",(unsigned char*)_aligned_msize); ReplaceFunction(H, "_aligned_msize_dbg",(unsigned char*)_aligned_msize_dbg); ReplaceFunction(H, "_aligned_offset_malloc",(unsigned char*)_aligned_offset_malloc); ReplaceFunction(H, "_aligned_offset_malloc_dbg",(unsigned char*)_aligned_offset_malloc_dbg); ReplaceFunction(H, "_aligned_offset_realloc",(unsigned char*)_aligned_offset_realloc); ReplaceFunction(H, "_aligned_offset_recalloc",(unsigned char*)_aligned_offset_recalloc); ReplaceFunction(H, "_aligned_offset_realloc_dbg",(unsigned char*)_aligned_offset_realloc_dbg); ReplaceFunction(H, "_aligned_offset_recalloc_dbg",(unsigned char*)_aligned_offset_recalloc_dbg); ReplaceFunction(H, "_expand",(unsigned char*)_expand); ReplaceFunction(H, "_expand_dbg",(unsigned char*)_expand_dbg); } }