1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package main
- import (
- "fmt"
- "os"
- "os/exec"
- "strconv"
- "strings"
- )
- const (
- SYSCALL_NUMS = 500
- )
- func run(allowed_syscalls []int) error {
- nums := []string{}
- for _, syscall := range allowed_syscalls {
- nums = append(nums, strconv.Itoa(syscall))
- }
- os.Setenv("ALLOWED_SYSCALLS", strings.Join(nums, ","))
- _, err := exec.Command("python3", "cmd/test/syscall_dig/test.py").Output()
- if err == nil {
- } else {
- failed_msg := fmt.Sprintf("failed with %v", err)
- fmt.Println(failed_msg)
- }
- return err
- }
- func main() {
- // generate all syscall list
- list := make([]int, 0, SYSCALL_NUMS)
- for i := 0; i < SYSCALL_NUMS; i++ {
- list = append(list, i)
- }
- for i := 0; i < SYSCALL_NUMS; i++ {
- syscall := list[0]
- list = list[1:]
- err := run(list)
- if err != nil {
- if strings.Contains(err.Error(), "bad system call") {
- // if run into err, then this syscall is needed, add it back to the end
- list = append(list, syscall)
- } else {
- fmt.Println(fmt.Sprintf("Failed to run your python code, %v", err))
- }
- }
- }
- // final test
- err := run(list)
- if err != nil {
- fmt.Println("Failed to get the needed syscalls")
- } else {
- // use ',' to join the list and print, easy for copy the list
- list_str := strings.Trim(strings.Join(strings.Fields(fmt.Sprint(list)), ","), "[]")
- fmt.Println("Following syscalls are required:", list_str)
- }
- }
|