go语言遍历进程模块dll

这篇具有很好参考价值的文章主要介绍了go语言遍历进程模块dll。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

package Util

import (
    "os"
    "fmt"
    "syscall"
    "unsafe"
)

var (
    kernel32 = syscall.MustLoadDLL("kernel32.dll")
    psapi    = syscall.MustLoadDLL("psapi.dll")
    procOpenProcess = kernel32.MustFindProc("OpenProcess")
    procEnumProcessModules = psapi.MustFindProc("EnumProcessModules")
    procGetModuleFileNameEx = psapi.MustFindProc("GetModuleFileNameExW")
)

const (
    PROCESS_QUERY_INFORMATION = 0x0400
    PROCESS_VM_READ            = 0x0010
    MAX_PATH                   = 260
)

func GetModules(pid int32) []string{
    var moduleList []string
    if pid <= 0 {
         pid = int32(os.Getpid()) // 自身进程
    }
    handle, _, _ := procOpenProcess.Call(
        uintptr(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ),
        uintptr(0),
        uintptr(pid),
    )
    if handle == 0 {
        fmt.Println("OpenProcess failed")
        return moduleList
    }
    defer syscall.CloseHandle(syscall.Handle(handle))

    var modules [2048]syscall.Handle
    var needed uint32
    ret, _, _ := procEnumProcessModules.Call(
        uintptr(handle),
        uintptr(unsafe.Pointer(&modules[0])),
        uintptr(len(modules)),
        uintptr(unsafe.Pointer(&needed)),
    )
    if ret == 0 {
        fmt.Println("EnumProcessModules failed")
        return moduleList
    }

    for i := 0; i < int(needed)/int(unsafe.Sizeof(syscall.Handle(0))); i++ {
        var path [MAX_PATH]uint16
        ret, _, _ = procGetModuleFileNameEx.Call(
            uintptr(handle),
            uintptr(modules[i]),
            uintptr(unsafe.Pointer(&path[0])),
            uintptr(MAX_PATH),
        )
        if ret == 0 {
            fmt.Println("GetModuleFileNameEx failed")
            continue
        }
        // 需要注意的是,`GetModuleFileNameExW` 函数返回的路径是 Unicode 编码的,
        // 需要使用 `syscall.UTF16ToString` 函数转换成字符串
        modPath := syscall.UTF16ToString(path[:])
        moduleList = append(moduleList, modPath)
        // fmt.Printf("module path: %s\n", modPath)
    }
    return moduleList
}


	





package Test

import (
    "fmt"
    "testing"
    "clientgo/Util"
)

func TestPsUtil(t *testing.T) {
    modList := Util.GetModules(0)
    for index := 0; index < len(modList); index++{
    	fmt.Println("Index=", index + 1, modList[index])
    }
}

=== RUN   TestPsUtil
Index= 1 C:\Users\ADMINI~1\AppData\Local\Temp\go-build4126345986\b001\Te
Index= 2 C:\Windows\SYSTEM32\ntdll.dll
Index= 3 C:\Windows\system32\kernel32.dll
Index= 4 C:\Windows\system32\KERNELBASE.dll
Index= 5 C:\Windows\system32\advapi32.dll
Index= 6 C:\Windows\system32\msvcrt.dll
Index= 7 C:\Windows\SYSTEM32\sechost.dll
Index= 8 C:\Windows\system32\RPCRT4.dll
Index= 9 C:\Windows\system32\winmm.dll
Index= 10 C:\Windows\system32\USER32.dll
Index= 11 C:\Windows\system32\GDI32.dll
Index= 12 C:\Windows\system32\LPK.dll
Index= 13 C:\Windows\system32\USP10.dll
Index= 14 C:\Windows\system32\IMM32.DLL
Index= 15 C:\Windows\system32\MSCTF.dll
Index= 16 C:\Windows\system32\nvinitx.dll
Index= 17 C:\Windows\system32\VERSION.dll
Index= 18 C:\Windows\system32\ws2_32.dll
Index= 19 C:\Windows\system32\NSI.dll
Index= 20 C:\Windows\system32\cryptbase.dll
Index= 21 C:\Windows\system32\powrprof.dll
Index= 22 C:\Windows\system32\SETUPAPI.dll
Index= 23 C:\Windows\system32\CFGMGR32.dll
Index= 24 C:\Windows\system32\OLEAUT32.dll
Index= 25 C:\Windows\system32\ole32.dll
Index= 26 C:\Windows\system32\DEVOBJ.dll
Index= 27 C:\Windows\system32\psapi.dll
--- PASS: TestPsUtil (0.00s)
PASS
ok      command-line-arguments  0.029s文章来源地址https://www.toymoban.com/news/detail-440017.html

