2 #include "communication.h"
8 void *(*aesalon_overload_malloc_ptr
)(size_t);
9 void *(*aesalon_overload_realloc_ptr
)(void *, size_t);
10 void (*aesalon_overload_free_ptr
)(void *);
13 void __attribute__((constructor
)) construct() {
14 aesalon_overload_malloc_ptr
= dlsym(RTLD_NEXT
, "malloc");
15 aesalon_overload_realloc_ptr
= dlsym(RTLD_NEXT
, "realloc");
16 aesalon_overload_free_ptr
= dlsym(RTLD_NEXT
, "free");
19 pipe_fd
= getenv("AESALON_BOOTSTRAP_PIPE");
21 sscanf(pipe_fd
, "%i", &aesalon_overload_communication_pipefd
);
22 aesalon_overload_communication_enabled
= 1;
26 void __attribute__((destructor
)) destruct() {
27 if(aesalon_overload_communication_enabled
)
28 close(aesalon_overload_communication_pipefd
);
31 void *malloc(size_t size
) {
33 void *memory
= aesalon_overload_malloc_ptr(size
);
34 snprintf(buffer
, 1024, "malloc:%s:%x:%i\0", "<unknown scope>", memory
, size
);
35 aesalon_overload_send_string(buffer
);
39 void *realloc(void *ptr
, size_t size
) {
41 void *memory
= aesalon_overload_realloc_ptr(ptr
, size
);
42 snprintf(buffer
, 1024, "malloc:%s:%x:%i:%x\0", "<unknown scope>", ptr
, size
, memory
);
43 aesalon_overload_send_string(buffer
);
47 void free(void *ptr
) {
49 snprintf(buffer
, 1024, "free:%s:%x\0", "<unknown scope>", ptr
);
50 aesalon_overload_send_string(buffer
);
51 aesalon_overload_free_ptr(ptr
);