簡體   English   中英

去系統調用EnumProcessModules

[英]Go syscall EnumProcessModules

我試圖調用; EnumProcessModules; 使用給定句柄的Go

var (
    psapi = syscall.NewLazyDLL("Psapi.dll")
    procEnumProcessModules = psapi.NewProc("EnumProcessModules")
)

func EnumProcessModules(handle uintptr) {
    log.Println(handle)
    modules := make([]interface{}, 2049)
    var needed int
    procEnumProcessModules.Call(
        handle,
        uintptr(unsafe.Pointer(&modules)),
        uintptr(2048),
        uintptr(unsafe.Pointer(&needed)),
    )
    log.Println(needed)
    for i := 0; i < needed; i++ {
        log.Println(modules[i])
    }
}

一切似乎正常工作……需要的已設置,但是當我嘗試訪問模塊變量時,出現以下錯誤:

unexpected fault address 0x12d0000
fatal error: fault
[signal 0xc0000005 code=0x0 addr=0x12d0000 pc=0x455b56]

模塊數組應該是什么樣子?

是的,您必須引用第一個元素。

var n uint32
var needed uint32

// How many I need?
ret, _, _ := procEnumProcessModules.Call(
  uintptr(handle),
  0,
  uintptr(n),
  uintptr(unsafe.Pointer(&needed)))

if int(ret) == 1 && needed > 0 {

  procHandles := make([]syscall.Handle, needed) 
  procHandlesPtr := unsafe.Pointer(&procHandles[0])

  n = needed
  ret2, _, _ := procEnumProcessModules.Call(
    uintptr(n),
    uintptr(procHandlesPtr),
    uintptr(n), 
    uintptr(unsafe.Pointer(&needed))))

  if int(ret2) == 1 {
    for i:= 0; i < needed / 4; i++ {
       fmt.Println(procHandles[i])
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM