golang hack插件开发动态链接库实例探究

 更新时间:2024年01月22日 14:28:46   作者:45度技术宅  
这篇文章主要为大家介绍了golang hack插件开发动态链接库实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

准备工作

1. go1.8以上才支持动态库

2. linux 下动态库编译  go build -buildmode=plugin

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

go加载动态库的过程

1.调用plugin.Open(filename) 打开共享对象文件,创建一个*plugin.Plugin实例

2. 在*plugin.Plugin实例上调用Lookup(symbolName string)

3. 使用类型断言将泛型symbol转换为所需类型

根据需要使用生成转换对象

package main
import (
  "fmt"
  "goplugin/scanner"
  "io/ioutil"
  "log"
  "os"
  "plugin"
)
// 插件调用
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函数
    if n, err = p.Lookup("New"); err != nil {
      log.Fatalln(err)
    }
    newFunc, ok := n.(func() scanner.Checker) //类型断言,检查获取到的n的类型,并返回
    if !ok {
      log.Fatal("new 函数检查出错")
    }
    check = newFunc() // 调用newfunc
    res = check.Check("202.108.22.103", 80) // 调用插件中接口的check方法
    if res.Vulnerable {
      log.Println(res.Details)
    } else {
      log.Println("host not avalable")
    }
  }
}

goplugins/scanner

package scanner
// 插件的约束,插件实现对一个域名和port 的扫描,返回result
type Checker interface {
  Check(host string, port uint64) *Result
}
type Result struct {
  Vulnerable bool
  Details    string
}

以上就是golang hack插件开发动态链接库实例探究的详细内容,更多关于golang hack动态链接库的资料请关注脚本之家其它相关文章!

相关文章

  • GoLang中Json Tag用法实例总结

    GoLang中Json Tag用法实例总结

    这篇文章主要给大家介绍了关于GoLang中Json Tag用法的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • Go语言使用字符串的几个技巧分享

    Go语言使用字符串的几个技巧分享

    这篇文章中小编将给出一些Go语言在处理字符串方面的技巧,对大家学习Go语言具有一定的参考借鉴价值,下面一起看看吧。
    2016-09-09
  • Go语言变量创建的五种方法

    Go语言变量创建的五种方法

    这篇文章主要介绍了Go语言五种变量创建的方法,本文给大家提到了匿名变量的优点,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2020-02-02
  • go语言编程之美自定义二进制文件实用指南

    go语言编程之美自定义二进制文件实用指南

    这篇文章主要介绍了go语言编程之美自定义二进制文件实用指南
    2023-12-12
  • golang 基于 mysql 简单实现分布式读写锁

    golang 基于 mysql 简单实现分布式读写锁

    这篇文章主要介绍了golang 基于mysql简单实现分布式读写锁,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Go文件操作(新建打开写入读取删除关闭)学习笔记

    Go文件操作(新建打开写入读取删除关闭)学习笔记

    这篇文章主要为大家介绍了Go文件操作(新建打开写入读取删除关闭)学习笔记,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • go从指定的URL下载图片并保存到本地的代码实现

    go从指定的URL下载图片并保存到本地的代码实现

    这段代码定义了一个名为 downloadImage 的函数,其目的是从指定的URL下载图片并保存到本地文件系统,本文是对代码功能的详细描述,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-08-08
  • 详解Go中指针的原理与引用

    详解Go中指针的原理与引用

    在 Go 中,指针是强大而重要的功能,它允许开发人员直接处理内存地址并实现高效的数据操作,本文主要带大家了解下指针在 Go 中的工作原理以及对于编写高效、高性能代码的重要性,希望对大家有所帮助
    2023-09-09
  • golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

    golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

    这篇文章主要介绍了golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • 详解go语言中并发安全和锁问题

    详解go语言中并发安全和锁问题

    这篇文章主要介绍了go语言中并发安全和锁问题,包含互斥锁解锁过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10

最新评论