无法编译ecepass.c

set*_*thh 2 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);
}
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)

Cri*_*ati 5

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包含(直接间接(通过其他嵌套包含)),但这可能会有点困难(同样,我没有检查所有代码,看看是否有其他功能从包括使用).