打印

这个是什么搜索算法

[复制链接]
297|4
跳转到指定楼层
楼主
void searchfile(const char *filename, int fd, const unsigned char *value, const unsigned char *mask, int len)
{
    off_t offset = 0;
    unsigned char buf[1024];

    len--;

    while (1)
    {
        int r;

        memmove(buf, buf + sizeof(buf) - len, len);
        r = read(fd, buf + len, sizeof(buf) - len);

        if (r < 0)
        {
            perror("read");
            return;
        } else if (!r)
            return;

        int o, i;
        for (o = offset ? 0 : len; o < r; ++o)
        {
            for (i = 0; i <= len; ++i)
                if ((buf[o + i] & mask[i]) != value[i])
                    break;
            if (i > len)
            {
                unsigned long long pos = (unsigned long long)(offset + o - len);
                printf("%s: %08llx\n", filename, pos);
                if (bytes_before || bytes_after)
                    dump_context(fd, pos);
            }
        }

        offset += r;

    }
}

使用特权

评论回复

相关资料

沙发
 楼主 | 2019-7-20 10:41 | 只看该作者
for (;bytes_to_read;)
这句什么含义?相当于while(1)???

使用特权

评论回复
板凳
| 2019-7-21 15:18 | 只看该作者

使用特权

评论回复
地板
| 2019-7-23 13:10 | 只看该作者
limee 发表于 2019-7-20 10:41
for (;bytes_to_read;)
这句什么含义?相当于while(1)???

若bytes_to_read为真,执行 for(),否则,不执行。

使用特权

评论回复
5
| 2019-7-23 18:00 | 只看该作者
收藏学习

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /6 下一条

在线客服 快速回复 返回顶部 返回列表