-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathwrapper.cpp
More file actions
77 lines (59 loc) · 2.83 KB
/
wrapper.cpp
File metadata and controls
77 lines (59 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// #define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
#include <sys/socket.h>
extern "C" {
typedef void* (*mallocFuncType)(size_t) ;
typedef void (*freeFuncType)(void *);
typedef void* (*memcpyFuncType)(void*, void*, size_t);
typedef ssize_t (*recvFuncType)(int, void *, size_t, int);
typedef ssize_t (*recvfromFuncType)(int, void*, size_t, int, struct sockaddr*, socklen_t*);
typedef ssize_t (*recvmsgFuncType)(int, struct msghdr*, int);
typedef ssize_t (*readFuncType)(int, void*, size_t);
typedef ssize_t (*writeFuncType)(int, const void*, size_t);
// void *malloc(size_t size) {
// mallocFuncType real_malloc = (mallocFuncType) dlsym(RTLD_NEXT, "malloc");
// void *p = real_malloc(size);
// fprintf(stderr, "in malloc(size: 0x%lx) => %p\n", size, p);
// return p;
// }
// void free(void *p) {
// freeFuncType real_free = (freeFuncType) dlsym(RTLD_NEXT, "free");
// fprintf(stderr, "in free(p: %p)\n", p);
// }
void* memcpy(void *dst, void *src, size_t size) {
memcpyFuncType real_memcpy = (memcpyFuncType) dlsym(RTLD_NEXT, "memcpy");
// fprintf(stderr, "in memcpy(dst: %p, src: %p, size: 0x%lx)\n", dst, src, size);
return real_memcpy(dst, src, size);
}
ssize_t recv(int socket, void *buffer, size_t length, int flags) {
recvFuncType real_recv = (recvFuncType) dlsym(RTLD_NEXT, "recv");
ssize_t ret = real_recv(socket, buffer, length, flags);
fprintf(stderr, "in recv(socket: %d, buffer: %p, length: 0x%lx, flags: %d) => %zd\n", socket, buffer, length, flags, ret);
return ret;
}
ssize_t recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *address, socklen_t *address_len) {
recvfromFuncType real_recvfrom = (recvfromFuncType) dlsym(RTLD_NEXT, "recvfrom");
ssize_t ret = real_recvfrom(socket, buffer, length, flags, address, address_len);
fprintf(stderr, "in recvfrom(socket: %d, buffer: %p, length: 0x%lx, flags: %d) => %zd\n", socket, buffer, length, flags, ret);
return ret;
}
ssize_t recvmsg(int socket, struct msghdr *mhdr, int flags) {
recvmsgFuncType real_recvmsg = (recvmsgFuncType) dlsym(RTLD_NEXT, "recvmsg");
ssize_t ret = real_recvmsg(socket, mhdr, flags);
fprintf(stderr, "in recvmsg(socket: %d, mhdr: %p, flags: %d) => %zd\n", socket, mhdr, flags, ret);
return ret;
}
ssize_t read(int fd, void *buf, size_t count) {
readFuncType real_read = (readFuncType) dlsym(RTLD_NEXT, "read");
ssize_t ret = real_read(fd, buf, count);
fprintf(stderr, "in read(fd: %d, buf: %p, size: 0x%lx) => %zd\n", fd, buf, count, ret);
return ret;
}
// ssize_t write(int fd, const void *buf, size_t count) {
// writeFuncType real_write = (writeFuncType) dlsym(RTLD_NEXT, "write");
// ssize_t ret = real_write(fd, buf, count);
// fprintf(stderr, "in write(fd: %d, buf: %p, size: 0x%lx) => %zd\n", fd, buf, count, ret);
// return ret;
// }
}