欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang hack插件開(kāi)發(fā)動(dòng)態(tài)鏈接庫(kù)實(shí)例探究

 更新時(shí)間:2024年01月22日 14:28:46   作者:45度技術(shù)宅  
這篇文章主要為大家介紹了golang hack插件開(kāi)發(fā)動(dòng)態(tài)鏈接庫(kù)實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

準(zhǔn)備工作

1. go1.8以上才支持動(dòng)態(tài)庫(kù)

2. linux 下動(dòng)態(tài)庫(kù)編譯  go build -buildmode=plugin

3. shard 下  go build -buildmode=c-shared

go加載動(dòng)態(tài)庫(kù)的過(guò)程

1.調(diào)用plugin.Open(filename) 打開(kāi)共享對(duì)象文件,創(chuàng)建一個(gè)*plugin.Plugin實(shí)例

2. 在*plugin.Plugin實(shí)例上調(diào)用Lookup(symbolName string)

3. 使用類(lèi)型斷言將泛型symbol轉(zhuǎn)換為所需類(lèi)型

根據(jù)需要使用生成轉(zhuǎn)換對(duì)象

package main
import (
  "fmt"
  "goplugin/scanner"
  "io/ioutil"
  "log"
  "os"
  "plugin"
)
// 插件調(diào)用
const PluginDir = "./plugins/" // 定義放.so 文件的目錄
func main() {
  var (
    files []os.FileInfo
    err   error
    p     *plugin.Plugin
    n     plugin.Symbol
    check scanner.Checker
    res   *scanner.Result
  )
  // 獲取插件目錄所有文件
  if files, err = ioutil.ReadDir(PluginDir); err != nil {
    log.Fatalln(err)
  }
  // 遍歷所有的插件
  for idx := range files {
    fmt.Println("插件名", files[idx].Name())
    // 讀取插件
    if p, err = plugin.Open(PluginDir + files[idx].Name()); err != nil {
      log.Fatal(err)
    }
    // 加載插件中的New函數(shù)
    if n, err = p.Lookup("New"); err != nil {
      log.Fatalln(err)
    }
    newFunc, ok := n.(func() scanner.Checker) //類(lèi)型斷言,檢查獲取到的n的類(lèi)型,并返回
    if !ok {
      log.Fatal("new 函數(shù)檢查出錯(cuò)")
    }
    check = newFunc() // 調(diào)用newfunc
    res = check.Check("202.108.22.103", 80) // 調(diào)用插件中接口的check方法
    if res.Vulnerable {
      log.Println(res.Details)
    } else {
      log.Println("host not avalable")
    }
  }
}

goplugins/scanner

package scanner
// 插件的約束,插件實(shí)現(xiàn)對(duì)一個(gè)域名和port 的掃描,返回result
type Checker interface {
  Check(host string, port uint64) *Result
}
type Result struct {
  Vulnerable bool
  Details    string
}

以上就是golang hack插件開(kāi)發(fā)動(dòng)態(tài)鏈接庫(kù)實(shí)例探究的詳細(xì)內(nèi)容,更多關(guān)于golang hack動(dòng)態(tài)鏈接庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論