diff options
author | Jakob Kaivo <jkk@ung.org> | 2020-06-30 16:09:31 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2020-06-30 16:09:31 -0400 |
commit | 67a110655903e42f5521576451c100c527b5c45a (patch) | |
tree | 5e0acc07ec42729612620d0f3b67be6aa795c240 | |
parent | 388f3dfd269368b26990f86d12ea6ab1c4b7c4e6 (diff) |
add README
-rw-r--r-- | README.md | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..1b606e4 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +MapAlloc +-------- +MapAlloc is a memory mapping based allocator with an API compatible with +the C <stdlib.h> dynamic memory functions. By using memory mappings for each +allocation, MapAlloc is able to provide guard pages to detect heap overflow +and underflow, as well as potentially identifying use-after-free or double-free +errors (in all cases, your program will crash, which is preferable to being +silently exploited). + +MapAlloc also maintains metadata independently from the heap, so it eliminates +an entire class of vulnerabilities which rely on easy access to this metadata. + +Building +-------- +Just run `make`. This will give you `libmapalloc.a`, which you can statically +link into your own programs, as well as `libwrapalloc.so`, which can be used +with `LD_PRELOAD` to override your standard C library's dynamic memory +functions. + +Including in your program +------------------------- +In your source file: + +```c +#include "mapalloc.h" +``` + +This will give you: + +```c +void *MA_malloc(size_t n); +void *MA_calloc(size_t nelem, size_t elsize); +void *MA_realloc(void *ptr, size_t n); +void MA_free(void *ptr); +``` + +Or, you can ask for macros to provide the same interfaces as <stdlib.h> +(note that if you need to also include <stdlib.h>, you should include it +before "mapalloc.h"): + +```c +#define MA_OVERRIDE_STDLIB +#include "mapalloc.h" +```c + +This will give you access to the same set of functions as above, but also +provide macros: + +```c +#define malloc(n) MA_malloc(n) +#define calloc(n, e) MA_calloc(n, e) +#define realloc(p, n) MA_realloc(p, n) +#define free(p) MA_free(p) +``` + +Link your program with `-lmapalloc` (you may also need to specify +`-L` with the path to where `libmapalloc.a` is if you don't copy it to part +of your linker's default search path). |