func ParseCloneFlags(flags uint64) string {
	var f []string
	if flags&0x00000100 == 0x00000100 {
		f = append(f, "CLONE_VM")
	}
	if flags&0x00000200 == 0x00000200 {
		f = append(f, "CLONE_FS")
	}
	if flags&0x00000400 == 0x00000400 {
		f = append(f, "CLONE_FILES")
	}
	if flags&0x00000800 == 0x00000800 {
		f = append(f, "CLONE_SIGHAND")
	}
	if flags&0x00001000 == 0x00001000 {
		f = append(f, "CLONE_PIDFD")
	}
	if flags&0x00002000 == 0x00002000 {
		f = append(f, "CLONE_PTRACE")
	}
	if flags&0x00004000 == 0x00004000 {
		f = append(f, "CLONE_VFORK")
	}
	if flags&0x00008000 == 0x00008000 {
		f = append(f, "CLONE_PARENT")
	}
	if flags&0x00010000 == 0x00010000 {
		f = append(f, "CLONE_THREAD")
	}
	if flags&0x00020000 == 0x00020000 {
		f = append(f, "CLONE_NEWNS")
	}
	if flags&0x00040000 == 0x00040000 {
		f = append(f, "CLONE_SYSVSEM")
	}
	if flags&0x00080000 == 0x00080000 {
		f = append(f, "CLONE_SETTLS")
	}
	if flags&0x00100000 == 0x00100000 {
		f = append(f, "CLONE_PARENT_SETTID")
	}
	if flags&0x00200000 == 0x00200000 {
		f = append(f, "CLONE_CHILD_CLEARTID")
	}
	if flags&0x00400000 == 0x00400000 {
		f = append(f, "CLONE_DETACHED")
	}
	if flags&0x00800000 == 0x00800000 {
		f = append(f, "CLONE_UNTRACED")
	}
	if flags&0x01000000 == 0x01000000 {
		f = append(f, "CLONE_CHILD_SETTID")
	}
	if flags&0x02000000 == 0x02000000 {
		f = append(f, "CLONE_NEWCGROUP")
	}
	if flags&0x04000000 == 0x04000000 {
		f = append(f, "CLONE_NEWUTS")
	}
	if flags&0x08000000 == 0x08000000 {
		f = append(f, "CLONE_NEWIPC")
	}
	if flags&0x10000000 == 0x10000000 {
		f = append(f, "CLONE_NEWUSER")
	}
	if flags&0x20000000 == 0x20000000 {
		f = append(f, "CLONE_NEWPID")
	}
	if flags&0x40000000 == 0x40000000 {
		f = append(f, "CLONE_NEWNET")
	}
	if flags&0x80000000 == 0x80000000 {
		f = append(f, "CLONE_IO")
	}
	if len(f) == 0 {
		f = append(f, "0")
	}
	return strings.Join(f, "|")
}
ParseCloneFlags parses the `flags` bitmask argument of the `clone` syscall
https://man7.org/linux/man-pages/man2/clone.2.html
package helpers
import (
	"encoding/binary"
	"net"
	"strconv"
	"strings"
)
func ParseInodeMode(mode uint32) string {
	var f []string
	switch {
	case mode&0140000 == 0140000:
		f = append(f, "S_IFSOCK")
	case mode&0120000 == 0120000:
		f = append(f, "S_IFLNK")
	case mode&0100000 == 0100000:
		f = append(f, "S_IFREG")
	case mode&060000 == 060000:
		f = append(f, "S_IFBLK")
	case mode&040000 == 040000:
		f = append(f, "S_IFDIR")
	case mode&020000 == 020000:
		f = append(f, "S_IFCHR")
	case mode&010000 == 010000:
		f = append(f, "S_IFIFO")
	}
	if mode&00700 == 00700 {
		f = append(f, "S_IRWXU")
	} else {
		if mode&00400 == 00400 {
			f = append(f, "S_IRUSR")
		}
		if mode&00200 == 00200 {
			f = append(f, "S_IWUSR")
		}
		if mode&00100 == 00100 {
			f = append(f, "S_IXUSR")
		}
	}
	if mode&00070 == 00070 {
		f = append(f, "S_IRWXG")
	} else {
		if mode&00040 == 00040 {
			f = append(f, "S_IRGRP")
		}
		if mode&00020 == 00020 {
			f = append(f, "S_IWGRP")
		}
		if mode&00010 == 00010 {
			f = append(f, "S_IXGRP")
		}
	}
	if mode&00007 == 00007 {
		f = append(f, "S_IRWXO")
	} else {
		if mode&00004 == 00004 {
			f = append(f, "S_IROTH")
		}
		if mode&00002 == 00002 {
			f = append(f, "S_IWOTH")
		}
		if mode&00001 == 00001 {
			f = append(f, "S_IXOTH")
		}
	}
	return strings.Join(f, "|")
}
func ParseMemProt(prot uint32) string {
	var f []string
	if prot == 0x0 {
		f = append(f, "PROT_NONE")
	} else {
		if prot&0x01 == 0x01 {
			f = append(f, "PROT_READ")
		}
		if prot&0x02 == 0x02 {
			f = append(f, "PROT_WRITE")
		}
		if prot&0x04 == 0x04 {
			f = append(f, "PROT_EXEC")
		}
	}
	return strings.Join(f, "|")
}
func ParseOpenFlags(flags uint32) string {
	var f []string
	switch {
	case flags&01 == 01:
		f = append(f, "O_WRONLY")
	case flags&02 == 02:
		f = append(f, "O_RDWR")
	default:
		f = append(f, "O_RDONLY")
	}
	if flags&0100 == 0100 {
		f = append(f, "O_CREAT")
	}
	if flags&0200 == 0200 {
		f = append(f, "O_EXCL")
	}
	if flags&0400 == 0400 {
		f = append(f, "O_NOCTTY")
	}
	if flags&01000 == 01000 {
		f = append(f, "O_TRUNC")
	}
	if flags&02000 == 02000 {
		f = append(f, "O_APPEND")
	}
	if flags&04000 == 04000 {
		f = append(f, "O_NONBLOCK")
	}
	if flags&04010000 == 04010000 {
		f = append(f, "O_SYNC")
	}
	if flags&020000 == 020000 {
		f = append(f, "O_ASYNC")
	}
	if flags&0100000 == 0100000 {
		f = append(f, "O_LARGEFILE")
	}
	if flags&0200000 == 0200000 {
		f = append(f, "O_DIRECTORY")
	}
	if flags&0400000 == 0400000 {
		f = append(f, "O_NOFOLLOW")
	}
	if flags&02000000 == 02000000 {
		f = append(f, "O_CLOEXEC")
	}
	if flags&040000 == 040000 {
		f = append(f, "O_DIRECT")
	}
	if flags&01000000 == 01000000 {
		f = append(f, "O_NOATIME")
	}
	if flags&010000000 == 010000000 {
		f = append(f, "O_PATH")
	}
	if flags&020000000 == 020000000 {
		f = append(f, "O_TMPFILE")
	}
	return strings.Join(f, "|")
}
func ParseAccessMode(mode uint32) string {
	var f []string
	if mode == 0x0 {
		f = append(f, "F_OK")
	} else {
		if mode&0x04 == 0x04 {
			f = append(f, "R_OK")
		}
		if mode&0x02 == 0x02 {
			f = append(f, "W_OK")
		}
		if mode&0x01 == 0x01 {
			f = append(f, "X_OK")
		}
	}
	return strings.Join(f, "|")
}
func ParseExecFlags(flags uint32) string {
	var f []string
	if flags&0x100 == 0x100 {
		f = append(f, "AT_EMPTY_PATH")
	}
	if flags&0x1000 == 0x1000 {
		f = append(f, "AT_SYMLINK_NOFOLLOW")
	}
	if len(f) == 0 {
		f = append(f, "0")
	}
	return strings.Join(f, "|")
}