1* Get heap-profile-table.cc using DeleteMatchingFiles
2* Get heap-profile-table.cc using FillProcSelfMaps, DumpProcSelfMaps
3* Play around with ExperimentalGetStackTrace
4* Support the windows-level memory-allocation functions?  See
5    /home/build/googleclient/earth/client/tools/memorytracking/client/memorytrace/src/memorytrace.cpp
6    /home/build/googleclient/total_recall/common/sitestep/*
7    http://www.internals.com/articles/apispy/apispy.htm
8    http://www.wheaty.net/APISPY32.zip
9* Verify /proc/xxx/maps:
10    http://www.geocities.com/wah_java_dotnet/procmap/index.html
11* Figure out how to edit the executable IAT so tcmalloc.dll is loaded first
12* Use QueryPerformanceCounter instead of GetTickCount() (also for sparsehash)
13
14----
15More info on windows-level memory-allocation functions:
16   C runtime malloc
17   LocalAlloc
18   GlobalAlloc
19   HeapAlloc
20   VirtualAlloc
21   mmap stuff
22
23malloc, LocalAlloc and GlobalAlloc call HeapAlloc, which calls
24VirtualAlloc when needed, which calls VirtualAllocEx (the __sbrk equiv?)
25
26siggi sez: If you want to do a generic job, you probably need to
27preserve the semantics of all of these Win32 calls:
28   Heap32First
29   Heap32ListFirst
30   Heap32ListNext
31   Heap32Next
32   HeapAlloc
33   HeapCompact
34   HeapCreate
35   HeapCreateTagsW
36   HeapDestroy
37   HeapExtend
38   HeapFree
39   HeapLock
40   HeapQueryInformation
41   HeapQueryTagW
42   HeapReAlloc
43   HeapSetInformation
44   HeapSize
45   HeapSummary
46   HeapUnlock
47   HeapUsage
48   HeapValidate
49   HeapWalk
50
51kernel32.dll export functions and nt.dll export functions:
52   http://www.shorthike.com/svn/trunk/tools_win32/dm/lib/kernel32.def
53   http://undocumented.ntinternals.net/
54
55You can edit the executable IAT to have the patching DLL be the
56first one loaded.
57
58Most complete way to intercept system calls is patch the functions
59(not the IAT).
60
61Microsoft has somee built-in routines for heap-checking:
62   http://support.microsoft.com/kb/268343
63
64----
65Itimer replacement:
66   http://msdn2.microsoft.com/en-us/library/ms712713.aspx
67
68----
69Changes I've had to make to the project file:
70
710) When creating the project file, click on "no autogenerated files"
72
73--- For each project:
741) Alt-F7 -> General -> [pulldown "all configurations" ] -> Output Directory -> $(SolutionDir)$(ConfigurationName)
752) Alt-F7 -> General -> [pulldown "all configurations" ] -> Intermediate Directory -> $(ConfigurationName)
76
77--- For each .cc file:
781) Alt-F7 -> C/C++ -> General -> [pulldown "all configurations"] -> Additional Include Directives --> src/windows + src/
792) Alt-F7 -> C/C++ -> Code Generation -> Runtime Library -> Multi-threaded, debug/release, DLL or not
80
81--- For DLL:
823) Alt-F7 -> Linker -> Input -> [pulldown "all configurations" ] -> Module Definition File -> src\windows\vc7and8.def
83--- For binaries depending on a DLL:
843) Right-click on project -> Project Dependencies -> [add dll]
85--- For static binaries (not depending on a DLL)
863) Alt-F7 -> C/C++ -> Command Line -> [pulldown "all configurations"] -> /D PERFTOOLS_DLL_DECL=
87