我使用以下 connect()
调用连接到远程主机:
result = connect(sockfd, (struct sockaddr *)&address, len);
其中地址表示 sockaddr_in
结构,转换为 sockaddr *
用于 connect()
执行。但是,使用库注入(inject),我可以通过定义自己的连接函数来覆盖连接调用:
int connect (int fd, __CONST_SOCKADDR_ARG addr, socklen_t len)
{
// My code in between
}
然而,我无法将第二个参数(__CONST_SOCAKADDR_ARG
)强制转换为 sockaddr_in
指针或 sockaddr
。 __CONST_SOCKADDR_ARG
宏扩展为 const struct sockaddr *
。下面一行:
struct sockaddr_in* providedIPv4AddressStructure = (struct sockaddr_in*) addr;
让我看到以下错误指示:
error: cannot convert to a pointer type
当然还有:
warning: initialization from incompatible pointer type [enabled by default]
有人对如何正确地将 __CONST_SOCAKADDR_ARG
转换为 sockaddr_in *
有任何提示吗?
谢谢!
最佳答案
无法重现:
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
int main() {
__CONST_SOCKADDR_ARG p;
struct sockaddr_in *q;
q = (struct sockaddr_in *) p;
}
没有错误,只有来自未使用变量的警告:
$ gcc -std=c11 -Wall -pedantic test.c
test.c: In function ‘main’:
test.c:7:25: warning: variable ‘q’ set but not used [-Wunused-but-set-variable]
test.c:9:7: warning: ‘p’ is used uninitialized in this function [-Wuninitialized]
关于c - 使用 LD_PRELOAD 覆盖连接调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19314842/