00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef _GOOGLE_MALLOC_HOOK_H
00040 #define _GOOGLE_MALLOC_HOOK_H
00041
00042 #include <stddef.h>
00043 #include <sys/types.h>
00044
00045 class MallocHook {
00046 public:
00047
00048
00049 typedef void (*NewHook)(void* ptr, size_t size);
00050 inline static NewHook GetNewHook() { return new_hook_; }
00051 inline static NewHook SetNewHook(NewHook hook) {
00052 NewHook result = new_hook_;
00053 new_hook_ = hook;
00054 return result;
00055 }
00056 inline static void InvokeNewHook(void* p, size_t s) {
00057 if (new_hook_ != NULL) (*new_hook_)(p, s);
00058 }
00059
00060
00061
00062 typedef void (*DeleteHook)(void* ptr);
00063 inline static DeleteHook GetDeleteHook() { return delete_hook_; }
00064 inline static DeleteHook SetDeleteHook(DeleteHook hook) {
00065 DeleteHook result = delete_hook_;
00066 delete_hook_ = hook;
00067 return result;
00068 }
00069 inline static void InvokeDeleteHook(void* p) {
00070 if (delete_hook_ != NULL) (*delete_hook_)(p);
00071 }
00072
00073
00074
00075 typedef void (*MmapHook)(void* result,
00076 void* start,
00077 size_t size,
00078 int protection,
00079 int flags,
00080 int fd,
00081 off_t offset);
00082 inline static MmapHook GetMmapHook() { return mmap_hook_; }
00083 inline static MmapHook SetMmapHook(MmapHook hook) {
00084 MmapHook result = mmap_hook_;
00085 mmap_hook_ = hook;
00086 return result;
00087 }
00088 inline static void InvokeMmapHook(void* result,
00089 void* start,
00090 size_t size,
00091 int protection,
00092 int flags,
00093 int fd,
00094 off_t offset) {
00095 if (mmap_hook_ != NULL) (*mmap_hook_)(result,
00096 start, size,
00097 protection, flags,
00098 fd, offset);
00099 }
00100
00101
00102 typedef void (*MunmapHook)(void* ptr, size_t size);
00103 inline static MunmapHook GetMunmapHook() { return munmap_hook_; }
00104 inline static MunmapHook SetMunmapHook(MunmapHook hook) {
00105 MunmapHook result = munmap_hook_;
00106 munmap_hook_ = hook;
00107 return result;
00108 }
00109 inline static void InvokeMunmapHook(void* p, size_t size) {
00110 if (munmap_hook_ != NULL) (*munmap_hook_)(p, size);
00111 }
00112
00113 private:
00114 static NewHook new_hook_;
00115 static DeleteHook delete_hook_;
00116 static MmapHook mmap_hook_;
00117 static MunmapHook munmap_hook_;
00118
00119 };
00120
00121 #endif