Overview

Leak Browser is a debugging tool for tracking down hard to find leaks in software.

There are many techniques and tools for finding software resource leaks. Leak Browser was written to find those leaks that other tools could not. It does this by monitoring a vast array of resource allocation routines, from operator new all the way down to ntdll!NtAllocateVirtualMemory.

Unlike other tools Leak Browser does not require recompilation, and does not require that you link to specific libraries. Leak Browser is able to cope with both static and dynamic link C runtime libraries, all you need is the symbol files. Currently it works with compiled Win32 code only, Win64 support is planned, .NET support is a long way off but there are plenty of other tools that can handle .NET because the .NET virtual machine makes this relatively easy compared with native code, JVM support and scripting support are not likely ever.

Unlike other tools it generates a meaningful picture of how your software is leaking. It does this by generating HTML graphs of the leak sites. There are also a number of filters that enable you to produce a more meaningful picture. Some sample output is provided on the example pages.

This list is a list of some of the functions tracked by an older version of Leak Browser .
[The latest version tracks many other functions and additionally tracks uncommitted address space.]

  • +  C/C++ runtime
    msvcrt.dll!operator new
    msvcrt.dll!operator delete
    msvcrt.dll!malloc
    msvcrt.dll!free
    msvcrt.dll!calloc
    msvcrt.dll!realloc
    msvcrtd.dll!operator new
    msvcrtd.dll!operator delete
    msvcrtd.dll!malloc
    msvcrtd.dll!free
    msvcrtd.dll!calloc
    msvcrtd.dll!realloc
    msvcrtd.dll!_malloc_dbg
    msvcrtd.dll!_calloc_dbg
    msvcrtd.dll!_realloc_dbg
    msvcrtd.dll!_free_dbg
    msvcr70.dll!operator new
    msvcr70.dll!operator delete
    msvcr70.dll!malloc
    msvcr70.dll!free
    msvcr70.dll!calloc
    msvcr70.dll!realloc
    msvcr70.dll!_aligned_malloc
    msvcr70.dll!_aligned_realloc
    msvcr70.dll!_aligned_offset_malloc
    msvcr70.dll!_aligned_offset_realloc
    msvcr70.dll!_aligned_free
    msvcr70d.dll!operator new
    msvcr70d.dll!operator delete
    msvcr70d.dll!malloc
    msvcr70d.dll!free
    msvcr70d.dll!calloc
    msvcr70d.dll!realloc
    msvcr70d.dll!_malloc_dbg
    msvcr70d.dll!_calloc_dbg
    msvcr70d.dll!_realloc_dbg
    msvcr70d.dll!_free_dbg
    msvcr70d.dll!_aligned_malloc
    msvcr70d.dll!_aligned_realloc
    msvcr70d.dll!_aligned_offset_malloc
    msvcr70d.dll!_aligned_offset_realloc
    msvcr70d.dll!_aligned_free
    msvcr70d.dll!_aligned_malloc_dbg
    msvcr70d.dll!_aligned_realloc_dbg
    msvcr70d.dll!_aligned_offset_malloc_dbg
    msvcr70d.dll!_aligned_offset_realloc_dbg
    msvcr70d.dll!_aligned_free_dbg
    msvcr71.dll!operator new
    msvcr71.dll!operator delete
    msvcr71.dll!malloc
    msvcr71.dll!free
    msvcr71.dll!calloc
    msvcr71.dll!realloc
    msvcr71.dll!_aligned_malloc
    msvcr71.dll!_aligned_realloc
    msvcr71.dll!_aligned_offset_malloc
    msvcr71.dll!_aligned_offset_realloc
    msvcr71.dll!_aligned_free
    msvcr71d.dll!operator new
    msvcr71d.dll!operator delete
    msvcr71d.dll!malloc
    msvcr71d.dll!free
    msvcr71d.dll!calloc
    msvcr71d.dll!realloc
    msvcr71d.dll!_malloc_dbg
    msvcr71d.dll!_calloc_dbg
    msvcr71d.dll!_realloc_dbg
    msvcr71d.dll!_free_dbg
    msvcr71d.dll!_aligned_malloc
    msvcr71d.dll!_aligned_realloc
    msvcr71d.dll!_aligned_offset_malloc
    msvcr71d.dll!_aligned_offset_realloc
    msvcr71d.dll!_aligned_free
    msvcr71d.dll!_aligned_malloc_dbg
    msvcr71d.dll!_aligned_realloc_dbg
    msvcr71d.dll!_aligned_offset_malloc_dbg
    msvcr71d.dll!_aligned_offset_realloc_dbg
    msvcr71d.dll!_aligned_free_dbg
    static link _malloc_dbg
    static link _calloc_dbg
    static link _realloc_dbg
    static link _free_dbg
    static link _aligned_malloc
    static link _aligned_realloc
    static link _aligned_offset_malloc
    static link _aligned_offset_realloc
    static link _aligned_free
    static link _aligned_malloc_dbg
    static link _aligned_realloc_dbg
    static link _aligned_offset_malloc_dbg
    static link _aligned_offset_realloc_dbg
    static link _aligned_free_dbg
    mfc42.dll!@823 operator new (MFC delegates
    to C runtime)
    mfc42u.dll!@823 operator new (MFC delegates
    to C runtime)
    mfc42d.dll!@714 operator new (MFC delegates
    to C runtime)
    mfc42ud.dll!@714 operator new (MFC delegates
    to C runtime)
    mfc70.dll!@703 operator new (MFC delegates
    to VC7 runtime)
    mfc70.dll!@256 operator new[] (MFC delegates
    to VC7 runtime)
    mfc70u.dll!@703 operator new (MFC delegates
    to VC7 runtime)
    mfc70u.dll!@256 operator new[] (MFC delegates
    to VC7 runtime)
    mfc70d.dll!@832 operator new (MFC delegates
    to VC7 runtime)
    mfc70d.dll!@257 operator new[] (MFC delegates
    to VC7 runtime)
    mfc70d.dll!@834 operator new (debug MFC delegates
    to VC7 runtime)
    mfc70d.dll!@259 operator new[] (debug MFC
    delegates to VC7 runtime)
    mfc70ud.dll!@833 operator new (MFC delegates
    to VC7 runtime)
    mfc70ud.dll!@258 operator new[] (MFC delegates
    to VC7 runtime)
    mfc70ud.dll!@835 operator new (debug MFC
    delegates to VC7 runtime)
    mfc70ud.dll!@260 operator new[] (debug MFC
    delegates to VC7 runtime)
  • +  Win32 handles
    kernel32.dll!DuplicateHandle
    kernel32.dll!CloseHandle
    kernel32.dll!CreateFileA
    kernel32.dll!CreateFileW
    kernel32.dll!CreateEventA
    kernel32.dll!CreateEventW
    kernel32.dll!OpenEventA
    kernel32.dll!OpenEventW
    kernel32.dll!CreateSemaphoreA
    kernel32.dll!CreateSemaphoreW
    kernel32.dll!OpenSemaphoreA
    kernel32.dll!OpenSemaphoreW
    kernel32.dll!CreateThread
    kernel32.dll!CreateRemoteThread
    kernel32.dll!OpenThread Windows 2000 and
    above
    kernel32.dll!CreateProcessA
    kernel32.dll!CreateProcessW
    kernel32.dll!OpenProcess
    advapi32.dll!CreateProcessAsUserA
    advapi32.dll!CreateProcessAsUserW
    advapi32.dll!CreateProcessWithLogonW Windows
    2000 and above
    advapi32.dll!LogonUserA
    advapi32.dll!LogonUserW
    kernel32.dll!CreateMailslotA
    kernel32.dll!CreateMailslotW
    kernel32.dll!CreateWaitableTimerA
    kernel32.dll!CreateWaitableTimerW
    kernel32.dll!OpenWaitableTimerA
    kernel32.dll!OpenWaitableTimerW
    kernel32.dll!CreateMutexA
    kernel32.dll!CreateMutexW
    kernel32.dll!OpenMutexA
    kernel32.dll!OpenMutexW
    kernel32.dll!CreateNamedPipeW
    kernel32.dll!CreateNamedPipeA
    kernel32.dll!CreatePipe
    kernel32.dll!CreateFileMappingA
    kernel32.dll!CreateFileMappingW
    kernel32.dll!OpenFileMappingA
    kernel32.dll!OpenFileMappingW
    kernel32.dll!CreateIoCompletionPort
    user32.dll!CreateWindowStationA
    user32.dll!CreateWindowStationW
    user32.dll!CloseWindowStation
    ws2_32.dll!socket
    ws2_32.dll!closesocket
    kernel32.dll!HeapCreate
    kernel32.dll!HeapDestroy
    kernel32.dll!FindFirstFileA
    kernel32.dll!FindFirstFileW
    kernel32.dll!FindFirstFileExA
    kernel32.dll!FindFirstFileExW
    kernel32.dll!FindClose
    Advapi32.dll!OpenEventLogA
    Advapi32.dll!OpenEventLogW
    Advapi32.dll!OpenBackupEventLogA
    Advapi32.dll!OpenBackupEventLogW
    Advapi32.dll!CloseEventLog
    Advapi32.dll!OpenSCManagerA
    Advapi32.dll!OpenSCManagerW
    Advapi32.dll!OpenServiceA
    Advapi32.dll!OpenServiceW
    Advapi32.dll!CreateServiceA
    Advapi32.dll!CreateServiceW
    Advapi32.dll!CloseServiceHandle
    Advapi32.dll!RegCreateKeyA
    Advapi32.dll!RegCreateKeyW
    Advapi32.dll!RegCreateKeyExA
    Advapi32.dll!RegCreateKeyExW
    Advapi32.dll!RegOpenKeyA
    Advapi32.dll!RegOpenKeyW
    Advapi32.dll!RegOpenKeyExA
    Advapi32.dll!RegOpenKeyExW
    Advapi32.dll!RegConnectRegistryA
    Advapi32.dll!RegConnectRegistryW
    Advapi32.dll!RegOpenCurrentUser Windows 2000
    and above
    Advapi32.dll!RegOpenUserClassesRoot Windows
    2000 and above
    Advapi32.dll!RegCloseKey
  • +
    Win32 allocs

    kernel32.dll!GlobalAlloc
    kernel32.dll!GlobalReAlloc
    kernel32.dll!GlobalFree
    kernel32.dll!LocalAlloc
    kernel32.dll!LocalReAlloc
    kernel32.dll!LocalFree
    kernel32.dll!VirtualAlloc
    kernel32.dll!VirtualAllocEx
    kernel32.dll!VirtualFree
    kernel32.dll!VirtualFreeEx
    kernel32.dll!HeapAlloc same as NTDLL!RtlAllocateHeap
    kernel32.dll!HeapReAlloc same as NTDLL!RtlReAllocateHeap
    kernel32.dll!HeapFree same as NTDLL!RtlFreeHeap
    advapi32.dll!CreatePrivateObjectSecurity
    advapi32.dll!DestroyPrivateObjectSecurity
  • +  COM strings
    oleaut32.dll!SysAllocString
    oleaut32.dll!SysAllocStringByteLen
    oleaut32.dll!SysAllocStringLen
    oleaut32.dll!SysReAllocString
    oleaut32.dll!SysReAllocStringLen
    oleaut32.dll!SysFreeString
  • +  COM memory – CoTaskMem
    ole32.dll!CoTaskMemAlloc
    ole32.dll!CoTaskMemRealloc
    ole32.dll!CoTaskMemFree
  • +  COM arrays – SafeArray
    oleaut32.dll!SafeArrayCreate
    oleaut32.dll!SafeArrayCreateEx
    oleaut32.dll!SafeArrayCreateVector
    oleaut32.dll!SafeArrayCreateVectorEx
    oleaut32.dll!SafeArrayCopy
    oleaut32.dll!SafeArrayDestroy
    oleaut32.dll!SafeArrayAllocDescriptor
    oleaut32.dll!SafeArrayAllocDescriptorEx
    oleaut32.dll!SafeArrayDestroyDescriptor
    oleaut32.dll!SafeArrayAllocData
    oleaut32.dll!SafeArrayDestroyData
    oleaut32.dll!SafeArrayRedim
  • +  GDI resources
    user32.dll!LoadBitmapA
    user32.dll!LoadBitmapW
    gdi32.dll!CreateBitmap
    gdi32.dll!CreateBitmapIndirect
    gdi32.dll!CreateCompatibleBitmap
    gdi32.dll!CreateDiscardableBitmap
    gdi32.dll!CreateDIBitmap
    gdi32.dll!CreateDIBSection
    gdi32.dll!CreateBrushIndirect
    gdi32.dll!CreateSolidBrush
    gdi32.dll!CreatePatternBrush
    gdi32.dll!CreateDIBPatternBrush
    gdi32.dll!CreateDIBPatternBrushPt
    gdi32.dll!CreateHatchBrush
    gdi32.dll!CreateCompatibleDC
    gdi32.dll!CreateDCA
    gdi32.dll!CreateDCW
    gdi32.dll!CreateICA
    gdi32.dll!CreateICW
    user32.dll!GetDC
    user32.dll!GetDCEx
    user32.dll!GetWindowDC
    gdi32.dll!CreateFontA
    gdi32.dll!CreateFontW
    gdi32.dll!CreateFontIndirectA
    gdi32.dll!CreateFontIndirectW
    gdi32.dll!CreateMetaFileA
    gdi32.dll!CreateMetaFileW
    gdi32.dll!CreateEnhMetaFileA
    gdi32.dll!CreateEnhMetaFileW
    gdi32.dll!GetEnhMetaFileA
    gdi32.dll!GetEnhMetaFileW
    gdi32.dll!CreatePen
    gdi32.dll!CreatePenIndirect
    gdi32.dll!ExtCreatePen
    gdi32.dll!PathToRegion
    gdi32.dll!CreateEllipticRgn
    gdi32.dll!CreateEllipticRgnIndirect
    gdi32.dll!CreatePolygonRgn
    gdi32.dll!CreatePolyPolygonRgn
    gdi32.dll!CreateRectRgn
    gdi32.dll!CreateRectRgnIndirect
    gdi32.dll!CreateRoundRectRgn
    gdi32.dll!ExtCreateRegion
    gdi32.dll!CreateHalftonePalette
    gdi32.dll!CreatePalette
    gdi32.dll!DeleteObject
    gdi32.dll!DeleteDC
    gdi32.dll!DeleteMetaFile
    gdi32.dll!DeleteEnhMetaFile
    gdi32.dll!CloseMetaFile
    gdi32.dll!CloseEnhMetaFile
    user32.dll!ReleaseDC
  • + User32 resources
    user32.dll!CreateWindowExW includes CreateWindow
    macro
    user32.dll!CreateWindowExA includes CreateWindow
    macro
    user32.dll!CreateMDIWindowA
    user32.dll!CreateMDIWindowW
    user32.dll!CreateDialogParamA includes CreateDialog
    macro
    user32.dll!CreateDialogParamW includes CreateDialog
    macro
    user32.dll!CreateDialogIndirectParamA includes
    CreateDialogIndirect macro
    user32.dll!CreateDialogIndirectParamW includes
    CreateDialogIndirect macro
    user32.dll!DestroyWindow
    user32.dll!CreateCursor
    user32.dll!DestroyCursor
    user32.dll!SetTimer
    user32.dll!KillTimer
  • + System resources
    ntdll.dll!NtCreateKey
    ntdll.dll!NtOpenKey
    ntdll.dll!NtClose
    ntdll.dll!NtCreateFile
    ntdll.dll!NtOpenFile
    ntdll.dll!NtCreateDirectoryObject
    ntdll.dll!NtOpenDirectoryObject
    ntdll.dll!NtDuplicateObject
    ntdll.dll!NtCreateToken
    ntdll.dll!NtDuplicateToken
    ntdll.dll!NtOpenProcessToken
    ntdll.dll!NtOpenThreadToken
    ntdll.dll!NtConnectPort
    ntdll.dll!NtCreateMutant
    ntdll.dll!NtCreateNamedPipeFile
    ntdll.dll!NtCreatePort
    ntdll.dll!NtCreateProcess
    ntdll.dll!NtCreateSection
    ntdll.dll!NtCreateSemaphore
    ntdll.dll!NtCreateSymbolicLinkObject
    ntdll.dll!NtCreateTimer
    ntdll.dll!NtOpenEventPair
    ntdll.dll!NtOpenIoCompletion
    ntdll.dll!NtOpenProcess
    ntdll.dll!NtOpenSection
    ntdll.dll!NtOpenSemaphore
    ntdll.dll!NtOpenTimer
    ntdll.dll!NtCreateThread
    ntdll.dll!NtOpenEvent
    ntdll.dll!NtOpenMutant
    ntdll.dll!NtOpenSymbolicLinkObject
    ntdll.dll!NtOpenThread
    ntdll.dll!NtFilterToken Windows 2000 and
    above
    ntdll.dll!NtCreateJobObject Windows 2000
    and above
    ntdll.dll!NtOpenJobObject Windows 2000 and
    above
    ntdll.dll!NtCreateWaitablePort Windows 2000
    and above
    ntdll.dll!NtSecureConnectPort Windows 2000
    and above
    ntdll.dll!NtAcceptConnectPort
    ntdll.dll!NtCreateEvent
    ntdll.dll!NtCreateEventPair
    ntdll.dll!NtCreateIoCompletion
    ntdll.dll!NtCreateMailslotFile
    ntdll.dll!NtCreateProfile
  • + System memory
    ntdll.dll!NtAllocateVirtualMemory
    ntdll.dll!NtFreeVirtualMemory

 

Comments are closed.