无法编译ecepass.c
我一生都不能编译这段旧代码。我正试图使用它来测试客户端的外部漏洞。我让它在FreeBSD11中运行,并用gcc编译。知道我为什么会犯这个错误吗无法编译ecepass.c,c,gcc,freebsd,C,Gcc,Freebsd,我一生都不能编译这段旧代码。我正试图使用它来测试客户端的外部漏洞。我让它在FreeBSD11中运行,并用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 &g
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);
}
完整代码如下:
错误:
在ecepass.c中包含的文件中:8:0:
ecepass.c:72:5:错误:应为声明说明符或数值常量前的“…”
整数整和(整数短*地址,整数长度)
在PasteBin上发布的代码中,第8行(和第24行:d)有这样一句话:\include
由于我不在尼克斯,我在互联网上搜索了该文件,找到了两个参考文献:
#在(m,len)中定义(m,len)在(m,len,0)中跳过
将函数名(以及代码中引用函数的所有位置)更改为非宏的名称,或者实际上更改为另一个已定义的标识符,例如校验和(希望尚未定义:),您应该可以(也可以应用于其他函数)。
或者作为替代,删除machine/in_cksum.h包含(direct和indirect(通过其他嵌套包含)),但这可能会有点困难(而且,我没有检查所有代码以查看是否使用了包含中的其他函数)。我想你忘了包含一些东西。。。joking@Stargateur你看过完整的资料来源了吗?他几乎囊括了所有的东西:)他两次囊括了一堆。是的,我意识到它在里面有两次。我把它们拿了出来,但这并没有改变错误。我有一个可怕的怀疑,我无法测试自己,因为我无法方便地访问FreeBSD 11。请将_cksum中的函数名更改为_cksum中的计算,然后尝试重新编译。(您还需要更改所有调用者以匹配。)如果这样可以修复它,我将解释。这允许它编译。非常感谢。我没有完全正确的细节,但“其中一个系统头在_cksum中定义为预处理器宏”是我可怕的怀疑。很多与*BSD特定的网络相关的头文件都没有考虑到名称空间的整洁性。@zwol:显然,这种怀疑只能从以下领域的大量经验中产生:)@CristiFati让我们说我仍然记得您必须终止SCSI链的所有三个位置。@sethh:这是否符合您问题的答案?