github.com/ggreg80/ketos@v0.0.0-20171109040536-049616f51ddb/testdata/inject-open/libc_fs.go (about)

     1  // Based on article
     2  // https://blog.gopheracademy.com/advent-2015/libc-hooking-go-shared-libraries/
     3  package main
     4  
     5  import "C"
     6  
     7  import (
     8  	"fmt"
     9  	"log"
    10  
    11  	"github.com/rainycape/dl"
    12  )
    13  
    14  //export open
    15  func open(filename *C.char, flag C.int, mode C.int) *C.int {
    16  
    17  	lib, err := dl.Open("libc", 0)
    18  	if err != nil {
    19  		log.Fatalln(err)
    20  	}
    21  	defer lib.Close()
    22  
    23  	var old_open func(*C.char, C.int, C.int) *C.int
    24  	err = lib.Sym("open", &old_open)
    25  	if err != nil {
    26  		log.Fatalln(err)
    27  	}
    28  
    29  	fmt.Printf("into golang hook of open\n")
    30  	return old_open(filename, flag, mode)
    31  }
    32  
    33  func main() {}