请查看代码段
char ipAddr[] = {192, 168, 88, 2};
struct iphdr *ip_hdr = (struct iphdr*)(some_valid_eth_hdr_pointer + 1);
if (0 == memcmp((void*)(ip_hdr->saddr), (void*)ipAddr, 4)) /*memcmp cause my whole system crashed*/
{
printk("ip source addr matched\n");
}
代码是从 linux netfilter钩子函数中提取的,这意味着 ip_hdr-> saddr 可能属于内核空间内存,我很确定ip_hdr指向有效内存。仍然不知道问题是什么,所以请帮助我。
提前感谢!
答案 0 :(得分:1)
嗯,这是你的问题:
memcmp((void*)(ip_hdr->saddr), ...
这将源IP地址解释为指针。你想做的是:
memcmp(&ip_hdr->saddr, ...)