Vb.net 内存地址读/写VB程序

Vb.net 内存地址读/写VB程序,vb.net,process,memory-address,Vb.net,Process,Memory Address,当我运行这段代码时,它会运行,但是当我尝试将正在运行的进程内存地址的字符串值更改为其他值时,它会给我一个错误: "System.IndexoutofRangeException Index was outside the Bounds of the Array" 这些是功能: <DllImport("kernel32.dll", SetLastError:=True)> _ Public Shared Function WriteProcessMemory(ByVal hProc

当我运行这段代码时,它会运行,但是当我尝试将正在运行的进程内存地址的字符串值更改为其他值时,它会给我一个错误:

"System.IndexoutofRangeException Index was outside the Bounds of the Array"
这些是功能:

 <DllImport("kernel32.dll", SetLastError:=True)> _
Public Shared Function WriteProcessMemory(ByVal hProcess As IntPtr, ByVal lpBaseAddress As  IntPtr, ByVal lpBuffer As Byte(), ByVal nSize As System.UInt32, <Out()> ByRef lpNumberOfBytesWritten As Int32) As Boolean
End Function
Public Shared Function StrToByteArray(ByVal str As String) As Byte()
    Dim encoding As New System.Text.ASCIIEncoding()
    Return encoding.GetBytes(str)
End Function
Public Shared Function Poke(ByVal proc As Process, ByVal target As Integer, ByVal data As Byte()) As Boolean
    Return WriteProcessMemory(proc.Handle, New IntPtr(target), data, data.Length, 0)
End Function

不要以进程的名义添加程序/应用程序的扩展, 在您的情况下,对于Chrome AppName.Text必须是“Chrome”而不是“Chrome.exe”,
祝你好运。

你的
p
数组中有多少个进程?我将是它的零。只有一个进程正在试图编辑它的内存地址。那么,当您键入错误的进程名称时,您希望发生什么情况?上面的进程名称键入错误的地方是哪里?@FBEvo1-
process.GetProcessByName()
可以返回空数组。如果在调试器中中断是
p
和空数组?
Private Sub saveButton_Click(sender As Object, e As EventArgs) Handles saveButton.Click
    Try
        Dim p As Process() = Process.GetProcessesByName(AppName.Text)
        Dim Written As Boolean = False

        Written = Poke(p(0), &HB8FDCC, StrToByteArray(TxtVal.Text))

        If Written = True Then

            MsgBox("WriteProcessMemory Sucess!", MsgBoxStyle.OkOnly, "Poke Memory Status")


        ElseIf Written = False Then

            MsgBox("WriteProcessMemory Failed!", MsgBoxStyle.OkOnly, "Poke Memory Status")

        End If

    Catch ex As Exception

        MsgBox(ex.ToString)

    End Try
End Sub

End Class