Нужна помощь [readwritingmemory]
Обновление:
я могу изменить имя,но не читать его..
я получаю эту ошибку (при чтении памяти):
Ошибка 1 значение типа "1-мерный массив байтов" не может быть преобразовано в "строку".
Что я уже пробовал:
Public Shared Function ReadMemory(Of T)(ByVal address As Integer) As T Return MemoryModule.ReadMemory(Of T)(address, 0, False) End Function Public Shared Function ReadMemory(ByVal address As Integer, ByVal length As Integer) As Byte() Return MemoryModule.ReadMemory(Of Byte())(address, length, False) End Function Public Shared Function ReadMemory(Of T)(ByVal address As Integer, ByVal value As Object, ByVal unicodeString As Boolean) Dim buffer As Byte() If (GetType(T) Is GetType(String)) Then If unicodeString Then buffer = Encoding.Unicode.GetBytes(value.ToString) Else buffer = Encoding.ASCII.GetBytes(value.ToString) End If ElseIf (GetType(T) Is GetType(Byte())) Then buffer = Encoding.Unicode.GetBytes(value.ToString) Else buffer = Encoding.ASCII.GetBytes(value.ToString) End If If Not MemoryModule.UpdateProcessHandle Then Return CType(Nothing, T) End If Dim lpBaseAddress As New IntPtr(address) Dim dwSize As New IntPtr(buffer.Length) If Not MemoryModule.ReadProcessMemory(MemoryModule.ProcessHandle, lpBaseAddress, buffer, dwSize, IntPtr.Zero) Then Return CType(Nothing, T) End If If (GetType(T) Is GetType(Byte())) Then Return Conversions.ToGenericParameter(Of T)(buffer) End If Dim handle As GCHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned) Dim local2 As T = Conversions.ToGenericParameter(Of T)(RuntimeHelpers.GetObjectValue(Marshal.PtrToStructure(handle.AddrOfPinnedObject, GetType(T)))) handle.Free() Return local2 End Function Public Shared Function WriteMemory(ByVal address As Integer, ByVal value As Object, ByVal [unicode] As Boolean) As Boolean Dim bytes As Byte() If Not MemoryModule.UpdateProcessHandle Then Return False End If If TypeOf value Is String Then If [unicode] Then bytes = Encoding.Unicode.GetBytes(value.ToString) Else bytes = Encoding.ASCII.GetBytes(value.ToString) End If Else bytes = MemoryModule.GetObjectBytes(RuntimeHelpers.GetObjectValue(value)) End If Dim lpBaseAddress As New IntPtr(address) Dim nSize As New IntPtr(bytes.Length) Return MemoryModule.WriteProcessMemory(MemoryModule.ProcessHandle, lpBaseAddress, bytes, nSize, IntPtr.Zero) End Function Public Shared Function WriteMemory(ByVal address As Integer, ByVal value As Object) As Boolean Return MemoryModule.WriteMemory(address, RuntimeHelpers.GetObjectValue(value), False) End Function
And when trying to read the memory with that (HERE I GET THE ERROR) Label2.Text = MemoryModule.ReadMemory(&H234BFD4, AscW((ChrW(0))))
and this is how i write memory: MemoryModule.WriteMemory(&H234BFD4, (CrystalClearTextBox9.Text & ChrW(0)), False) the write one is working fine
Tomas Takac
Значит, это исключение времени выполнения? На какой именно линии он брошен?
Ralf Meier
Я предполагаю, что ошибка возникает, когда вы пытаетесь присвоить результат из ReadMemory Label2.Text.
Если я прав, то Errormessage ясен : вы доставляете массив байтов, но метка ждет строку - так что вам нужно только создать строку из вашего байтового массива ... или добавьте это преобразование к вашему ReadMemory-методу ...
Проверяли ли вы с помощью отладчика, какой метод действительно вызывается (первый или второй)?
Получаете ли вы правильную информацию типа внутри Т-объекта ?
SDHP442
может быть, вы поможете мне с этим обращением?