成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Golang標(biāo)準(zhǔn)庫syscall詳解(什么是系統(tǒng)調(diào)用)

Golang標(biāo)準(zhǔn)庫syscall詳解(什么是系統(tǒng)調(diào)用)

熱門標(biāo)簽:揚(yáng)州電銷外呼系統(tǒng)軟件 百度地圖標(biāo)注位置網(wǎng)站 武漢百應(yīng)人工智能電銷機(jī)器人 電腦外呼系統(tǒng)輻射大嗎 上海企業(yè)外呼系統(tǒng)排名 智能語音電銷的機(jī)器人 開通400電話申請流程 如何利用高德地圖標(biāo)注家 400手機(jī)電話免費(fèi)辦理

一、什么是系統(tǒng)調(diào)用

In computing, a system call is the programmatic way in which a computer program requests a service from the kernel of the operating system it is executed on. This may include hardware-related services (for example, accessing a hard disk drive), creation and execution of new processes, and communication with integral kernel services such as process scheduling. System calls provide an essential interface between a process and the operating system.

系統(tǒng)調(diào)用是程序向操作系統(tǒng)內(nèi)核請求服務(wù)的過程,通常包含硬件相關(guān)的服務(wù)(例如訪問硬盤),創(chuàng)建新進(jìn)程等。系統(tǒng)調(diào)用提供了一個進(jìn)程和操作系統(tǒng)之間的接口。

二、Golang標(biāo)準(zhǔn)庫-syscall

syscall包包含一個指向底層操作系統(tǒng)原語的接口。

注意:該軟件包已被鎖定。標(biāo)準(zhǔn)以外的代碼應(yīng)該被遷移到golang.org/x/sys存儲庫中使用相應(yīng)的軟件包。這也是應(yīng)用新系統(tǒng)或版本所需更新的地方。 Signal , Errno 和 SysProcAttr 在 golang.org/x/sys 中尚不可用,并且仍然必須從 syscall 程序包中引用。有關(guān)更多信息,請參見 https://golang.org/s/go1.4-syscall。

https://pkg.go.dev/golang.org/x/sys
該存儲庫包含用于與操作系統(tǒng)進(jìn)行低級交互的補(bǔ)充Go軟件包。

1. syscall無處不在

舉個最常用的例子, fmt.Println(“hello world”), 這里就用到了系統(tǒng)調(diào)用 write, 我們翻一下源碼。

func Println(a ...interface{}) (n int, err error) {
	return Fprintln(os.Stdout, a...)
}
Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
 
func (f *File) write(b []byte) (n int, err error) {
    if len(b) == 0 {
        return 0, nil
    }
    // 實際的write方法,就是調(diào)用syscall.Write()
    return fixCount(syscall.Write(f.fd, b))
}

2. syscall demo舉例:

 go版本的strace Strace

strace 是用于查看進(jìn)程系統(tǒng)調(diào)用的工具, 一般使用方法如下:

strace -c 用于統(tǒng)計各個系統(tǒng)調(diào)用的次數(shù)

[root@localhost ~]# strace -c echo hello
hello
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         1           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0         3           open
  0.00    0.000000           0         5           close
  0.00    0.000000           0         4           fstat
  0.00    0.000000           0         9           mmap
  0.00    0.000000           0         4           mprotect
  0.00    0.000000           0         2           munmap
  0.00    0.000000           0         4           brk
  0.00    0.000000           0         1         1 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                    36         1 total
[root@localhost ~]#

stace 的實現(xiàn)原理是系統(tǒng)調(diào)用 ptrace, 我們來看下 ptrace 是什么。

man page 描述如下:

The ptrace() system call provides a means by which one process (the “tracer”) may observe and control the execution of another process (the “tracee”), and examine and change the tracee's memory and registers. It is primarily used to implement breakpoint debuggingand system call tracing.

簡單來說有三大能力:

追蹤系統(tǒng)調(diào)用
讀寫內(nèi)存和寄存器
向被追蹤程序傳遞信號

ptrace接口:

int ptrace(int request, pid_t pid, caddr_t addr, int data);
 
request包含:
PTRACE_ATTACH
PTRACE_SYSCALL
PTRACE_PEEKTEXT, PTRACE_PEEKDATA
等

