blob: 708ec237ac4d710a1060bec59dc82a2579994ddb [file] [log] [blame]
* Get heap-profile-table.cc using DeleteMatchingFiles
* Get heap-profile-table.cc using FillProcSelfMaps, DumpProcSelfMaps
* Play around with ExperimentalGetStackTrace
* Support the windows-level memory-allocation functions? See
/home/build/googleclient/earth/client/tools/memorytracking/client/memorytrace/src/memorytrace.cpp
/home/build/googleclient/total_recall/common/sitestep/*
http://www.internals.com/articles/apispy/apispy.htm
http://www.wheaty.net/APISPY32.zip
* Verify /proc/xxx/maps:
http://www.geocities.com/wah_java_dotnet/procmap/index.html
* Figure out how to edit the executable IAT so tcmalloc.dll is loaded first
* Use QueryPerformanceCounter instead of GetTickCount() (also for sparsehash)
----
More info on windows-level memory-allocation functions:
C runtime malloc
LocalAlloc
GlobalAlloc
HeapAlloc
VirtualAlloc
mmap stuff
malloc, LocalAlloc and GlobalAlloc call HeapAlloc, which calls
VirtualAlloc when needed, which calls VirtualAllocEx (the __sbrk equiv?)
siggi sez: If you want to do a generic job, you probably need to
preserve the semantics of all of these Win32 calls:
Heap32First
Heap32ListFirst
Heap32ListNext
Heap32Next
HeapAlloc
HeapCompact
HeapCreate
HeapCreateTagsW
HeapDestroy
HeapExtend
HeapFree
HeapLock
HeapQueryInformation
HeapQueryTagW
HeapReAlloc
HeapSetInformation
HeapSize
HeapSummary
HeapUnlock
HeapUsage
HeapValidate
HeapWalk
kernel32.dll export functions and nt.dll export functions:
http://www.shorthike.com/svn/trunk/tools_win32/dm/lib/kernel32.def
http://undocumented.ntinternals.net/
You can edit the executable IAT to have the patching DLL be the
first one loaded.
Most complete way to intercept system calls is patch the functions
(not the IAT).
Microsoft has somee built-in routines for heap-checking:
http://support.microsoft.com/kb/268343
----
Itimer replacement:
http://msdn2.microsoft.com/en-us/library/ms712713.aspx
----
Changes I've had to make to the project file:
0) When creating the project file, click on "no autogenerated files"
--- For each project:
1) Alt-F7 -> General -> [pulldown "all configurations" ] -> Output Directory -> $(SolutionDir)$(ConfigurationName)
2) Alt-F7 -> General -> [pulldown "all configurations" ] -> Intermediate Directory -> $(ConfigurationName)
--- For each .cc file:
1) Alt-F7 -> C/C++ -> General -> [pulldown "all configurations"] -> Additional Include Directives --> src/windows + src/
2) Alt-F7 -> C/C++ -> Code Generation -> Runtime Library -> Multi-threaded, debug/release, DLL or not
--- For DLL:
3) Alt-F7 -> Linker -> Input -> [pulldown "all configurations" ] -> Module Definition File -> src\windows\vc7and8.def
--- For binaries depending on a DLL:
3) Right-click on project -> Project Dependencies -> [add dll]
--- For static binaries (not depending on a DLL)
3) Alt-F7 -> C/C++ -> Command Line -> [pulldown "all configurations"] -> /D PERFTOOLS_DLL_DECL=