1

请看代码片段

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 指向有效内存。仍然不知道问题是什么,所以请帮助我。

提前致谢 !

4

1 回答 1

1

好吧,这是你的问题:

memcmp((void*)(ip_hdr->saddr), ...

这会将源 IP 地址解释为指针。你想做的是这样的:

memcmp(&ip_hdr->saddr, ...)
于 2012-04-21T16:28:42.480 回答