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
| ##define _GUN_SOURCE ##include <dlfcn.h> ##include <sys/types.h> ##include <sys/socket.h> ##include <mysql/mysql.h>
typedef int (*connect_t)(int sockfd, const struct sockaddr *addr, socklen_t addrlen); connect_t connect_f = NULL;
typedef ssize_t (*recv_t)(int sockfd, void *buf, size_t len, int flags); recv_t recv_f = NULL;
typedef ssize_t (*send_t)(int sockfd, const void* buf, size_t len, int flags); send_t send_f = NULL;
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen){ printf("connect\n"); return connect_f(sockfd, addr, addrlen); } ssize_t recv(int sockfd, void *buf, size_t len, int flags){ printf("recv\n"); return recv_f(sockfd, buf, len, flags); } ssize_t send(int sockfd, const void* buf, size_t len, int flags){ printf("send\n"); return send_f(sockfd, buf, len, flags); }
void init_hook(void) { if(connect_f == NULL) connect_f = dlsym(RTLD_NEXT, "connect"); if(recv_f == NULL) recv_f = dlsym(RTLD_NEXT, "recv"); if(send_f == NULL) send_f = dlsym(RTLD_NEXT, "send"); }
int main() { init_hook();
MYSQL *mysql = mysql_init(NULL); if(!mysql){ printf("mysql_init failed\n"); return 0; } if(!mysql_real_connect(mysql, "127.0.0.1", "root", "123456", "KING_DB", 3306, NULL, CLIENT_FOUND_ROWS)){ printf("mysql_real_connect failed\n"); return 0; } printf("mysql_real_connect success\n"); }
|