无法编译ecepass.c

时间:2017-06-19 22:12:43

标签: c gcc freebsd

我不能为我的生活编译这个旧代码。我正在尝试使用它来测试客户端的外部漏洞。我让它在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);
}

此处的完整代码:https://pastebin.com/MGSYycmB

错误:

  

ecepass.c中包含的文件:8:0:   ecepass.c:72:5:错误:预期的声明说明符或数字常量前的'...'    int in_cksum(u_short * addr,int len)

1 个答案:

答案 0 :(得分:5)

pastebin 上发布的代码中,在行#8 (和#24 :d)处有以下声明:{{1} }

由于我不在 Ux ,我在互联网上搜索了该文件并找到了2个参考文献:

在它们中(在#40 + 行附近),似乎$(this + '.treeview').addClass('active'); 是预处理器宏:

#include <machine/in_cksum.h>

将函数的名称(以及代码中引用它的所有位置)更改为非宏的内容,或者事实上另一个定义的标识符,例如: in_cksum(希望它还没有定义:)),你应该没问题(也可能适用于你的其他功能)。或者作为替代方案,删除 machine / in_cksum。 h 包含(直接间接(通过其他嵌套包含)),但这可能会有点困难(同样,我没有检查所有代码以查看是否有其他功能从使用包括。)