PDA

View Full Version : سوال: نوشتن یا خواندن از مموری به صورت String



Reza-HNA
یک شنبه 20 مهر 1393, 18:53 عصر
سلام کسی میدونه چطور میشه اینکارو انجام داد؟
من خودم میتونم عدد Integer یا Long و یا Float رو از مموری بخونم یا بنویسم ولی رشته رو نمیتونم کسی میتونه کمک کنه.

این خوندن از مموری به صورت لانگ:
Private Declare Function ReadProcessMemory3 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Long


Public Function ReadLong(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Long
If ProcessName.EndsWith(".exe") Then
ProcessName = ProcessName.Replace(".exe", "")
End If
Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
If MyP.Length = 0 Then
MessageBox.Show(ProcessName & " isn't open!")
Exit Function
End If
Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
If hProcess = IntPtr.Zero Then
MessageBox.Show("Failed to open " & ProcessName & "!")
Exit Function
End If

Dim hAddress As Integer
Dim vBuffer As Long

hAddress = Address
ReadProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0)
Return vBuffer
End Function

کسی میتونه همین رو تبدیل به String کنه که استرینگ بر گردونه؟
البته خودم تبدیلش کردم ولی ارور میده :|

مهرداد صفا
پنج شنبه 24 مهر 1393, 17:27 عصر
با سلام.
شما در تعریف تابع آرگومنت buffer رو از نوع Byte() (آرایه بایت) در نظر بگیرید و پارامتر تعداد را دوبرابر کاراکتر های مورد نیاز قرار بدید. مثلا برای 2 کاراکتر مقدار 4 رو به ازای nsize ارسال کنید.
بعد از گرفتن آرایه با استفاده از System.Text.Encoding داده ها رو به متن تبدیل کنید.
در ضمن فراموش نکنید وقتی نوع داده رو از integer به آرایه تغییر میدید باید حالت ارسال رو از ByRef به ByVal تغییر بدید. چرا که آرایه ها reference type هستند (نیاز به توضیح داشت بفرمایید).
و باز هم فراموش نکنید که این نوع تعریف متغیر مربوط به vb6 هست و در vb.net باید از integer به جای long استفاده کنید.