IFNAMSIZ = 16
static STATUS_CODE __bind(int sock_fd, const char *interface)
{
struct sockaddr sock_addr;
memset(&sock_addr, '\0', sizeof(sock_addr));
strncpy(sock_addr.sa_data, interface, IFNAMSIZ);
sock_addr.sa_family = AF_PACKET;
if (bind(sock_fd, &sock_addr, sizeof(struct sockaddr)) < 0) {
EPRINT("bind failed: %s", strerror(errno));
return FAILURE;
}
return SUCCESS;
}
发布于 2018-05-30 10:13:31
有人能解释一下为什么会发生这种分段错误吗
在Linux上,您的代码可能会出现堆栈缓冲区溢出:
strncpy(sock_addr.sa_data, interface, IFNAMSIZ);
假设是IFNAMSIZ = 16
,因为sizeof(sa_data) == 14
。然而,这不太可能在strncpy
中导致SIGSEGV
--堆栈上还有很多其他数据。
更有可能导致崩溃的原因是您传入的interface
是NULL
。通过使用调试信息(通常是-g
标志)编译您的程序,并在调试器下运行它,这应该是显而易见的。
https://stackoverflow.com/questions/50582009
复制相似问题