tracer 使用 PTRACE_ATTACH 命令,指定需要追蹤的PID。緊接著調(diào)用 PTRACE_SYSCALL。
tracee 會一直運(yùn)行,直到遇到系統(tǒng)調(diào)用,內(nèi)核會停止執(zhí)行。 此時,tracer 會收到 SIGTRAP 信號,tracer 就可以打印內(nèi)存和寄存器中的信息了。

接著,tracer 繼續(xù)調(diào)用 PTRACE_SYSCALL, tracee 繼續(xù)執(zhí)行,直到 tracee退出當(dāng)前的系統(tǒng)調(diào)用。
需要注意的是,這里在進(jìn)入syscall和退出syscall時,tracer都會察覺。

go版本的strace

了解以上內(nèi)容后,presenter 現(xiàn)場實現(xiàn)了一個go版本的strace, 需要在 linux amd64 環(huán)境編譯。
https://github.com/silentred/gosys

// strace.go

package main
 
import (
    "fmt"
    "os"
    "os/exec"
    "syscall"
)
 
func main() {
    var err error
    var regs syscall.PtraceRegs
    var ss syscallCounter
    ss = ss.init()
 
    fmt.Println("Run: ", os.Args[1:])
 
    cmd := exec.Command(os.Args[1], os.Args[2:]...)
    cmd.Stderr = os.Stderr
    cmd.Stdout = os.Stdout
    cmd.Stdin = os.Stdin
    cmd.SysProcAttr = syscall.SysProcAttr{
        Ptrace: true,
    }
 
    cmd.Start()
    err = cmd.Wait()
    if err != nil {
        fmt.Printf("Wait err %v \n", err)
    }
 
    pid := cmd.Process.Pid
    exit := true
 
    for {
        // 記得 PTRACE_SYSCALL 會在進(jìn)入和退出syscall時使 tracee 暫停,所以這里用一個變量控制,RAX的內(nèi)容只打印一遍
        if exit {
            err = syscall.PtraceGetRegs(pid, regs)
            if err != nil {
                break
            }
            //fmt.Printf("%#v \n",regs)
            name := ss.getName(regs.Orig_rax)
            fmt.Printf("name: %s, id: %d \n", name, regs.Orig_rax)
            ss.inc(regs.Orig_rax)
        }
        // 上面Ptrace有提到的一個request命令
        err = syscall.PtraceSyscall(pid, 0)
        if err != nil {
            panic(err)
        }
        // 猜測是等待進(jìn)程進(jìn)入下一個stop,這里如果不等待,那么會打印大量重復(fù)的調(diào)用函數(shù)名
        _, err = syscall.Wait4(pid, nil, 0, nil)
        if err != nil {
            panic(err)
        }
 
        exit = !exit
    }
 
    ss.print()
}

// 用于統(tǒng)計信息的counter, syscallcounter.go

package main
 
import (
    "fmt"
    "os"
    "text/tabwriter"
 
    "github.com/seccomp/libseccomp-golang"
)
 
type syscallCounter []int
 
const maxSyscalls = 303
 
func (s syscallCounter) init() syscallCounter {
    s = make(syscallCounter, maxSyscalls)
    return s
}
 
func (s syscallCounter) inc(syscallID uint64) error {
    if syscallID > maxSyscalls {
        return fmt.Errorf("invalid syscall ID (%x)", syscallID)
    }
 
    s[syscallID]++
    return nil
}
 
func (s syscallCounter) print() {
    w := tabwriter.NewWriter(os.Stdout, 0, 0, 8, ' ', tabwriter.AlignRight|tabwriter.Debug)
    for k, v := range s {
        if v > 0 {
            name, _ := seccomp.ScmpSyscall(k).GetName()
            fmt.Fprintf(w, "%d\t%s\n", v, name)
        }
    }
    w.Flush()
}
 
func (s syscallCounter) getName(syscallID uint64) string {
    name, _ := seccomp.ScmpSyscall(syscallID).GetName()
    return name
}

最后結(jié)果:

