0

このコード ブロックを実行すると実行されますが、実行中のプロセス メモリ アドレスの文字列値を別のものに変更しようとすると、エラーが発生します。

"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

変更したメモリアドレス値列を実行するボタンです。

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
4

1 に答える 1

0

プログラム/アプリケーションの拡張子を Process の名前に追加しないでください。この場合、Chrome AppName.Text は「Chrome.exe」ではなく「Chrome」である必要があります。幸運を祈ります。

于 2013-05-30T09:03:29.977 に答える