无法编译 ecepass.c

unable to compile ecepass.c

我一辈子都无法编译这段旧代码。我正试图用它来测试客户端的外部漏洞。我在 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

错误:

In file included from ecepass.c:8:0: ecepass.c:72:5: error: expected declaration specifiers or '...' before numeric constant int in_cksum(u_short *addr, int len)

PasteBin 上发布的代码中,第 #8 行(和 #24 :d) 有声明:#include <machine/in_cksum.h>

由于我不在 Nix,我在 Internet 上搜索了该文件并找到了 2 个参考文献:

在两者中(在 #40+ 行附近),似乎 in_cksum 是预处理器宏:

#define in_cksum(m, len)        in_cksum_skip(m, len, 0)

将您的函数名称(以及您代码中所有引用它的地方)更改为不是宏的名称,或者实际上是另一个已定义的标识符,例如checksum(希望它尚未定义 :)),你应该没问题(也可能适用于你的其他函数)。
或者作为替代方案,删除machine/in_cksum.h 包含(直接 间接(通过其他嵌套包含)),但这可能会有点困难(另外,我没有检查所有代码以查看是否使用了 include 中的其他函数。