亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調用 EnumProcessModules 時出現“意外的故障地址”

調用 EnumProcessModules 時出現“意外的故障地址”

Go
楊__羊羊 2023-07-04 16:47:34
我正在編寫一個枚舉進程基地址的函數。這是通過一些 Windows API 調用完成的,但是,我相信是我的調用EnumProcessModules造成了錯誤。還應該注意的是,并不是每個進程都會發生此錯誤。我已經嘗試過將一些 uint32 更改為 uint64,反之亦然,以及創建數組的不同方法moduleHandles,但我無法讓任何東西工作。這只是我正在創建的應用程序中的一個函數,用于檢索和掃描另一個進程的內存。這是我的函數的源代碼:func getBaseAddress(handle uintptr) int64 {    // GetProcessImageFileNameA    var imageFileName [200]byte    var fileSize uint32 = 200    var fileName string    ret, _, _ := procGetProcessImageFileNameA.Call(handle, uintptr(unsafe.Pointer(&imageFileName)), uintptr(fileSize))    for _, char := range imageFileName {        if char == 0 {            break        }        fileName += string(char)    }    fileName = fileName[24:]    // EnumProcessModules    var n uint32    var needed uint64    ret, _, _ = procEnumProcessModules.Call(handle, 0, uintptr(n), uintptr(unsafe.Pointer(&needed)))    moduleHandles := make([]syscall.Handle, int(needed))    if ret == 1 && needed > 0 {        ret, _, _ = procEnumProcessModules.Call(handle, uintptr(unsafe.Pointer(&moduleHandles)), uintptr(needed), uintptr(unsafe.Pointer(&needed)))    }    // GetModuleFileNameExA    var finalModuleHandle uintptr    for _, moduleHandle := range moduleHandles {        if moduleHandle > 0 {            var moduleFileName [200]byte            var moduleSize uint32 = 200            var moduleName string            ret, _, _ = procGetModuleFileNameExA.Call(handle, uintptr(moduleHandle), uintptr(unsafe.Pointer(&moduleFileName)), uintptr(moduleSize))            if ret != 0 {                for _, char := range moduleFileName {                    if char == 0 {                        break                    }                    moduleName += string(char)                }                moduleName = moduleName[3:]                if moduleName == fileName {                    finalModuleHandle = uintptr(moduleHandle)                    break                }            }        }    }    return int64(finalModuleHandle)}
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

EnumProcessModules即使您只是想確定所需的條目數,第二個參數也不能是空指針 (0)。



查看完整回答
反對 回復 2023-07-04
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

我想通了這個問題。我與錯誤的人互動EnumProcessModules。這是一個工作函數:


func getBaseAddress(handle uintptr) int64 {

    // GetProcessImageFileNameA

    var imageFileName [200]byte

    var fileSize uint32 = 200

    var fileName string


    ret, _, _ := procGetProcessImageFileNameA.Call(handle, uintptr(unsafe.Pointer(&imageFileName)), uintptr(fileSize))


    for _, char := range imageFileName {

        if char == 0 {

            break

        }


        fileName += string(char)

    }


    fileName = fileName[24:]


    // EnumProcessModules

    moduleHandles := make([]uintptr, 1024)

    var needed int32

    const handleSize = unsafe.Sizeof(moduleHandles[0])


    ret, _, _ = procEnumProcessModules.Call(uintptr(handle), uintptr(unsafe.Pointer(&moduleHandles[0])), handleSize*uintptr(len(moduleHandles)), uintptr(unsafe.Pointer(&needed)))


    // GetModuleFileNameExA

    var finalModuleHandle uintptr


    for _, moduleHandle := range moduleHandles {

        if moduleHandle > 0 {

            var moduleFileName [200]byte

            var moduleSize uint32 = 200

            var moduleName string


            ret, _, _ = procGetModuleFileNameExA.Call(handle, uintptr(moduleHandle), uintptr(unsafe.Pointer(&moduleFileName)), uintptr(moduleSize))


            if ret != 0 {

                for _, char := range moduleFileName {

                    if char == 0 {

                        break

                    }


                    moduleName += string(char)

                }


                moduleName = moduleName[3:]


                if moduleName == fileName {

                    finalModuleHandle = uintptr(moduleHandle)

                    break

                }

            }

        }

    }


    return int64(finalModuleHandle)

}

我希望這可以幫助別人,我花了很多時間在這個功能上。


查看完整回答
反對 回復 2023-07-04
  • 2 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號