Системный вызов Golang получает параметры системного вызова - PullRequest
0 голосов
/ 29 мая 2018

Если вы выполните ./syscallprint ls -l, он напечатает ID системного вызова, вызываемые командой ls -l.

syscallprint.go

package main

import (
    "fmt"
    "os"
    "os/exec"
    "syscall"
)

func main() {
    var regs syscall.PtraceRegs
    cmd := exec.Command(os.Args[1], os.Args[2:]...)
    cmd.Stderr = os.Stderr
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.SysProcAttr = &syscall.SysProcAttr{
        Ptrace: true,
    }
    cmd.Start()
    err := cmd.Wait()
    if err != nil {
        fmt.Printf("Wait returned: %v\n", err)
    }
    pid := cmd.Process.Pid
    exit := true
    for {
        if exit {
            err = syscall.PtraceGetRegs(pid, &regs)
            if err != nil {
                break
            }
            fmt.Printf("SystemId: (%x)\n", regs.Orig_rax)
            // TODO: print syscall parameters
        }
        err = syscall.PtraceSyscall(pid, 0)
        if err != nil {
            panic(err)
        }
        _, err = syscall.Wait4(pid, nil, 0, nil)
        if err != nil {
            panic(err)
        }
        exit = !exit
    }
}

Возможно липолучить параметры системного вызова, сделанные ls -l?

Это представляется возможным с из этого вопроса .Это возможно с го-ланга?

...