Run:  [echo hello]
Wait err stop signal: trace/breakpoint trap
name: execve, id: 59
name: brk, id: 12
name: access, id: 21
name: mmap, id: 9
name: access, id: 21
name: open, id: 2
name: fstat, id: 5
name: mmap, id: 9
name: close, id: 3
name: access, id: 21
name: open, id: 2
name: read, id: 0
name: fstat, id: 5
name: mmap, id: 9
name: mprotect, id: 10
name: mmap, id: 9
name: mmap, id: 9
name: close, id: 3
name: mmap, id: 9
name: arch_prctl, id: 158
name: mprotect, id: 10
name: mprotect, id: 10
name: mprotect, id: 10
name: munmap, id: 11
name: brk, id: 12
name: brk, id: 12
name: open, id: 2
name: fstat, id: 5
name: mmap, id: 9
name: close, id: 3
name: fstat, id: 5
hello
name: write, id: 1
name: close, id: 3
name: close, id: 3
        1|read
        1|write
        3|open
        5|close
        4|fstat
        7|mmap
        4|mprotect
        1|munmap
        3|brk
        3|access
        1|execve
        1|arch_prctl

三、參考

Golang標(biāo)準(zhǔn)庫——syscall
參考URL: https://www.jianshu.com/p/44109d5e045b
Golang 與系統(tǒng)調(diào)用
參考URL: https://blog.csdn.net/weixin_33744141/article/details/89033990

以上就是Golang標(biāo)準(zhǔn)庫syscall詳解(什么是系統(tǒng)調(diào)用)的詳細(xì)內(nèi)容,更多關(guān)于Golang標(biāo)準(zhǔn)庫syscall的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 解決Golang 中使用WaitGroup的那點坑
  • 在golang中使用Sync.WaitGroup解決等待的問題
  • Golang中的sync包的WaitGroup操作
  • Golang中的sync.WaitGroup用法實例
  • Golang的os標(biāo)準(zhǔn)庫中常用函數(shù)的整理介紹
  • Golang 標(biāo)準(zhǔn)庫 tips之waitgroup詳解