到了这里,关于go语言遍历进程模块dll的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用通信顺序进程(CSP)模型的 Go 语言通道

    在并发编程中,许多编程语言采用共享内存/状态模型。然而,Go 通过实现  通信顺序进程(CSP) 模型来区别于众多。在CSP中,程序由不共享状态的并行进程组成;相反,它们通过通道进行通信和同步操作。因此,对于有兴趣采用Go的开发人员来说,理解通道的工作原理变得至

    2024年02月10日
    浏览(46)
  • 第116天:免杀对抗-EDR&Syscall-hook&DLL反射注入&白加黑&隐写分离&加载器

    知识点 演示案例: 总结

    2024年02月16日
    浏览(45)
  • 【Go 基础篇】Go语言包详解:模块化开发与代码复用

    在Go语言中, 包(Package) 是一种用于组织代码的机制,用于将相关的函数、类型和变量等组织在一起,以便于模块化开发和代码复用。包的使用能够使程序结构更加清晰、可维护性更高,同时也是Go语言强调的一项重要特性。本篇博客将深入探讨Go语言中包的相关知识,包括

    2024年02月11日
    浏览(47)
  • Java/Python/Go不同开发语言在进程、线程和协程的设计差异

    在多线程项目开发时,最常用、最常遇到的问题是 1,线程、协程安全 2,线程、协程间的通信和控制 本文主要探讨不同开发语言go、java、python在进程、线程和协程上的设计和开发方式的异同。 进程 进程是 操作系统进行资源分配的基本单位,每个进程都有自己的独立内存空

    2024年01月23日
    浏览(50)
  • npm ERR! code EPERM npm ERR! syscall open npm ERR! path D:\Program Files\nodejs\npm_packages\_cacach

    npm ERR! code EPERM npm ERR! syscall open npm ERR! path D:Program Filesnodejsnpm_packages_cacach 因为nodojs的文件中的模块操作权限不够(修改过node.js下载文件的路径)。 以自己修改权限。找到你安装node.js的文件夹(我的文件夹是nodejs) -右键-属性-安全 完全控制

    2024年02月11日
    浏览(136)
  • Go微服务: 基于net/rpc/jsonrpc模块实现微服务跨语言调用

    概述 Golang 提供 net/rpc/jsonrpc 库来实现rpc方法 采用 json 方式进行数据编解码,支持跨语言调用 这里实现跨语言示例 1 ) go 服务端 2 ) nodejs 客户端1 3 ) nodejs 客户端2 4 ) go 客户端3 总结 这里演示了,基于go语言为服务端,nodejs 和 golang 为客户端的3种示范 注意,上面 nodejs版本

    2024年03月17日
    浏览(44)
  • opencv for unity package在unity中打开相机不需要dll

    下载OpenCV for Unity 导入后,里面有很多案例 直接打开就可以运行 打开相机

    2024年02月07日
    浏览(30)
  • 慕课网Go-4.package、单元测试、并发编程

    1_1_User.go 1_1_UserGet.go 1_1_UserMain.go github链接 首次使用时,包的导入报错: 鼠标放在\\\"github.com/gin-gonic/gin\\\",出现提示框,点击Sycn…,等一会报错消失 Sync过程自动下载,可以在go.mod中看到 或者在终端打开、go mod tidy 终端go test 测试函数前的运行箭头右键后 打印数字和字母 selec

    2024年02月14日
    浏览(38)
  • 【go modules】missing go.sum entry for module providing package

    问题描述: go get 下载第三方包采用module 管理包一般会放在pkg/mod 下面,那么如何自动管理包,以及导入包呢? 我们导入时候会发现报错如下: 这个错误提示说明在你的项目中缺少 github.com/gin-gonic/gin 模块的 go.sum 条目。 要解决这个问题,你可以尝试以下几个步骤: 删除 g

    2024年02月16日
    浏览(40)
  • Python的模块(module)和包(package)

    Python 的模块(module) 和包(package) 概述 在Python中,简单地说,模块(Module)一般是单个python文件;包(package)由分层模块(Module)构成——相关目录里的模块构成。Python中的库(library)是参考其它编程语言的说法,既可以是一个模块也可以是一个包,换言之是对模块或包的通

    2024年02月09日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包