<div dir="ltr"><div>Hello, strace community!<br></div><div><br></div><div>Last week, I focus on bpf code construct. Add a function to dump bpf code for</div><div>debug, which will be remove when the project complete. Now trace syscall number</div><div>in [lower, uppder) only need two bpf instructions. For example:</div><div><br></div><div>$ ./strace -d -etrace=1,2,3,4,5 ls >/dev/null</div><div># offsetof(struct seccomp_data, arch) == 4</div><div># offsetof(struct seccomp_data, nr) == 0</div><div>STMT(BPF_LD + BPF_W + BPF_ABS, 4)</div><div><br></div><div>JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 11, 3221225534)</div><div>STMT(BPF_LD + BPF_W + BPF_ABS, 0)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 1, 1)<span style="white-space:pre">    </span># lower</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 7, 6)<span style="white-space:pre">       </span># upper</div><div>JUMP(BPF_JMP + BPF_JEQ + BPF_K, 6, 0, 59)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 2, 1073741824)</div><div>STMT(BPF_LD + BPF_W + BPF_ABS, 4)</div><div>JUMP(BPF_JMP + BPF_JEQ + BPF_K, 3, 0, 3221225534)</div><div>STMT(BPF_LD + BPF_W + BPF_ABS, 0)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 1, 0, 335)</div><div>STMT(BPF_RET + BPF_K, 2147418112)<span style="white-space:pre">             </span># ALLOW</div><div>STMT(BPF_RET + BPF_K, 2146435072)<span style="white-space:pre">              </span># TRACE</div><div><br></div><div>JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 13, 1073741827)</div><div>STMT(BPF_LD + BPF_W + BPF_ABS, 0)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 1, 1)<span style="white-space:pre">     </span># lower</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 9, 6)<span style="white-space:pre">       </span># upper</div><div>JUMP(BPF_JMP + BPF_JEQ + BPF_K, 8, 0, 11)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 1, 222)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 6, 224)</div><div>JUMP(BPF_JMP + BPF_JEQ + BPF_K, 5, 0, 251)</div><div>JUMP(BPF_JMP + BPF_JEQ + BPF_K, 4, 0, 285)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 1, 387)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 2, 446)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 1, 0, 446)</div><div>STMT(BPF_RET + BPF_K, 2147418112)<span style="white-space:pre">               </span># ALLOW</div><div>STMT(BPF_RET + BPF_K, 2146435072)<span style="white-space:pre">              </span># TRACE</div><div><br></div><div>JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 9, 3221225534)</div><div>STMT(BPF_LD + BPF_W + BPF_ABS, 0)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 1, 1073741825)<span style="white-space:pre">     </span># lower</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 5, 1073741830)<span style="white-space:pre">      </span># upper</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 1, 1073742159)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 0, 3, 1073742336)</div><div>JUMP(BPF_JMP + BPF_JEQ + BPF_K, 2, 0, 1073742344)</div><div>JUMP(BPF_JMP + BPF_JGE + BPF_K, 1, 0, 1073742372)</div><div>STMT(BPF_RET + BPF_K, 2147418112)<span style="white-space:pre">              </span># ALLOW</div><div>STMT(BPF_RET + BPF_K, 2146435072)<span style="white-space:pre">              </span># TRACE</div><div><br></div><div>STMT(BPF_RET + BPF_K, 2146435072)<span style="white-space:pre">             </span># TRACE</div><div><br></div><div>Next week, I will fix the code and improve check_seccomp_order function.</div><div><br></div><div>--</div><div>Chen Jingpiao</div></div>