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