【发布时间】:2011-07-11 07:17:20
【问题描述】:
我试图弄清楚这是否会以某种方式溢出:
void print_address(char *p)
{
arp_ hw;
int i;
hw.length = (size) *(p + _OFFSET1); //189 + 4 = 193
memcpy(hw.addr, packet + _OFFSET2, hw.length);
return;
}
其中数据包是从 .txt 文件读取的输入?
【问题讨论】:
-
您应该将 memcpy 的大小限制为您分配的目的地的预定最大长度。您可能只想简单地拒绝任何更长的警告消息,因为它可能表示攻击尝试,或者网络或源程序出现故障。