예제 #1
0
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);
            }
        }

}
예제 #2
0
//----------------------------------------------------------------------------------------------
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);
    }
}