| * 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= |