我不能为我的生活编译这个旧代码.我正在尝试使用它来测试客户端的外部漏洞.我让它在FreeBSD 11中运行并使用gcc进行编译.知道我为什么会收到这个错误吗?
int in_cksum(u_short *addr, int len)
{
int sum;
int nleft;
u_short ans;
u_short *w;
sum = 0;
ans = 0;
nleft = len;
w = addr;
while (nleft > 1) {
sum += *w++;
nleft -= 2;
}
if (nleft == 1) {
*(u_char *)(&ans) = *(u_char *)w;
sum += ans;
}
return (sum);
}
Run Code Online (Sandbox Code Playgroud)
完整代码:https://pastebin.com/MGSYycmB
错误:
在ecepass.c中包含的文件中:8:0:ecepass.c:72:5:错误:预期的声明说明符或数字常量int in_cksum之前的'...'(u_short*addr,int len)
在pastebin上发布的代码中,在#8行(和#24:d)处有以下声明:#include <machine/in_cksum.h>
由于我不在Ux上,我在Internet上搜索了该文件并找到了2个引用:
在它们中(第40 +行左右),似乎in_cksum是一个预处理器宏:
#define in_cksum(m, len) in_cksum_skip(m, len, 0)
Run Code Online (Sandbox Code Playgroud)
将函数的名称(以及代码中引用它的所有位置)更改为非宏的内容,或者事实上另一个定义的标识符,例如checksum(希望它尚未定义:)),你应该是很好(也可能适用于你的其他功能).
或者作为替代方法,删除机器/ in_cksum.h包含(直接和间接(通过其他嵌套包含)),但这可能会有点困难(同样,我没有检查所有代码,看看是否有其他功能从包括使用).