github.com/ggreg80/ketos@v0.0.0-20171109040536-049616f51ddb/testdata/inject-libc/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 strrchr
    15  func strrchr(s *C.char, c C.int) *C.char {
    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_strrchr func(s *C.char, c C.int) *C.char
    24  	err = lib.Sym("strrchr", &old_strrchr)
    25  	if err != nil {
    26  		log.Fatalln(err)
    27  	}
    28  
    29  	fmt.Printf("into golang hook of strrchr\n")
    30  	return old_strrchr(s, c)
    31  }
    32  
    33  func main() {}