|
|
Leak BrowserOverview |
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.
This list is a list of some of the functions tracked by an older version of Leak Browser .
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 |
Unlike other tools it 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.