標(biāo)簽:宜賓 江西 張掖 黑龍江 延邊 嘉峪關(guān) 武漢 新余

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang標(biāo)準(zhǔn)庫syscall詳解(什么是系統(tǒng)調(diào)用)》,本文關(guān)鍵詞  Golang,標(biāo)準(zhǔn),庫,syscall,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang標(biāo)準(zhǔn)庫syscall詳解(什么是系統(tǒng)調(diào)用)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Golang標(biāo)準(zhǔn)庫syscall詳解(什么是系統(tǒng)調(diào)用)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    免费的黄色片| 欧美精品免费在线观看| y4480在线8影院| 久久不射网站| 欧洲天堂在线观看| 日韩精品成人av| 国产在线视频自拍| 亚洲夜间福利| 久久婷婷国产综合国色天香| 亚洲精品一线二线三线无人区| 免费观看在线综合色| 欧美专区福利在线| 国产人妖在线观看| 久久久久无码国产精品一区李宗瑞| 97色在线视频观看| 欧美激情va永久在线播放| 五月天激情四射| 亚洲成人基地| 日本免费成人网| 蜜桃视频在线入口www| 欧美性xxxx极品hd满灌| 日韩人妻一区二区三区| 国自产拍偷拍精品啪啪一区二区| 色综合天天综合| 欧美日韩在线精品一区二区三区激情| 日韩精品最新在线观看| 蜜臀av午夜精品久久| 日韩福利小视频| www.久久久久久.com| 91蜜桃臀久久一区二区| 激情深爱综合网| www.黄色小说.com| 日本三级韩国三级久久| av 一区二区三区| 性欧美暴力猛交69hd| 天堂影视av| 97aⅴ精品视频一二三区| koreanbj精品视频一区| 欧美日韩一本| 欧美日韩专区在线| 国产一区二区三区久久悠悠色av| 国产精品影院在线观看| 无码人妻aⅴ一区二区三区有奶水| 国产一级做a爱片久久毛片a| 欧美黑人xxxxx| 青青草免费在线视频| 天天操天天摸天天爽| 亚洲精品第五页| 性做久久久久久| 亚洲网色网站| 爱爱视频免费在线观看| 生活片a∨在线观看| 欧美裸体bbwbbwbbw| 久操视频免费在线观看| 国产wwww| 中文字幕乱码无码人妻系列蜜桃| 翔田千里88av中文字幕| 国产日韩二区| 视频一区二区在线| 国产成人+综合亚洲+天堂| 在线视频在线视频7m国产| 午夜偷拍福利视频| 91精东传媒理伦片在线观看| 青青草在线免费视频| 亚洲手机成人高清视频| 亚洲国产欧美在线观看| 国产精品男人的天堂| 一个人看的日本www的免费视频| 伊人网站在线| 欧美极品欧美精品欧美视频| 濑亚美莉一二区在线视频| 亚洲a中文字幕| 在线观看中文字幕网站| 国产精品网站在线| 亚洲精品中文字幕在线观看| 日韩一区二区在线看片| 骚虎视频欧美| 国内精品免费午夜毛片| 亚洲an天堂an在线观看| 久久久久无码国产精品一区| 韩国三级午夜理伦三级三| 亚洲天堂2018av| 青青影院一区二区三区四区| 日韩欧美一二三四区| 日本一区二区三区电影| 久久精选视频| 亚洲一区二区三区精品在线| 精品处破学生在线二十三| 亚洲大胆人体av| 欧美高清在线视频观看不卡| 一区二区精品视频| 欧美日韩国产麻豆| 天堂综合网久久| 久久最新视频| 日本电影在线观看| 国产日韩一区在线| 国产在线观看你懂的| 可以免费看不卡的av网站| 九九免费视频| 国产激情久久久久| 欧美自拍资源在线| 东京干手机福利视频| 亚洲激情一区二区三区| 国产交换配乱淫视频免费| 亚洲18在线看污www麻豆| 久久久久北条麻妃免费看| 精品国产乱码久久久久久闺蜜| 亚洲网址在线观看| 欧美日韩一区二区不卡| 亚洲天天做日日做天天谢日日欢| 国产成人免费看一级大黄| 啊啊啊射了视频网站| 亚洲精品一区二区三区四区| 欧美白人猛性xxxxx交69| 欧美精品aⅴ在线视频| 成人黄色动漫| 久久午夜色播影院免费高清| 日本三级日本三级日本三级极| 精品一区二区三区五区六区| 丁香花高清电影在线观看完整版| 性欧美长视频免费观看不卡| 精品久久久免费| 黑森林国产精品av| 亚洲国产成人一区二区| 欧美日韩在线视频免费| 成年人在线视频免费观看| 国产网红女主播精品视频| 精品欧美激情在线观看| 久久成人一区二区| 色欧美片视频在线观看| 精品在线观看一区| 91蜜桃在线视频| 国产在线观看一区二区三区| 久久99国产乱子伦精品免费| 亚欧激情乱码久久久久久久久| 中文字幕人成人乱码| www视频在线免费观看| 中文字幕在线视频网站| 欧美日韩成人免费视频| 欧美少妇一级片| 91麻豆视频网站| 性生生活大片免费看视频| 黄瓜视频污在线观看| 国产在线观看免费av| 欧美日溪乱毛片| 视频免费裸体网站| 91蜜桃视频在线| 国产成人精品综合久久久久99| 久久精品国产亚洲一区二区| 欧美中文字幕亚洲一区二区va在线| 国产噜噜噜噜噜久久久久久久久| 欧美电影三区| av动漫在线看| 日韩人体视频一二区| 日韩午夜电影网| 国产精品30p| 中文字幕视频在线免费观看| 日韩午夜影院| 欧美亚洲免费在线| 精品呦交小u女在线| 亚洲欧美激情另类校园| 天天视频天天爽| 久久伊人精品天天| 国产福利精品导航| 亚洲一区亚洲二区亚洲三区| 欧美日韩一区二区三区在线| 欧美日韩精品一区二区视频| c#hpsocket| 欧美日本一区二区高清播放视频| 欧美 日韩 国产 成人 在线| 精品日韩中文字幕| 日韩高清在线免费观看| 久久久久久久久久福利| 成年丰满熟妇午夜免费视频| 亚洲欧洲精品一区| 999久久久精品一区二区| 国产97在线|亚洲| 久久黄色美女电影| 蜜桃在线一区二区三区精品| 成人超碰在线| 99精品偷自拍| 亚州av电影免费在线观看| 亚洲特色特黄| 你懂的视频在线播放| 51成人做爰www免费看网站| 欧美午夜一区二区三区| 俄罗斯嫩小性bbwbbw| 成人线上播放| 老司机精品视频在线观看6| 福利视频免费在线观看| 日韩亚洲精品在线| 亚洲国产午夜伦理片大全在线观看网站| 成人毛片av在线| 亚洲开心激情网| 精品中文字幕人| 成人福利在线| 天天操天天操天天操天天操天天操| 蜜桃av噜噜一区二区三区小说| 136国产福利精品导航网址应用| 久久99热国产| 国产国产精品人在线视| 精品福利影视| 欧美在线视屏| 午夜影院免费体验区| 国产视频一区在线| 区日韩二区欧美三区| 久热久热免费视频中文字幕777| 国内拍拍自拍视频在线观看| xfplay资源站色先锋在线观看| 福利微拍一区二区| av动漫免费观看| 7777久久亚洲中文字幕| caoporn视频在线观看| 一本一本久久a久久精品牛牛影视| 国产精品视频免费观看www| 久久这里只有精品首页| 一区二区在线观看免费| 伊人亚洲精品| 成人一区二区免费视频| 国内精品久久久久久| 鲁大师成人一区二区三区| av成人在线网站| 一区二区三区日韩精品视频| 精品在线视频免费观看| av网站在线观看免费| 猫咪成人在线观看| 在线看片网址| 天堂中文av在线资源库| 国产精品九九九| 日本网站在线观看一区二区三区| 欧美在线日韩| 台湾成人av| 猛男gaygay欧美视频| 日韩经典中文字幕| 国产在线日韩欧美| 亚洲电影一区| 蜜桃久久影院| 在线观看亚洲a| 中文精品在线观看| 免费毛片一区二区三区久久久| 欧美日韩中文字幕日韩欧美| 亚洲av少妇一区二区在线观看| 婷婷亚洲图片| 性xxxx奶大欧美高清| 999在线精品| 成人看的羞羞网站| 久久综合伊人77777尤物| 精品人妻无码一区二区性色| 日韩久久免费视频| 亚洲热av色在线播放| 91亚洲大成网污www| 免费大片在线观看| 久久精品1区| 99久久人妻无码精品系列| 青青视频一区二区| 国产精品一区二区不卡视频| 91|九色|视频| 日韩电影中文字幕在线| 欧美精品国产精品日韩精品| 亚洲精品欧美综合四区| 成人av在线播放网站| 向日葵视频成人app网址| 日韩一级av毛片| h网站视频在线观看| 国产精品久久久久aaaa| 丁香桃色午夜亚洲一区二区三区| 国产伦理一区二区三区| 最好看的中文字幕久久| 日韩av片在线播放| 国产成人在线一区| 精品无码人妻一区二区三区品| 欧美国产丝袜视频| 国产无人区一区二区三区| 亚洲片在线资源| 亚洲免费黄色录像| 国产精品自产拍在线观看| 国产精品一区av| 精品人妻一区二区三区麻豆91| 少妇精品无码一区二区| 国产18无套直看片| 日韩精品在线不卡| 欧美日韩精品免费| 日韩免费视频一区二区视频在线观看| 91免费版视频| 精品国产一区二区在线| 在线看的av| 91玉足脚交嫩脚丫在线播放| 伦理天堂电影| 黄色一级片在线| 香蕉久久精品| 999精品色在线播放| yy111111少妇影院日韩夜片| wwww在线观看免费视频| 久久一区二区三区四区| 农村寡妇一区二区三区| 夜久久久久久| 国产高清视频一区| 亚洲欧美日韩综合一区| 亚洲综合在线视频| 国产精品videosex性欧美| 性欧美暴力猛交另类hd| 福利小视频在线观看| 成人软件在线观看| 欧美在线观看视频一区二区三区| 老司机在线精品视频| 另类中文字幕网| 一道本一区二区三区| 欧美成人黄色小视频| 18视频在线观看娇喘| 欧美综合久久| 东京久久高清| 波多野结衣网站| 尤物视频在线视频| 午夜精品久久久久久久99| 亚洲人成精品久久久久久| av网站无病毒在线| 91久热免费在线视频| 一区二区不卡在线视频 午夜欧美不卡在| 99re久久| 成人写真福利网| 九九九免费视频| 国产91精品免费| 欧美一级爆毛片| 国产不卡精品视频| 国产夜色精品一区二区av| 欧美激情成人在线| 超碰97在线资源站| 国产精品视频在线免费观看|