exec seccomp
λ giacomo tmp 13:50 → seccomp-tools dump ./main2
>
line CODE JT JF K
=================================
0000: 0x20 0x00 0x00 0x00000004 A = arch
0001: 0x15 0x00 0x04 0xc000003e if (A != ARCH_X86_64) goto 0006
0002: 0x20 0x00 0x00 0x00000000 A = sys_number
0003: 0x15 0x03 0x00 0x00000000 if (A == read) goto 0007
0004: 0x15 0x02 0x00 0x0000003c if (A == exit) goto 0007
0005: 0x25 0x01 0x00 0x00000200 if (A > 0x200) goto 0007
0006: 0x06 0x00 0x00 0x00000000 return KILL
0007: 0x06 0x00 0x00 0x7fff0000 return ALLOW
如果直接 x32abi 调用 execve 会报 bad syscall。因为启动新的进程的时候会调用其他 syscall…
read syscall 的地址检查
https://elixir.bootlin.com/linux/latest/source/fs/read_write.c#L459
这里检查楽 buf + count 是不是一个合理的地址