LD_PRELOAD套接字调用导致bind()syscall出现分段错误

时间:2016-12-14 13:29:53

标签: segmentation-fault bind ld-preload

我正在尝试LD_PRELOAD(Float)一个带有简单LD_PRELOAD=./my_lib.so ./a.out套接字调用的可执行文件。 我想接听电话,然后使用AF_INET地址系列代替AF_VSOCKAF_INETsocket()效果很好。问题是当我调用connect()时出现分段错误 (bind()

lib.so:

segfault at 60 ip 00007f4f4b2ea59a sp 00007fff9eb53dd8 error 4 in libc-2.13.so[7f4f4b261000+184000]

我打印了“Intercepted”,然后是typedef int (*bind_orig_ftype)(int sockfd, const struct sockaddr *addr,socklen_t addrlen); int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) { bind_orig_ftype bind_original; struct sockaddr_vm vmaddr; bind_original= (bind_orig_ftype) dlsym(RTLD_NEXT,"bind"); vmaddr.svm_family = AF_VSOCK; vmaddr.svm_cid = 42; vmaddr.svm_port = 1234; printf("Intercepted\n"); return (bind_original(sockfd,(struct sockaddr *) &vmaddr,sizeof(struct sockaddr))); } 。我认为问题是关于segfault将它传递给bind_original,但是当我在struct sockaddr_vm调用bind时,没有LD_PRELOADing,一切运行良好。

有什么想法吗?或者如何检查sefault发生的位置?

0 个答案:

没有答案