http://vbworld.sxnw.gov.cn/bbs/uploadImages/20052141232597406.rar
以上是原码
问题是当查找的地址的值大于127就会得到0,不知何故.
望各位大虾帮帮忙.
如果知道答案就改改源码发个邮件给我[email protected]

解决方案 »

  1.   

    你代码太简单了,不好说.....
    一般在访问前需要用VirtualQueryEx与VirtualProtectEx函数确保所访问的内存是可访问(可读/写)的这是我一个程序的片段:
    '读取或写入指定地址lAddr
    Public Function ReadWriteMemory(ByVal lAddr As Long, buff() As Byte, Optional fRead As Boolean = True, Optional lPID As Long = -1) As Boolean
        Dim hProcess As Long
        Dim mi As MEMORY_BASIC_INFORMATION
        Dim lpAddress As Long, lOldProtect As Long
        Dim lBytesReadWrite As Long
        Dim bTmp() As Byte
        
        lpAddress = lAddr
        If lPID = -1 Then
            lPID = GetCurrentProcessId
        End If
        hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0&, lPID)
        If hProcess Then
            If VirtualQueryEx(hProcess, ByVal lpAddress, mi, Len(mi)) Then
                If VirtualProtectEx(hProcess, ByVal mi.BaseAddress, mi.RegionSize, PAGE_READWRITE, lOldProtect) <> 0 Then
                    If fRead Then
                        ReadProcessMemory hProcess, ByVal lpAddress, buff(0), UBound(buff) + 1, lBytesReadWrite
                    Else
                        ReDim bTmp(UBound(buff))
                        ReadProcessMemory hProcess, ByVal lpAddress, bTmp(0), UBound(bTmp) + 1, lBytesReadWrite
                        WriteProcessMemory hProcess, ByVal lpAddress, buff(0), UBound(buff) + 1, lBytesReadWrite
                        CopyMemory buff(0), bTmp(0), UBound(bTmp) + 1
                    End If
                    Call VirtualProtectEx(hProcess, ByVal mi.BaseAddress, mi.RegionSize, lOldProtect, lOldProtect)
                    ReadWriteMemory = (lBytesReadWrite <> 0)
                End If
            End If
            CloseHandle hProcess
        End If
    End Function