调用EnumProcessModules时出现“意外故障地址”

时间:2019-07-17 04:59:25

标签: go winapi

我正在编写一个枚举进程基地址的函数。这是通过一些Windows API调用完成的,但是,我相信是我对const input = '{!! json_encode ($airlines) !!}'; //Parse the data with JSON.parse(), and the data becomes a JavaScript object. var obj = JSON.parse(input); console.log(obj); 的调用导致了错误。

还应注意,并非每个进程都会出现此错误。

我已经尝试过将一些uint32更改为uint64,反之亦然,以及创建<?php $yourEmail = "*********"; $yourEmailPassword = "*******"; $mailbox = imap_open("{imap.gmail.com:993/ssl}INBOX", $yourEmail, $yourEmailPassword); $mail = imap_search($mailbox, "ALL"); $mail_headers = imap_headerinfo($mailbox, $mail[0]); $subject = $mail_headers->subject; $from = $mail_headers->fromaddress; imap_setflag_full($mailbox, $mail[0], "\\Seen \\Flagged"); imap_close($mailbox); ?> 数组的不同方法,但是我什么也做不了。

这只是我正在创建的应用程序中的一个功能,用于检索和扫描另一个进程的内存。

这是我的函数的源代码:

print("Let's find the prime between the interval given...")

start = int(input("\n Enter the Start Point : "))
end = int(input("\n Enter the end Point : "))

for i in range(start, end + 1):
    if i > 1:
        for j in range(2, i):
            if i % j == 0:
                break
#            j = j + 1
        else:
            print(i)
#    start = start + 1

print("Done with checking...")

2 个答案:

答案 0 :(得分:1)

EnumProcessModules的第二个参数不能为空指针(0),即使您只是试图确定所需的条目数。

答案 1 :(得分:0)

我发现了问题。我与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)
}

我希望这可以对某人有所帮助,我花了大量时间在此功能上。