0

我正在尝试计算 BPF 中传入的指针字符串,但我留下了这个我无法理解的非常长的错误。我基本上是在尝试在 BPF 中重新创建 strlen 来计算我传入的字符串 * 的大小。错误中有趣的区域可以在这里看到:

R1 最小值超出处理的允许内存范围 2353 insns(限制 1000000) max_states_per_insn 1 total_states 242 peak_states 242 mark_read 2

关于如何解决其他问题的任何想法?

这是我写的代码:

int stringLength(char* txt)
{
    int i=0,count=0;
    
    while(txt[i++]!='\0'){
        count+=1;
    }
    
    return count;
}

这是我在主 BPF 函数中调用的辅助函数。

粘贴箱错误

4

1 回答 1

1

该错误与超出范围的访问有关。您的条件while(txt[i++]!='\0')假设字符串确实以 NULL 字符结尾,但实际上您(或更具体地说,验证者)对此没有任何保证。尝试扩展条件以确保您不会超出字符串的长度。

于 2021-07-30T16:32:50.630 回答