基于Netlink的LKM项目中strcmp函数使用问题求助
解决Netlink LKM中消息载荷的判断问题
你的核心问题是错误使用了strcmp函数:strcmp("%s\n", "hide")里的第一个参数是格式化字符串,并非实际要判断的Netlink消息载荷,完全起不到比较作用。
正确写法
直接将(char *)nlmsg_data(nlh)作为strcmp的第一个参数,和目标字符串"hide"对比即可:
// 需确保nlmsg_data返回的内容是以'\0'结尾的C风格字符串 if (strcmp((char *)nlmsg_data(nlh), "hide") == 0) { // 载荷内容为"hide"时执行的逻辑 }
额外注意事项
- 必须保证Netlink消息的载荷以空字符('\0')终止,否则strcmp会读取越界,引发内核错误。如果用户态发送的消息未添加终止符,需要在内核中先检查载荷长度,再手动补全'\0'。
- 若用户态发送的是带换行符的"hide\n",则比较时要写成
strcmp((char *)nlmsg_data(nlh), "hide\n") == 0。 - 建议先验证消息合法性:用
nlmsg_ok(nlh, len)确认Netlink消息结构有效,再用nlmsg_len(nlh)检查载荷长度符合预期,避免空指针或越界访问。
内容的提问来源于stack exchange,提问作者Puffy
相关产品推荐
相关产品推荐

